BSSZDS930

博客园 首页 新随笔 联系 订阅 管理

Redis是一个key-value的数据库服务器,它将所的数据库都保存在服务器状态redisServer结构的db数组中。db数组中的每个项都是redisDb结构,一个db数组保存着服务器中所有的数据库,默认创建16个数据库,服务器在初始化时会根据dbnum的值创建对应数量的数据库。

struct redisServer{
    ...
    int dbnum;
    redisDb *db;      
    ...  
}
typedef struct redisDb{
    ...
    dict *dict;
    dict *expires;
    ...
}redisDb;

Redis设置键的生存时间或过期时间

  • EXPlRE 命令用于将键key 的生存时间设置为ttl 秒;
  • PEXPIRE 命令用于将键key 的生存时间设置为ttl 毫秒;
  • EXPIREAT < timestamp> 命令用于将键key 的过期时间设置为timestamp所指定的秒数时间戳;
  • PEXPIREAT < timestamp > 命令用于将键key 的过期时间设置为timestamp所指定的毫秒数时间戳。
    ** SETEX命令可以在设置一个字符串key时,同时设置该key的过期时间(只能用于字符串键).
    ** TTL 命令和PTTL 命令接受一个带有生存时间或者过期时间的键,返回这个键的剩余生存时间.
> time
1) "1545470973"
2) "878082"
> expireat key1 1545471973
(integer) 1
> ttl key1
(integer) 962

key删除策略

  • 定期删除:Redis每隔一段时间就会去查看Redis设置了过期时间的key,会在100ms的间隔中默认查看3个key。
  • 惰性删除:如果当你去查询一个已经过了生存时间的key时,Redis会先查看当前key的生存时间,是否已经到了,直接删除当前key,并且给用户返回一个空值。

Redis的淘汰机制

在Redis内存已经满时,添加一个新的数据,执行淘汰机制。

  • volatile-lru:在内存不足时,Redis会在设置过了生存时间的key中干掉一个最近最少使用的key。
  • volatile-lfu:在内存不足时,Redis会在设置过了生存时间的key中干掉一个最近最少频次使用的key。
  • volatile-ttl:在内存不足时,Redis会在设置过了生存时间的key中干掉一个剩余生存时间最少的key。
  • volatile-random:在内存不足时,Redis会在设置过了生存时间的key中随机干掉一个。
  • allkeys-lru:在内存不足时,Redis会在全部的key中干掉一个最近最少使用的key。
  • allkeys-lfu:在内存不足时,Redis会在全部的key中干掉一个最近最少频次使用的key。
  • allkeys-random:在内存不足时,Redis会在全部的key中随机干掉一个。
  • noeviction:(默认)在内存不足时,直接报错。
    ** 指定淘汰机制的方式:maxmemory-policy具体策略,
    ** 设置Redis的最大内存:maxmemory 字节大小

Redis的常见问题 https://www.pianshen.com/article/71901597089/

posted on 2020-10-19 10:22  BSSZDS930  阅读(77)  评论(0编辑  收藏  举报