redis常用指令总结以及功能介绍

redis常用指令总结以及功能介绍 - 前行的snail - CSDN博客

第一部分 redis的常用指令

一、针对key的操作

1.1 del key [key .. ]                 , 删除指定的一个或者多个key;

1.2 dump key                          , 序列化给定的key

1.3 restore key ttl serialized-value  , 反序列化到key

1.4 exists key                        , 判断某一key是否存在

1.5 expire key seconds                , 设置key的过期时间 

            ① set命令可以覆盖过期时间;不改变key的操作不会影响key的生存时间

② rename也不会改变key的过期时间

③ persist命令可以删除key的过期时间,即永久

④ ttl可以查看redis中key的过期时间

1.6 expireat key timestamp            , 设置key的生存时间

1.7 keys pattern                      , 查找所有符合给定模式pattern的key

            ① *, ?, [m,n]

1.8 move key db                       , 将当前数据库中的key移动数据库 db中。使用select db可以切换数据库

1.9 persist key                       , 移除给定 key 的生存时间

1.10 pexpire,pexpireat                , 设置key的过期、生存时间,单位毫秒

1.11 ttl,pttl                         , key的剩余过期时间,单位秒,单位是毫秒

1.12 randomkey                        , 随机返回一个key

1.13 rename key newkey                , 将 key 改名为 newkey ,当newkey存在时会覆盖

1.14 renamenx key newkey              ,  当newkey不存在时,将key改名为newkey

1.15 sort key [by pattern] [get pattern [get pattern]] [limit offset count] [asc | desc] [alpha] [store destination]  ,排序,pattern可以有 *字符出现

1.16 type key                         ,  返回key所存储的值的类型 (none,string,list,set,zset,hash)

1.17 scan [db] cursor [MATCH pattern] [COUNT count] ,增量式迭代。  类似有 sscan,hscan,zscan

          ① SCAN命令用于迭代当前数据库中的数据库键。   返回结果为:用于下一次迭代的新游标;所有被迭代的元素

          ② SSCAN 命令用于迭代集合键中的 元素。

          ③ HSCAN 命令用于迭代哈希键中的 键值对。

          ④ ZSCAN 命令用于迭代有序集合中的 元素(包括元素成员和元素分值)

二、String操作

2.1 append key value                 , 将value追加到原先值的末尾

2.2 bitcount key [start] [end]       , 计算给定字符串中,设置为1的比特位的数据量。

      ① 注意字符串"1"对应的十进制为49,二进制为00110001

      ② 可以通过setbit key offset value

2.3 bitop operation destkey key [key ...]  , 对key的二进制字符串进行元操作,operation可以是and,or, not,xor。

2.4 decr key                          , 将key中存储的数字值减一

      ① 与incr命令相反

2.5 decrby key decrement              , 将key所存储的值减去减量decrement

      ② 与incrby命令相反

2.6 get key

2.7 getbit key offset                 , 获取key中所存储字符串值对应偏移量上的bit

2.8 getrange key start end            , 返回key中字符串值的子字符串

2.9 getset key value                  , 设置key的值为value,并返回key的旧值

2.10 mget key [key ...]               , 返回指定的多个key的值

2.11 mset key value [key value ...]   , 同时设置多个key-value值

2.12 msetnx key value [key value ...] , 当且仅当所有的key都不存在时,同时设置多个key-value对

2.13 set key value [EX second] [PX millisceonds] [NX|XX]

       ① setex key second value , 设置key的同时设置过期时间单位为秒

       ② psetex key millisceonds value , 过期时间单位为毫秒

③ setbit key offset value , 设置指定偏移量上的位

④ setnx key value , 当且仅当key不存在时设置key的value

⑤ setrange key offset value , 从offset开始,用value参数覆盖key中的值

2.14 strlen key                      , 返回key中所存字符串的长度

三、 Hash操作

3.1 hdel key field [field ...]       , 删除哈希表key中的一个或多个指定域

3.2 hexists key field                , 查看哈希表key中给定的field是否存在

