Redis流行的原因( 二 )
5. 丰富的数据类型常用的几种数据类型
- string
- list
- set
- zset
- hash
- HyperLogLog
- bitmap
- Geo
- 触发机制当访问redis中键值对时会判断这个键值对是否过期,如果过期的话就会删除这个键值对并返回nil
定期删除
为了弥补惰性删除对于内存的不友好,redis中还有一种过期策略即定期删除 。
- 触发机制当一个键值对设置expire后 , redis中会维护一个过期字典 。 这个过期字典在redis中会使用serverCron时间事件轮询 , 轮询过期键值对进行释放 。 (redis.conf配置文件中hz配置项配置 , serverCron每秒执行次数, 默认10表示每100ms执行一次serverCron)
- 随机选取过期字典中的100个key
- 淘汰所有的过期key
- 如果过期key超过25个则重复步骤1
物理机的内存空间是有限的 , 当所有内存被占满以后redis接收到写操作命令应该怎么处理?此时就会触发主动删除
- 触发机制redis.conf配置文件中maxmemory参数设置redis占用内存的大小 , 当超过这个值限定以后将会根据maxmemory-policy设置清理redis内存对象有关这个maxmemory提醒一点:集群环境下适当调低maxmemory配置,给output buffer预留空间 。 因为output buffer空间并不包括在maxmemory中
- 清理策略清理策略划分可以分为两个维度与三个方面两个维度分别是过期键中筛选、所有键中筛选三个方面分别是 lru、ttl、random
- volatile-lru:过期键中最长时间未调用的键值对
- volatile-ttl:过期键中即将过期的键值对
- volatile-random:过期键中随机删除
- allkeys-lru:所有键中最长时间未调用的键值对
- allkeys-random:所有键中随机删除
- noevication:不清理,返回异常
- RDB
- AOF
- 混合模式(RDB+AOF)
- 开启方式redis.conf配置save
#save ""# 关闭RDBsave 900 1# after 900 sec (15 min) if at least 1 key changedsave 300 10# after 300 sec (5 min) if at least 10 keys changedsave 60 10000# after 60 sec if at least 10000 keys changed
功能核心函数:rdbSave() / rdbLoad()文章插图
- RDB触发场景:
- 执行 SHUTDOWN 命令(未配置AOF)
2. 执行 SAVE/BGSAVE 命令127.0.0.1:6379> BGSAVE21499:M 08 Jun 2020 17:53:18.596 * Background saving started by pid 21528Background saving started127.0.0.1:6379> 21528:C 08 Jun 2020 17:53:18.601 * DB saved on disk21528:C 08 Jun 2020 17:53:18.601 * RDB: 0 MB of memory used by copy-on-write21499:M 08 Jun 2020 17:53:18.681 * Background saving terminated with success
SAVE/BGSAVE区别SAVE :使用主进程进行RDB快照数据的持久化(会阻塞Redis其他操作)BGSAVE :fork()出来子进程进行RDB快照数据的持久化(推荐)
推荐阅读
- 央行的“硬钱包”来势汹汹,支付不再需要手机?支付宝、微信慌了
- 为何日本实体店能“干倒”电商,中国实体店却不行?原因值得深思
- 为什么苹果用户哪怕买二手机,都不用安卓?三点原因太真实
- 罕见力挺!爱立信:继续禁用华为5G将撤出瑞典!背后有2大原因
- iPhone 12信号差真实原因曝光:不是基带问题
- 手机网速慢?多半是这4个原因造成的,教你一招提升网速
- 2021年第一个大乌龙!腾讯华为深夜和好,“分手”原因很现实
- 别让老人的手机成静音的摆设
- 微信上线「出行服务」,腾讯补足智慧出行的最后一环?
- 为什么商家害怕别人把手机放在称上?什么原因只有同行才知道