redis -- key

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)数据如下:

id name level
1 admin 9999
2 huangz 10
59230 jack 3
222 hacker 9999
id数据保存在 key名为 user_id的列表中。
name数据保存在 key名为 user_name_{id}的列表中
level数据保存在 user_level_{id}key中。
# 先将要使用的数据加入到数据库中

# admin

redis> LPUSH user_id 1
(integer) 1
redis> SET user_name_1 admin
OK
redis> SET user_level_1 9999
OK

# huangz

redis> LPUSH user_id 2
(integer) 2
redis> SET user_name_2 huangz
OK
redis> SET user_level_2 10
OK

# jack

redis> LPUSH user_id 59230
(integer) 3
redis> SET user_name_59230 jack
OK
redis> SET user_level_59230 3
OK

# hacker

redis> LPUSH user_id 222
(integer) 4
redis> SET user_name_222 hacker
OK
redis> SET user_level_222 9999
OK
redis> SORT user_id BY user_level_* DESC
1) "222"    # hacker
2) "1"      # admin
3) "2"      # huangz
4) "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"
OK
redis> SET user_password_1 "a_long_long_password"
OK
redis> SET user_password_2 "nobodyknows"
OK
redis> SET user_password_59230 "jack201022"
OK

# 获取name和password

redis> 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值