1.删
del key [key ... ]
返回值:影响值
2.改
rename key newkey
当key和newkey相同或者key不存在时,返回一个错误
当newkey已经存在时,RENAME命令将覆盖旧值。
返回值:
改名成功时提示
OK,失败时候返回一个错误。
renamenx key newkey
当且仅当newkey不存在时,将key改为newkey。
当key和newkey相同或者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命令。