3.3 hget key feild                   , 查看哈希表key中给定的field的值

      ① hgetall key , 查看哈希表key中所有的field的值

  ② hmget key field [field ...] , 返回哈希表key中一个或多个给定域的值

3.4 hincrby key field increment      , 为哈希表key中的field的值加上增量increment

3.5 hkeys key                        , 获取哈希表key中的所有域

3.6 hlen key                         , 返回哈希表key中域的数量

3.7 hset key field value             , 设置哈希表key中field的值

      ① hmset key field value [field value] , 同时设置过个field的值

  ② hsetnx key field value , 当field不存在时,设置field的值

3.8 hvals key                        , 返回哈希表key中所有域的值

3.9 hstrlen key field                , 返回哈希表key中给定field关联值的字符长度

四、List操作(List相当于堆栈)

4.1 lpush key value [value ...]      , 将一个或者多个值插入到列表key的表头

      ① rpush key value [value ...] , 将一个或者多个值插入到列表key的表尾

  ② lpushx key value ,当且仅当key存在时将值value插入到key的表头

  ③ rpushx key value ,当且仅当key存在时将值value插入到key的表尾

4.2 lpop key                          , 移除并返回列表key的头元素

      ① rpop key , 移除并返回列表的尾元素

  ② blpop key [key ...] timeout , lpop的阻塞式指令

  ③ brpop key [key ...] timeout , rpop的阻塞式指令

  ④ rpoplpush source destination , 将列表Source的尾元素弹出以及返回客户端,并且将该元素插入到destination列表中

  ⑤ brpoplpush source destination timeout , rpoplpush的阻塞版

4.3 lindex key index                  , 返回key中下表为index的元素

4.4 linsert key before|after pivot value , 将值value插入到key中,位为pivot之前或者之后

4.5 llen key                           , 返回列表key的长度

4.6 lrange key start stop              , 返回列表key中指定区间内的元素

4.7 lrem key count value               , 根据count的值,移除列表中与参数value相等的元素

4.8 lset key index value               , 将列表key下表为index的元素值设置为value

4.9 ltrim key start stop               , 对一个列表进行trim

五、Set操作(不可重复)

5.1 sadd key member [member ...]       , 将元素加入到集合key中,已经有的忽略

5.2 scard key                          , 返回集合key的元素个数

5.3 sdiff key [key ...]                , 返回一个集合的全部成员,该集合是所有给定集合之间的差集

5.4 sdiffstore destination key [key ...] , 放回集合之间的差集,并将它保存在destination集合中

5.5 sinter key [key ...]               ,返回集合中给定集合的交集

5.6 sinterstore destination key [key ...] , 返回给定集合之间的差集,并将它保存在destination集合中

5.7 sismember key member               , 判断member元素是否为集合key成员

5.8 smembers key                       , 返回集合中的所有成员

5.9 smove source destination member    , 将member元素从source集合移动到destination集合

5.10 spop key                          , 移除并返回集合中的一个随机元素

5.11 srandmember key [count]           , 返回指定count个数的集合,count为正数表示不能重复,负数可以重复

5.12 srem key member [member ...]      , 移除集合key中的多个元素

5.13 sunion key [key ...]              , 返回所有指定key的并集

5.14 sunionstore destination key [key ...] 

六、ZADD操作(有序集合)

6.1 zadd key source member [[source member] [...]] , 将一个或者多个member元素及其score值加入到有序集合key中

6.2 zcard key                          , 返回有序集合key的元素个数

6.3 zcount key min max                 , 返回有序集合key中,score值在min和max之间的元素个数

6.4 zincrby key increment member       , 为有序集合key的成员member的score值加上增量increment

6.5 zrange key start stop              , 返回有序集key中,指定下标区间内的成员

  ① zrevrange key start stop [withscores] , 返回指定区间内的成员递减顺序

  ② zrevrangebyrank key max min [withscores] [limit offset count]

6.6 zrangebyscore key min max [withscopes] [limit offset count] , 返回score值介于min和max之间的集合

6.7 zrank key member                   , 返回有序集key中成员member的排名

  ① zrevrank key member          , 返回有序集key中成员member的递减排名

