数据淘汰策略
volatile-lru: 从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
volatile-ttl: 从已设置过期时间的数据集中挑选将要过期的数据淘汰
volatile-random: 从已设置过期时间的数据集中任意选择数据淘汰
allkeys-lru: 从数据集中挑选最近最少使用的数据淘汰
allkeys-random: 从数据集中任意选择数据淘汰
no-enviction(驱逐): 禁止驱逐数据
注意这里的6种机制,volatile和allkeys规定了是对已设置过期时间的数据集淘汰数据还是从全部数据集淘汰数据,后面的lru、ttl以及random是三种不同的淘汰策略,再加上一种no-enviction永不回收的策略
使用策略规则:
1、 如果数据呈现幂律分布,也就是一部分数据访问频率高,一部分数据访问频率低,则使用allkeys-lru2、 如果数据呈现平等分布,也就是所有的数据访问频率都相同,则使用allkeys-random
三种数据淘汰策略:
ttl和random比较容易理解,实现也会比较简单。主要是Lru最近最少使用淘汰策略,设计上会对key 按失效时间排序,然后取最先失效的key进行淘汰
基本数据结构类型
五种基本类型:
- string(字符串)
- hash(哈希)
- list(列表)
- set(集合)
- zset(无序集合)
特殊数据类型
- Geospatial
- Hyperloglog
- Bitmap
redis单线程
Redis是单线程模型的,而单线程避免了CPU不必要的上下文切换和竞争锁的消耗。也正因为是单线程,如果某个命令执行过长(如hgetall命令),会造成阻塞。Redis是面向快速执行场景的数据库。,所以要慎用如smembers和lrange、hgetall等命令。
Redis 6.0 引入了多线程提速,它的执行命令操作内存的仍然是个单线程。