Redis存储访问速度快
因为是单进程的,使用IO多路复用实现。
IO多路复用:
原本的IO访问,轮询效率低:资源利用率也不高。当多核发展起来,一条io开一个线程。但是要耗费系统资源。
为了解决这样的问题出现了IO多路复用
具体实现:使用一个线程追踪多条IO流(读,写,异常),但不使用轮询,而是由设备本身告知程序哪条流可用了,这样一来就解放了cpu,也充分利用IO资源。
Redis的数据类型
1、string 简单的key :value存储,session存储可以使用都是转为json序列化,反序列化进行存储。
2、hash 特别适合存储对象,而且节省空间 添加 删除操作时间复杂度都是0(1)。但是OBJECT进行操作,需要添加get/set方法。
3、list可以做简单的消息队列,也可以使用分页功能。速度快。
4、set 存放不重复的集合,全局去重复,适用于集群部署的功能。业务中的交集,并集,差集等操作。
5、sorted set 加了一个权重操作,可以取topN的操作。
redis 过期/删除/清理策略
1、被动删除:当key被操作时,reids检查key是否过期,如果过期则删除返回。
优点:对CPU友好
缺点:会有很多过期,但是没有被操作的垃圾数据,占用大量的内存。
2、主动删除
周期性的随机测试一些设置过期时间的key,如果过期则清理
优点:用户设定淘汰频率
缺点:数值越大,CPU消耗越大。最大不要超过100,默认10(每秒钟调用10次后台任务)
3、主动清理
当mem_used内存已经超过maxmemory的设定,就会触发主动清理策略
volatile-lru:只对设置了过期时间的key进行LRU(默认值)
allkeys-lru : 删除lru算法的key
volatile-random:随机删除即将过期key
allkeys-random:随机删除
volatile-ttl : 删除即将过期的
noeviction : 永不过期
清理过程是阻塞的,如果在maxmemory还在不断写入,会造成延迟。