Redis知识点小结一
概念:
高性能和高并发
为什么不用map做缓存却用redis呢
redis的优点
-
支持多种数据类型(list set zset hash等等)而传统memcache仅支持String类型
-
redis支持数据持久化,可以将内存中的数据保存在磁盘中。重启redis可直接使用。
-
redis使用单线程的多路IO复用模型,数据安全。
redis常用数据结构及使用场景
-
String:String数据结构为简单的Key-Value类型,value不仅可以是字符串,也可以是数字。
-
List:支持反向查找和遍历,但有额外开销。可实现分页查询。
-
Set:相比较List,Set中不允许存储重复的元素。
redis过期时间
redis的删除策略
-
定期删除:默认每隔100ms随机抽取那些设置过期数据的key,检查是否过期,过去就删除,是随机抽取的。
-
惰性删除: 定期删除可能导致许多过期的key过了有效时间却没有被删除,当过期key没有靠定期删除机制删除时,就停留在内存中,除非系统去查看那些key,才会被redis删除。这就是惰性删除。
-
解决策略:仅仅通过设置过期时间还不够,还需要内存淘汰策略。关于内存淘汰机制,请继续往下看。
redis内存淘汰机制
-
volatile-ru:从已设置过期时间的数据集(server.db[i].expires)中挑选出最近最少使用的数据,然后淘汰。
-
volatile-til:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据,然后淘汰。
-
volatile-random:从已设置过期时间的数据(server.db[i].expires)中选择任意数据,然后淘汰。
-
allkeys-lru:当内存不足以容纳新的写入数据操作时,在键空间中,移除最近最少使用的key(常用)
-
alleys-random:从数据集(server.db[i].dict)中选择任意数据淘汰。
-
no-eviction:禁止驱逐数据。就是不允许删除数据,没人使用这个。
redis持久化机制
save |
900 1 |
900秒后,至少有1个key发生变化,redis自动触发BGSAVE命令 |
save |
300 10 |
300秒后,至少有10个key发生变化,redis自动触发BGSAVE命令 |
save |
60 10000 |
60秒后,至少有10000个key发生变化,redis自动触发BGSAVE命令 |
-
AOF持久化
-
AOF相比较RDB,AOF的实时性更好,redis默认情况下没有开启AOF(append only file)方式的持久化,可以通过设置appendonly参数开启:appendonly:yes
-
AOF开启后,每执行一条更改操作,redis就会将该命令写入磁盘中的AOF文件。
-
在redis的配置文件中存在三种不同的AOF持久化方式:
-
appendfsync always # 每次有数据修改时会写入AOF文件,会降低redis的速度
-
appendfsync everysec # 每秒钟同步一次,显式地将多个写命令同步到磁盘。
-
appendfsync no # 让操作系统决定何时进行同步操作
-
为了兼顾数据存储和写入性能,用户可以考虑appendfsync everysec一项,让redis每秒同步一次,这样用户最多丢失1秒的数据,当磁盘IO繁忙时,redis会放慢自己的速度以使用磁盘的最大写入速度。
小结二改日更新。。。
原文链接:http://www.cnblogs.com/bytAya/p/11172216.html