赞
踩
内存是有限的,如果缓存中的所有数据都是一直保存,很容易OOM
通过过期字典来保存数据的过期时间
Redis采用的是定期删除+惰性删除
1. noeviction(默认):不淘汰任何key,内存满时不写入新的key。
2. volatile-ttl:对设置了TTL的key,比较key的剩余TTL值,值越小越先被淘汰
3. allkeys-random:对所有key进行随机淘汰
4. volatile-random:对设置了TTL的key进行随机淘汰
5. allkeys-lru:对所有key基于LRU算法进行淘汰
6. volatile-lru:对设置了TTL的key基于LRU算法进行淘汰
7. allkeys-lfu:对全体key给予LFRU算法进行淘汰
8. volatile-lfu:对设置了TTL的key基于LFU算法进行淘汰
依赖持久化机制
实现类似照片记录效果的方式,就是把某一时刻的数据和状态以文件的形式写到磁盘上,也就是快照。这样一来即使故障宕机,快照文件也不会丢失,数据的可靠性也就得到了保证。这个快照文件就称为RDB文件(dump.rdb)
以日志的形式来记录每个写操作,将Redis执行过的所有写命令记录下来,只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据。
支持开启混合方式设置 设置aof-use-rdb-preamble的值为 yes 表示开启,设置为no表示禁用
RDB+AOF的混合方式---------> 结论:RDB镜像做全量持久化,AOF做增量持久化
先使用RDB进行快照存储,然后使用AOF持久化记录所有的写操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的RDB记录。这样的话,重启服务的时候会从RDB和AOF两部分恢复数据,既保证了数据完整性,又提高了恢复数据的性能。简单来说:混合持久化方式产生的文件一部分是RDB格式,一部分是AOF格式。
Redis通过MULTI、EXEC、DISCARD、WATCH等命令来实现事务。
Redis的事务不保证原子性,也就是不保证所有指令同时成功或同时失败,只有决定是否开始执行全部指令的能力,没有执行到一半进行回滚的能力
对于string类型的value,大于等于 10kb 就是bigkey
对于list、hash、set、zset类型,超过5000个属于bigkey
危害:
1.内存不均
2.超时删除
3.网络流量阻塞
使用--bigkeys参数查找或者分析RDB文件
如何避免大量key集中过期?
1.给key设置随机过期时间
2.开启lazy-free惰性删除
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。