6.8 zrem key member [member ...]       , 移除有序集key中的多个成员

      ① zremrangebyrank key start stop , 移除有序集key中,指定排名区间内的所有成员

  ② zremrangebyscore key min max , 移除有序集key中,指定score范围内的成员

6.9 zscore key member                  , 返回成员member的score值

七、pub/sub(发布、订阅)

7.1 psubscribe pattern [pattern ...]   , 订阅一个或者多个符合给定模式的频道

7.2 publish channel message            , 将信息message发送到指定的频道channel

7.3 pubsub <subcommand> [argument ...] , 查看订阅与发布系统状态的内省命令

  eg pubsub channels [pattern] , 列出当前的活跃频道,订阅模式的客户端不计算在内

  eg pubsub numsub [channel-1 ...] , 返回给定频道的订阅者数量,订阅模式的客户端不计算在内

7.4 punsubscribe [pattern ...]          , 指示客户端退订所有给定模式

7.5 subscribe channel [channel ...]     , 订阅给定的一个或者多个频道信息

7.6 unsubscribe [channel ...]           , 指示客户端退订给定的频道

八、Transaction(事务)

8.1 discard                             , 取消执行事务块内的所有命令

8.2 exec                                , 执行事务块内的命令

8.3 multi                               , 标记一个事务块的开始

8.4 unwatch                             , 取消watch命令对所有key的监视

8.5 watch key [key ...]                 , 监视一个或者多个key,如果事务执行之前,这个kye被其它命令所动,则事务被打断

九、Connection(连接)

9.1 auth password                       , 登录redis时输入密码

9.2 echo message                        , 打印一个特定的信息message,测试时使用

9.3 ping                                , 测试与服务器的连接,如果正常则返回pong

9.4 quit                                , 请求服务器关闭与当前客户端的连接

9.5 select index                        , 切换到指定的数据库

十、Server(服务器)

10.1 bgsave                             , 后台异步保存数据到硬盘

10.2 client setname/client getname      , 为连接设置、获取名字

10.3 client kill ip:port                , 关闭地址为 ip:port的客户端

10.4 client list                        , 以人类可读的方式,返回所有的连接客户端信息和统计数据

10.5 config get parameter               , 取得运行redis服务器的配置参数

10.6 config set parameter value         , 设置redis服务器的配置参数

10.7 config resetstat                   , 重置info命令的某些统计数据

10.8 dbsize                             , 返回当前数据库中key的数量

10.9 flushall                           , 清空整个redis服务器的数据(删除所有数据库的所有 key)

10.10 flushdb                           , 清空当前数据库中的所有key

10.11 info [section]                    , 返回redis服务器的各种信息和统计数据

10.12 lastsave                          , 返回最近一次redis成功将数据保存到磁盘时的时间

10.13 monitor                           , 实时打印出redis服务器接收到的指令

10.14 save                              , 将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘

10.15 slaveof host port                 , 将当前服务器转变为指定服务器的从属服务器

10.16 slowlog subcommand [argument]     , Redis 用来记录查询执行时间的日志系统

第二部分 redis的一些功能介绍

一、持久化

1.1 持久化方式:RDB与AOF。

①RDB:在指定的时间间隔内生成数据集的时间点快照(snapshot);

②AOF(append-only file):持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。

③Redis支持同时使用AOF和RDB持久化。在这种情况下,当Redis重启时,它会优先使用AOF文件来还原数据集,因为AOF文件保存的数据集通常比RDB文件所保存的数据集更完整。

1.2 RDB持久化

   当 Redis 需要保存 dump.rdb 文件时, 服务器执行以下操作:

①Redis 调用 fork()。

②子进程将数据集写入到一个临时 RDB 文件中。

③当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件。

缺点:如果 Redis 因为某些原因而造成故障停机, 那么服务器将丢失最近写入、且仍未保存到快照中的那些数据。因此需要使用开启AOF。

1.3 AOF重写

①AOF的运作方式是不断地将命令追加到文件的末尾,所以随着写入命令的不断增加,AOF文件的体积也会变得越来越大。

