redis有效时间单位是_Redis学习笔记之全局命令

纸上得来终觉浅,绝知此事要躬行!

之前文章介绍过Redis的5种基本数据结构,当然随着Redis的发展,也扩展了其他的数据结构,比如位图、HyperLogLog、GEO等。

04e37f60d3edd3e2d2470d0884c3faa3.png

对于这些基本数据结构,它们基本都是作为键值对中的值存在的,它们有各自特有的命令,但是对于数据库及键也有一些通用的全局命令,本篇就来介绍下

Redis基本数据结构之字符串

Redis基本数据结构之哈希

Redis基本数据结构之列表

Redis基本数据结构之集合

Redis基本数据结构之有序集合

单个键的管理

(1)键是否存在

ae8ffbdbf2c1432687f3b9a2862a5704.png

使用exists判断键是否存在,可以指定多个键,命令返回的是存在的键的个数,返回0表示指定的键都不存在。

(2)删除键

d85b40a311772c658af29f992c1aea5f.png

使用del删除键,可以指定删除多个键,命令返回的是成功删除的键的个数。

(3)键值的类型

c767f1c0d59449a9234b519315e5b290.png

使用type获取当前键值的类型。

(4)重命名键

c13ef09195eb341236df48e3b522f512.png

使用rename给已存在键重命名。如果给不存在的键重命名,会返回错误。

使用rename时需要注意,如果命名的新键已经存在,则其原值将被覆盖,比如示例中rename key2 key3时,key3的原值java被覆盖,为防止这种情况发生,可以使用renamenx命令,只有新键不存在的时候,重命名才会成功。

由于重命名的期间,会执行del命令删除旧的键,如果键对应的值比较大,会存在阻塞Redis的可能,这点需要注意。而且,如果重命名的名称和原名称相同,在3.2版本之后会返回OK,而之前的版本会返回错误,需要注意一下。

(5)设置过期时间

设置过期时间的意思就是,给键设定一个有效期,超过这个时间之后,键会自动删除。Redis提供了比较多的关于设置过期时间的命令。

cc7bc87cd9a4130a7ce91b06e970cd66.png

首先介绍ttl和pttl命令,ttl和pttl命令可以查看一个键的剩余过期时间,区别是一个单位是秒一个单位是毫秒,如示例中(ttl示例),返回值为-1时,表示没有设置过期时间,返回值为正数时,表示剩余的时间,单位是秒,返回为-2时,表示键已过期被删除。

接下来介绍设置过期时间的命令,expire和expireat,expire命令设置键在指定秒数后过期,expireat命令设置键在秒级时间的时间戳后过期,示例中的时间戳代表的是2019-12-28 00:00:00。

除了秒级的过期时间外,Redis在2.6版本之后,提供了毫秒级的过期设置,分别是pexpire命令和pexpireat命令,不管是秒级还是毫秒级,不管是时间还是时间戳,Redis内部使用的都是pexpireat。

9efb3386cbf6a8012ac8215a36b1ff5d.png

有设置过期时间的命令,也有清除过期时间的命令,就是persist命令,它可以将键的过期时间清除。

使用过期命令需要注意以下几点:

  1. 如果设置的键不存在,命令返回0;
  2. 不支持二级结构的过期设置,也就是说,比如哈希、集合这种结构,不支持对其内个别元素设置过期时间;
  3. 如果过期值为负,则相当于del,键会被立刻删除;
  4. 执行set命令时,键的过期时间会被清除,这点尤其需要注意,往往会被忽略。只有set命令会有这个问题,也就是说,如果键值是字符串的时候,会出现这个问题,而且set命令允许设置过期时间;
ecd894dc0f6f10809a3771c6f0071b3a.png

(6)随机返回一个键

使用randomkey,可以随机返回一个键(这个个人感觉没什么用~至今没用过,不知道有小伙伴用过吗?)。

遍历键

Redis提供两个遍历所有键的命令,keys和scan。

(1)keys遍历

8416de63ee1afe752a1ef9515a393b76.png

keys命令支持pattern匹配

e670b3730ca98dfeba84c6a69947f115.png

*表示匹配所有,?匹配一个字符,[]表示匹配指定字符,^表示非,另外,可以用来转义,表示一些特殊字符。

需要注意,keys是真正的遍历所有的键,当Redis中含有大量的键的时候,keys极大可能会阻塞Redis,所以,生产环境下不要轻易使用keys

(2)渐进式遍历scan

scan是Redis2.8版本之后新增的命令,它能有效解决keys命令的不足。它采用渐进式的方式解决keys命令带来的阻塞问题,每次scan的时间复杂度为O(1)。

fbfae5c02bccd06455c69e3db9a4484f.png

示例中,Redis包含26个字母的键,使用scan命令进行遍历,scan命令的格式

scan cursor [MATCH pattern] [COUNT count]

其中cursor代表一个游标,也可以叫做指针,表示开始遍历的位置,一般就是0,表示从头开始遍历,或者指定一个正数,表示偏移量,match和count是可选参数,match默认是*,count默认是10。scan命令的返回结果分为两部分,第一部分表示下一次遍历的游标cursor,第二部分表示当前遍历的部分结果。当返回结果第一部分为0时,表示遍历完成。

除了keys会有阻塞Redis的风险,Redis提供的面向哈希、集合的hgetall、smembers、zrange也可能产生阻塞问题,所以,对应的也有相应的渐进式遍历方法hscan、sscan、zscan,用法和scan类似。

scan虽然解决了阻塞的问题,但是也有其他的问题,比如,在遍历期间新增一个键,那么,scan的结果将不确定,有可能遍历不出来新添加的键,也有可能遍历重复。所以在使用的时候,需要注意。

数据库管理

数据库管理主要就是切换数据库select以及清数据库flushdb/flushall。

Redis默认有16个数据库,编号0到15,切换数据库就是select对应的编号即可。

flushdb清除当前数据库,flushall清除全部数据库。当数据库键值过多时,这两个命令都可能阻塞Redis,需要谨慎使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值