Redis keys

Redis key值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”foo”的简单字符串到一个JPEG文件的内容都可以。空字符串也是有效key值。

关于key的几条规则:

  • 不要太长(不仅消耗内存,而且数据查找成本大)
  • 不要太短(语意不明 比如”u:1000:pwd”来代替”user:1000:password” 可读性变得不好了)
  • 固定模式比较好 如:”object-type:id:field”(”object-type:id:field”)多单词的字段名中加上一个点,就像这样:”comment:1234:reply.to”。

常用操作

 案例:

KEYS pattern

查找所有符合给定模式pattern(正则表达式)的 key 。

时间复杂度为O(N),N为数据库里面key的数量。

例如,Redis在一个有1百万个key的数据库里面执行一次查询需要的时间是40毫秒 。

警告KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的 KEYS, 你最好还是用 Redis 的集合结构 SETS 来代替

支持的正则表达模式:

  • h?llo 匹配 hellohallo 和 hxllo
  • h*llo 匹配 hllo 和 heeeello
  • h[ae]llo 匹配 hello 和 hallo, 但是不匹配 hillo
  • h[^e]llo 匹配 hallohbllo, … 但是不匹配 hello
  • h[a-b]llo 匹配 hallo 和 hbllo

如果你想取消字符的特殊匹配(正则表达式,可以在它的前面加\

例子:

redis> MSET one 1 two 2 three 3 four 4 
OK 
redis> KEYS *o* 
1) "four" 
2) "one" 
3) "two" 
redis> KEYS t?? 
1) "two" 
redis> KEYS * 
1) "four" 
2) "three" 
3) "one" 
4) "two" 
redis>

EXISTS key [key ...]

时间复杂度:O(1)

返回key是否存在。

返回值:

  • 1 如果key存在
  • 0 如果key不存在

例子

redis> SET key1 "Hello" 
OK 
redis> EXISTS key1 
(integer) 1 
redis> EXISTS key2 
(integer) 0 
redis> 

MOVE key db

时间复杂度:O(1)

将当前数据库的 key 移动到给定的数据库 db 当中。

将当前数据库的 key 移动到给定的数据库 db 当中。

如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。

因此,也可以利用这一特性,将 MOVE 当作锁(locking)原语(primitive)。

返回值

  • 移动成功返回 1
  • 失败则返回 0

EXPIRE key seconds

时间复杂度:O(1)

设置key的过期时间,超过时间后,将会自动删除该key。在Redis的术语中一个key的相关超时是不确定的。

刷新过期时间

对已经有过期时间的key执行EXPIRE操作,将会更新它的过期时间。有很多应用有这种业务场景,例如记录会话的session。

返回值

  • 1 如果成功设置过期时间。
  • 0 如果key不存在或者不能设置过期时间。

例子

redis> SET mykey "Hello" 
OK 
redis> EXPIRE mykey 10 
(integer) 1 
redis> TTL mykey 
(integer) 10 
redis> SET mykey "Hello World" 
OK 
redis> TTL mykey 
(integer) -1 
redis> 

TTL key

时间复杂度:O(1)

返回key剩余的过期时间。 这种反射能力允许Redis客户端检查指定key在数据集里面剩余的有效期。

从Redis2.8开始,错误返回值的结果有如下改变:

  • 如果key不存在或者已过期,返回 -2
  • 如果key存在并且没有设置过期时间(永久有效),返回 -1

返回值

key有效的秒数(TTL in seconds),或者一个负值的错误 (参考上文)。

例子

redis> SET mykey "Hello" 
OK 
redis> EXPIRE mykey 10 # 设置mykey 10秒后过期 
(integer) 1 
redis> TTL mykey # 查看mykey剩余的过期时间 
(integer) 10 
redis> 

TYPE key

时间复杂度:O(1)

返回key所存储的value的数据结构类型,它可以返回stringlistsetzset 和 hash等不同的类型。

返回值

返回当前key的数据类型,如果key不存在时返回none

例子

redis> SET key1 "value" 
OK 
redis> LPUSH key2 "value" 
(integer) 1 
redis> SADD key3 "value" 
(integer) 1 
redis> TYPE key1 
string 
redis> TYPE key2 
list 
redis> TYPE key3 
set 
redis> 

发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Redis数据类型之Redis的五大数据类型知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。