②你可以配置 Redis 多久才将数据 fsync 到磁盘一次。有三个选项,每次有新命令追加到 AOF 文件时就执行一次 fsync :非常慢,也非常安全;每秒 fsync 一次:足够快(和使用 RDB 持久化差不多),并且在故障时只会丢失 1 秒钟的数据;从不 fsync :将数据交给操作系统来处理。更快,也更不安全的选择。

③AOF重写步骤:

   (1)Redis 执行 fork() ,现在同时拥有父进程和子进程。

   (2)子进程开始将新 AOF 文件的内容写入到临时文件。

   (3)对于所有新执行的写入命令,父进程一边将它们累积到一个内存缓存中,一边将这些改动追加到现有AOF文件的末尾:这样即使在重写的中途发生停机,现有的 AOF 文件也还是安全的。

   (4)当子进程完成重写工作时,它给父进程发送一个信号,父进程在接收到信号之后,将内存缓存中的所有数据追加到新 AOF 文件的末尾。

   (5)搞定!现在 Redis 原子地用新文件替换旧文件,之后所有命令都会直接追加到新 AOF 文件的末尾。

④从RDB持久化到AOF持久化切换

    (1)为最新的 dump.rdb 文件创建一个备份。

             (2)将备份放到一个安全的地方。

             (3)执行以下两条命令:

                      CONFIG SET appendonly yes

                      CONFIG SET save ""    //关闭RDB功能

1.4 数据备份

①创建一个定期任务(cron job)每小时将一个RDB文件备份到一个文件夹,并且每天将一个RDB文件备份到另一个文件夹。 ②确保快照的备份都带有相应的日期和时间信息,每次执行定期任务脚本时,使用find命令来删除过期的快照:比如说,你可以保留最近48小时内的每小时快照,还可以保留最近一两个月的每日快照。

        ③至少每天一次,将RDB备份到你的数据中心之外,或者至少是备份到你运行Redis服务器的物理机器之外。

二、Sentinel

2.1 Redis的Sentinel系统用于管理多个Redis服务器,该系统执行以下三个任务

①监控(Monitoring):Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。

②提醒(Notification):当被监控的某个Redis服务器出现问题时,Sentinel可以通过API向管理员或者其他应用程序发送通知。

③自动故障迁移(Automatic failover):当一个主服务器不能正常工作时,Sentinel会开始一次自动故障迁移操作,它会将失效主服务器的其中一个从服务器升级为新的主服务器,并让失效主服务器的其他从服务器改为复制新的主服务器;当客户端试图连接失效的主服务器时,集群也会向客户端返回新主服务器的地址,使得集群可以使用新主服务器代替失效服务器。

2.2 启动 Sentinel

①redis-sentinel /path/to/sentinel.conf

②redis-server /path/to/sentinel.conf --sentinel

2.3 配置 Sentinel

sentinel monitor mymaster 127.0.0.1 6379 2   //配置指示 Sentinel 去监视一个名为 mymaster 的主服务器。这个主服务器的 IP 地址为 127.0.0.1 , 端口号为 6379 , 而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意

sentinel down-after-milliseconds mymaster 60000  //选项指定了 Sentinel 认为服务器已经断线所需的毫秒数

sentinel failover-timeout mymaster 180000

sentinel parallel-syncs mymaster 1    //选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步

sentinel monitor resque 192.168.1.3 6380 4

sentinel down-after-milliseconds resque 10000

sentinel failover-timeout resque 180000

sentinel parallel-syncs resque 5

2.4 主客观下线

①主观下线(Subjectively Down,简称SDOWN)指的是单个 Sentinel 实例对服务器做出的下线判断。

②客观下线(Objectively Down,简称ODOWN)指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断,并且通过SENTINEL is-master-down-by-addr命令互相交流之后,得出的服务器下线判断。(一个 Sentinel 可以通过向另一个 Sentinel发送SENTINEL is-master-down-by-addr命令来询问对方是否认为给定的服务器已下线。)

2.5 Sentinel需要定期执行的任务

①每个Sentinel以每秒钟一次的频率向它所知的主服务器、从服务器以及其他 Sentinel 实例发送一个 PING 命令。

