本文主要是介绍Redis学习一,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Redis学习
Redis的作用:
- 用作缓存:与Memcached相比,首先Redis支持的数据类型更丰富;第二Redis支持数据持久化;第三:Reids有灾难恢复机制;第四:Memcached 过期数据的删除策略只用了惰性删除,而 Redis 同时使用了惰性删除与定期删除。
- 事件发布或订阅
- 高速队列
Redis数据结构:
基本数据类型:String ; Hash ; Set ; List ; SortedSet;bitmap
其他: HyperLogLog; Geo; Pub/Sub
Redis Module BloomFilter RedisSearch Redis-ML
数据结构 | 说明 | 实例 | 应用 |
---|
HyperLogLog | 用来做基数统计的算法 ,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数 | pfadd:添加;pfcount:获得基数值;pfmerge:合并多个key | HyperLogLog 去重比 bitmap 方便很多,一般可以bitmap和hyperloglog配合使用,bitmap标识哪些用户活跃,hyperloglog计数。一般使用:统计注册 IP 数;统计每日访问 IP 数;统计页面实时 UV 数;统计在线用户数;统计用户每天搜索不同词条的个数 |
Geo | 存储地理位置信息,并对存储的信息进行操作 | geoadd:添加地理位置的坐标;geopos:获取地理位置的坐标;geodist:计算两个位置之间的距离;georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合;georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合;geohash:返回一个或多个位置对象的 geohash 值。 | 地理位置 |
Pub/Sub | 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息 | psubscribe:订阅一个或多个符合模式的频道;pubsub:查看订阅与发布系统状态;publish:将消息发送到指定的频道;punsubscribe:退订所有给定模式的频道;subscribe:订阅给定的一个或多个频道的信息;unsubscribe:退订给定的频道 | 通信 |
剩余的等下次进阶
Redis单线程模型
- 通过I/O多路复用基数来监听大量用户;
- Redis通过事件驱动:文件事件;时间事件
文件事件:
- Redis是支持多线程的。但6.0前主要还是单线程处理;6.0后引入多线程是为了提高网络I/O读写性能
Redis缓存时间设置
- Redis在保存数据时一般会设置一个缓存时间(因为内存有限)
- Redis 中除了字符串类型有自己独有设置过期时间的命令 setex 外,其他方法都需要依靠 expire 命令来设置过期时间 。另外, persist 命令可以移除一个键的过期时间。
- Redis如何判断数据是否过期:
Redis维护一个过期字典用来保存过期的时间,过期字典的键指向Redis数据库中的某个Key,过期字典的值是一个 long long 类型的整数,这个整数保存了 key 所指向的数据库键的过期时间(毫秒精度的 UNIX 时间戳)。 - 过期数据删除策略
Redis采用策略: 定期删除+惰性/懒汉式删除 。
删除策略 | 说明 |
---|
惰性删除 | 只会在取出 key 的时候才对数据进行过期检查。这样对 CPU 最友好,但是可能会造成太多过期 key 没有被删除。 |
定期删除 | 每隔一段时间抽取一批 key 执行删除过期 key 操作。并且,Redis 底层会通过限制删除操作执行的时长和频率来减少删除操作对 CPU 时间的影响。 |
- 如果大量的Key需要设置同一过期时间,可能会出现缓存雪崩现象,所以一般在时间上加一个随机值,是的过期时间分散一些
Redis内存淘汰机制
- volatile - lru : 从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
- volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰
- volatile-random:从已设置过期时间的数据集中任意选择数据淘汰
- llkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key(这个是最常用的)
- allkeys-random:从数据集中任意选择数据淘汰
- no-eviction:禁止驱逐数据,也就是说当内存不足以容纳新写入数据时,新写入操作会报错。
- volatile-lfu(least frequently used):从已设置过期时间的数据集中挑选最不经常使用的数据淘汰
- allkeys-lfu(least frequently used):当内存不足以容纳新写入数据时,在键空间中,移除最不经常使用的 key
Redis持久化
- RDB: 可以在指定的时间间隔内生成数据集的时间点快照
优点:
非常紧凑,保存了Redis在某个时间点上的数据集。适用于备份
适用于灾难恢复
最大化Redis性能,父进程只需要fork出一个子进程来处理保存工作就好
在恢复大数据集时的速度比AOF的恢复速度要快
缺点:
因为按照时间点保存数据,数据丢失无可避免。
保存RDB时需要fork子进程,数据集较大时会非常耗时。 - AOF:记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。
优点:
使用AOF持久化会让Redis非常耐久。可以设置不同的同步策略,默认为每秒同步一次。丢失数据也最多丢失一秒。
AOF文件是只进行追加操作的日志文件,因此对 AOF 文件的写入不需要进行 seek。
在AOF文件过大时会自动对AOF文件进行重写
缺点:
AOF文件一般大于RDB文件
根据所使用的同步策略,AOF的速度可能会慢于RDB。
Redis事务
可理解为:Redis 事务提供了一种将多个命令请求打包的功能。然后,再按顺序执行打包的所有命令,并且不会被中途打断。
这篇关于Redis学习一的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!