redis -- key

来源:互联网 发布:电脑制作音频软件 编辑:程序博客网 时间:2024/05/18 00:54

1.删

del key [key ... ]

返回值:影响值


2.改

rename key newkey

keynewkey相同或者key不存在时,返回一个错误

newkey已经存在时,RENAME命令将覆盖旧值。

返回值:
改名成功时提示OK,失败时候返回一个错误。

renamenx key newkey

当且仅当newkey不存在时,将key改为newkey

keynewkey相同或者key不存在时,返回一个错误


move key db:

把key移动到指定db

如果两个数据库key有重名的,移动后,覆盖旧值

返回值:1,0

select 0 #选择0数据库

set name xiaomei

move name 1

exists name 

返回0 ,说明name已经移动到数据库1,


expire key seconds :

设定key的生存时间,key不存在则报错


persist key:

移除给key设定的生存时间。

返回值:1,0



3.查

keys pattern :查看符合模式的key

keys  *    ,key h?llo    , key h*lo, key h[ae]llo


randomkey:数据库随机返回

如果没有返回nil


ttl key:查看key的剩余时间

set name xiaomei

expire name 30

ttl name


exists key:查看是否存在

返回值:

1或者0


type key

返回值:
none(key不存在)
string(字符串)
list(列表)
set(集合)
zset(有序集)
hash(哈希表)



知识点1:

SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC] [ALPHA] [STORE destination]


sort key :根据value进行排序

sort key alpha :根据字母排序进行排序

sort key offset count [asc||desc] :从第offset开始,升降序取count个

使用外部key进行排序

有时候你会希望使用外部的key作为权重来比较元素,代替默认的对比方法。

假设现在有用户(user)数据如下:

idnamelevel1admin99992huangz1059230jack3222hacker9999
id数据保存在key名为user_id的列表中。
name数据保存在key名为user_name_{id}的列表中
level数据保存在user_level_{id}key中。
# 先将要使用的数据加入到数据库中# adminredis> LPUSH user_id 1(integer) 1redis> SET user_name_1 adminOKredis> SET user_level_1 9999OK# huangzredis> LPUSH user_id 2(integer) 2redis> SET user_name_2 huangzOKredis> SET user_level_2 10OK# jackredis> LPUSH user_id 59230(integer) 3redis> SET user_name_59230 jackOKredis> SET user_level_59230 3OK# hackerredis> LPUSH user_id 222(integer) 4redis> SET user_name_222 hackerOKredis> SET user_level_222 9999OK
redis> SORT user_id BY user_level_* DESC1) "222"    # hacker2) "1"      # admin3) "2"      # huangz4) "59230"  # jack
redis> SORT user_id BY user_level_* DESC GET user_name_*1) "hacker"2) "admin"3) "huangz"4) "jack"
可以多次地、有序地使用GET操作来获取更多外部key
# 先添加一些测试数据redis> SET user_password_222 "hey,im in"OKredis> SET user_password_1 "a_long_long_password"OKredis> SET user_password_2 "nobodyknows"OKredis> SET user_password_59230 "jack201022"OK# 获取name和passwordredis> SORT user_id BY user_level_* DESC GET user_name_* GET user_password_*1) "hacker"       # 用户名2) "hey,im in"    # 密码3) "jack"4) "jack201022"5) "huangz"6) "nobodyknows"7) "admin"8) "a_long_long_password"

get # 可列出元素在列表中的id 就是我们lpush user_id 3 这个3

如果只想获取对象而不排序,可以by 一个不存在的字段,这样这个字段就不起排序作用了,只是把所有的对象列出来。


将排序的结果保存起来,可以给STORE选项指定一个key作为参数,排序结果将以列表的形式被保存到这个key上。(若指定key已存在,则覆盖。)

redis> SORT user_id BY user_level_* GET # GET user_name_* GET user_password_* STORE user_info_sorted_by_level    # 排序(integer) 12  # 显示有12条结果被保存了redis> LRANGE user_info_sorted_by_level 0 11  # 查看排序结果1) "59230"2) "jack"3) "jack201022"4) "2"5) "huangz"6) "nobodyknows"7) "222"8) "hacker"9) "hey,im in"10) "1"11) "admin"12) "a_long_long_password"
将结果存成一个list


知识点2:

一个有趣的用法是将SORT结果保存,用EXPIRE为结果集设置生存时间,这样结果集就成了SORT操作的一个缓存。

这样就不必频繁地调用SORT操作了,只有当结果集过期时,才需要再调用一次SORT操作。

有时候为了正确实现这一用法,你可能需要加锁以避免多个客户端同时进行缓存重建(也就是多个客户端,同一时间进行SORT操作,并保存为结果集),具体参见SETNX命令。




0 0
原创粉丝点击