②如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 那么这个实例会被 Sentinel 标记为主观下线。 一个有效回复可以是: +PONG 、 -LOADING 或者 -MASTERDOWN 。

③如果一个主服务器被标记为主观下线,那么正在监视这个主服务器的所有 Sentinel 要以每秒一次的频率确认主服务器的确进入了主观下线状态。

④如果一个主服务器被标记为主观下线,并且有足够数量的Sentinel(至少要达到配置文件指定的数量)在指定的时间范围内同意这一判断,那么这个主服务器被标记为客观下线。

⑤在一般情况下,每个 Sentinel 会以每10秒一次的频率向它已知的所有主服务器和从服务器发送INFO命令。 当一个主服务器被Sentinel标记为客观下线时,Sentinel 向下线主服务器的所有从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒一次。

⑥当没有足够数量的 Sentinel 同意主服务器已经下线, 主服务器的客观下线状态就会被移除。 当主服务器重新向 Sentinel 的 PING 命令返回有效回复时, 主服务器的主观下线状态就会被移除。

2.6 Sentinel API

①主要有两种:(1)通过直接发送命令来查询被监视 Redis 服务器的当前状态;(2)使用发布与订阅功能, 通过接收 Sentinel 发送的通知。

②Sentinel命令

(1)PING :返回 PONG 。

(2)SENTINEL masters :列出所有被监视的主服务器,以及这些主服务器的当前状态。

(3)SENTINEL slaves <master name> :列出给定主服务器的所有从服务器,以及这些从服务器的当前状态。

(4)SENTINEL get-master-addr-by-name <master name> 返回给定名字的主服务器的IP地址和端口号。如果这个主服务器正在执行故障转移操作,或者针对这个主服务器的故障转移操作已经完成, 那么这个命令返回新的主服务器的 IP地址和端口号。

(5)SENTINEL reset <pattern> : 重置所有名字和给定模式 pattern 相匹配的主服务器。 pattern 参数是一个 Glob 风格的模式。 重置操作清除主服务器目前的所有状态, 包括正在执行中的故障转移, 并移除目前已经发现和关联的, 主服务器的所有从服务器和 Sentinel 。

(6)SENTINEL failover <master name> : 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移 (不过发起故障转移的 Sentinel 会向其他 Sentinel 发送一个新的配置,其他 Sentinel 会根据这个配置进行相应的更新)。

③发布与订阅信息

客户端可以将 Sentinel 看作是一个只提供了订阅功能的Redis服务器:你不可以使用 PUBLISH命令向这个服务器发送信息,但你可以用SUBSCRIBE命令或者PSUBSCRIBE 命令, 通过订阅给定的频道来获取相应的事件提醒。

客户端可以通过订阅来获得的频道和信息的格式:第一个英文单词是频道/事件的名字

<instance-type> <name> <ip> <port> @ <master-name> <master-ip> <master-port>

三、redis集群

3.1 Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施

   notice :Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redis 节点之间移动数据, 并且在高负载的情况下, 这些命令将降低 Redis 集群的性能,并导致不可预测的行为。

3.2 redis集群好处,Redis 集群提供了以下两个好处:

将数据自动切分(split)到多个节点的能力。

当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力。

3.3 redis集群数据共享

   ①Redis 集群使用数据分片(sharding)而非一致性哈希(consistency hashing)来实现: 一个 Redis 集群包含 16384 个哈希槽(hash slot), 数据库中的每个键都属于这 16384 个哈希槽的其中一个, 集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和。

②将一个哈希槽从一个节点移动到另一个节点不会造成节点阻塞, 所以无论是添加新节点还是移除已存在节点, 又或者改变某个节点包含的哈希槽数量, 都不会造成集群下线。

3.4 集群的主从复制

为了使得集群在一部分节点下线或者无法与集群的大多数(majority)节点进行通讯的情况下,仍然可以正常运作,Redis集群对节点使用了主从复制功能:集群中的每个节点都有 1 个至 N 个复制品(replica),其中一个复制品为主节点(master),而其余的 N-1个复制品为从节点(slave)。

3.5 节点属性

   ①每个节点在集群中都有一个独一无二的 ID ,该ID是一个十六进制表示的160位随机数,在节点第一次启动时由 /dev/urandom 生成。

节点信息:  节点所使用的 IP 地址和 TCP 端口号。

节点的标志(flags)。

节点负责处理的哈希槽。

节点最近一次使用集群连接发送 PING 数据包(packet)的时间。

节点最近一次在回复中接收到 PONG 数据包的时间。

集群将该节点标记为下线的时间。

该节点的从节点数量。

如果该节点是从节点的话,那么它会记录主节点的节点 ID 。如果这是一个主节点的话,那么主节点 ID 这一栏的值为 0000000 。

eg  redis-cli cluster nodes

d1861060fe6a534d42d8a19aeb36600e18785e04 :0 myself - 0 1318428930 connected 0-1364

3886e65cc906bfd9b1f7e7bde468726a052d1dae 127.0.0.1:6380 master - 1318428930 1318428931 connected 1365-2729

d289c575dcbc4bdd2931585fd4339089e461a27d 127.0.0.1:6381 master - 1318428931 1318428931 connected 2730-4095

3.6 集群在线重配置

①redis集群支持在集群运行的过程中过程中添加或者移除节点

添加一个新节点到集群, 等于将其他已存在节点的槽移动到一个空白的新节点里面。

从集群中移除一个节点, 等于将被移除节点的所有槽移动到集群的其他节点上面去。

②CLUSTER命令可用的子命令:当槽被指派或者移除之后,节点会将这一信息通过Gossip协议传播到整个集群

CLUSTER ADDSLOTS slot1 [slot2] ... [slotN]   //向节点添加槽

CLUSTER DELSLOTS slot1 [slot2] ... [slotN]   //向节点删除槽

CLUSTER SETSLOT slot NODE node               //将指定的槽指派给节点node

CLUSTER SETSLOT slot MIGRATING node    //将给定节点 node 中的槽 slot 迁移出节点

CLUSTER SETSLOT slot IMPORTING node  // 将给定槽 slot 导入到节点 node

四、Redis过期键删除策略

被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key

主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key

当前已用内存超过maxmemory限定时,触发主动清理策略

        4.1 被动删除

只有key被操作时(如GET),REDIS才会被动检查该key是否过期,如果过期则删除之并且返回NIL。

1、这种删除策略对CPU是友好的,删除操作只有在不得不的情况下才会进行,不会其他的expire key上浪费无谓的CPU时间。 2、但是这种策略对内存不友好,一个key已经过期,但是在它被操作之前不会被删除,仍然占据内存空间。如果有大量的过期键存在但是又很少被访问到,那会造成大量的内存空间浪费。

4.2 主动删除

相当于一个定时任务,主动扫描过期的key。

4.3 主动清除策略

当前已用内存超过maxmemory的限定后,主动触发清除策略。当mem_used内存已经超过maxmemory的设定,对于所有的读写请求,都会触发函数以清理超出的内存。注意这个清理过程是阻塞的,直到清理出足够的内存空间。所以如果在达到maxmemory并且调用方还在不断写入的情况下,可能会反复触发主动清理策略,导致请求会有一定的延迟。

noeviction:当到达内存限制时返回错误。当客户端尝试执行命令时会导致更多内存占用(大多数写命令,除了 DEL 和一些例外)。

allkeys-lru:回收最近最少使用(LRU)的键,为新数据腾出空间。

volatile-lru:回收最近最少使用(LRU)的键,但是只回收有设置过期的键,为新数据腾出空间。

allkeys-random:回收随机的键,为新数据腾出空间。

volatile-random:回收随机的键,但是只回收有设置过期的键,为新数据腾出空间。

volatile-ttl:回收有设置过期的键,尝试先回收离 TTL 最短时间的键,为新数据腾出空间。

---------------------

作者:kevin_vv

来源:CSDN

原文:https://blog.csdn.net/u013758116/article/details/53433997

版权声明:本文为博主原创文章,转载请附上博文链接!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342