|  
 你必须非常努力,才能看起来毫不费力! 微信搜索公众号[ 漫漫Coding路 ],一起From Zero To Hero ! 前言上篇文章介绍了Redis 数据库的部分命令,本篇文章介绍剩余相关命令。 EXISTS 
 可用版本:>= 1.0.0 时间复杂度:O(N),N为数据库key的数量 命令格式 EXISTS key [key ...]
 命令描述 返回值 返回数据库中,key存在的数量。 如果给定了相同的key,同样会计数。比如somekey存在,返回1;给定somekey somekey,返回2。 示例 127.0.0.1:6379> set user:1:name jack
OK
127.0.0.1:6379> exists user:1:name
(integer) 1
127.0.0.1:6379> exists user:1:age
(integer) 0
 TYPE 
 可用版本:>= 1.0.0 时间复杂度:O(1) 命令格式 TYPE key
 命令描述 返回值 stringlistsetzsethashStream
 示例 127.0.0.1:6379> set user:1:name jack
OK
127.0.0.1:6379> type user:1:name
string
 RENAME 
 可用版本:>= 1.0.0 时间复杂度:O(1) 命令格式 RENAME key newkey
 命令描述 返回值 字符串:OK 或者 error 示例 127.0.0.1:6379> set user:1:name jack
OK
127.0.0.1:6379> rename user:1:name user:2:name
OK
127.0.0.1:6379> get user:2:name
"jack"
 RENAMENX 
 可用版本:>= 1.0.0 时间复杂度:O(1) 命令格式 RENAMENX key newkey
 命令描述 返回值 整数值: 1:重命名成功 0:newkey已存在,重命名失败 示例 127.0.0.1:6379> set user:1:name jack
OK
127.0.0.1:6379> set user:2:name peter
OK
127.0.0.1:6379> renamenx user:1:name user:2:name
(integer) 0
127.0.0.1:6379> renamenx user:1:name user:3:name
(integer) 1
127.0.0.1:6379> get user:3:name
"jack"
 MOVE 
 可用版本:>= 1.0.0 时间复杂度:O(1) 命令格式 MOVE key db
 命令描述 返回值 整数值: 1:移动成功 0:移动失败 示例 127.0.0.1:6379> select 0
OK
127.0.0.1:6379> set user:1:name jack
OK
127.0.0.1:6379> move user:1:name 1  
(integer) 1
127.0.0.1:6379> exists user:1:name  
(integer) 0
127.0.0.1:6379> select 1  
OK
127.0.0.1:6379[1]> exists user:1:name  
(integer) 1
 DEL 
 可用版本:>= 1.0.0 时间复杂度:O(N),N为要移除的key的数量。当key对应的结构是String时,单个key对应的复杂度是O(M),key对应的结构是是list、set、sorted set、hash时,单个key对应的复杂度为O(M)。 命令格式 DEL key [key ...]
 命令描述  将key对应的数据从数据库中移除 如果key不存在,不会执行操作
 返回值 整数值:被移除的key数量 示例 127.0.0.1:6379> set user:1:name jack
OK
127.0.0.1:6379> exists user:1:name
(integer) 1
127.0.0.1:6379> del user:1:name
(integer) 1
127.0.0.1:6379> exists user:1:name
(integer) 0
 RANDOMKEY 
 可用版本:>= 1.0.0 时间复杂度:O(1) 命令格式 RANDOMKEY
 命令描述 返回值 字符串:key 或者 nil(数据库为空) 示例 127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> mset name jack age 10 gender male
OK
127.0.0.1:6379> randomkey
"age"
127.0.0.1:6379> randomkey
"name"
 SORT 
 可用版本:>= 1.0.0 时间复杂度:O(N+M*log(M)),其中N为集合中的元素数量,M为返回的元素数量。如果不排序返回,时间复杂度为O(N) 命令格式 SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] 
[ASC|DESC] [ALPHA] [STORE destination]
 命令描述 返回或者保存给定集合中排序好的元素; 自Redis 7.0,SORT_RO命令是只读版本的SORT; 默认情况下,值被解释为双精度浮点数进行排序,最简单的形式为: SORT mylist
 假设mylist中存储的是数值类型的值,该命令会按照从小到大的顺序,返回mylist中所有的值。如果想要返回从大到小的顺序,使用DESC参数: SORT mylist DESC
 如果mylist中存储的是字符串,并且想按照字典序排序,可以使用ALPHA参数: SORT mylist ALPHA
 LIMIT参数 可以使用LIMIT参数,来限制返回的元素范围,接受 offset和count两个参数: offset指定要跳过的元素数量;count指定跳过offset个指定的元素之后,要返回多少个对象;
 下例会返回前十个元素 SORT mylist LIMIT 0 10
 可以通过多个参数组合,来实现想要的需求。比如下例:使用字典序,倒序排序,返回前五个元素 SORT mylist LIMIT 0 5 ALPHA DESC
 使用外部key排序 有时候我们想要使用外部的key作为权重来进行排序,例如:一个list中存储的是用户的id:1,2,3,同时还有user_1,user_2,user_3这三个key保存中用户的年龄,我们想根据用户的年龄对id进行排序,就可以使用外部key排序这个功能。 sort mylist by user_*的意思就是,使用 mylist 中的数据,拼成的user_* 这个格式的 key 对应的数据来排序。
 127.0.0.1:6379> lpush mylist 1 2 3
(integer) 3
127.0.0.1:6379> set user_1 10
OK
127.0.0.1:6379> set user_2 15
OK
127.0.0.1:6379> set user_3 8
OK
127.0.0.1:6379> sort mylist by user_*
1) "3"
2) "1"
3) "2"
 GET选项 使用 GET选项,可以根据排序的结果来取出相应的键值。 比如说,以下代码先排序 uid, 再取出键user_name_{uid}的值: 127.0.0.1:6379> lpush id_list 1 2 3
(integer) 3
127.0.0.1:6379> set user_name_1 jack
OK
127.0.0.1:6379> set user_name_2 peter
OK
127.0.0.1:6379> set user_name_3 rose
OK
127.0.0.1:6379> sort id_list GET user_name_*1
) "jack"  
) "peter" 
) "rose"  
 同时,我们可以组合使用 BY 和 GET选项,完成更复杂的排序查询:下例中,查询id_list中的所有id,然后使用 user_age_{id} 作为key 对id 进行排序,然后取出user_name_{id} 作为key对应的值。 127.0.0.1:6379> lpush id_list 1 2 3
(integer) 3
127.0.0.1:6379> set user_name_1 jack
OK
127.0.0.1:6379> set user_name_2 peter
OK
127.0.0.1:6379> set user_name_3 rose
OK
127.0.0.1:6379> set user_age_1 10
OK
127.0.0.1:6379> set user_age_2 15
OK
127.0.0.1:6379> set user_age_3 8
OK
127.0.0.1:6379> sort id_list BY user_age_* GET user_name_*1
) "rose"  
) "jack"	 
) "peter" 
 同时,我们也可以使用多个GET选项,获取多个key对应的值:我们又增加使用了 GET user_age_{id},获取了对应的值。 127.0.0.1:6379> sort id_list BY user_age_* GET user_name_* GET user_age_*1
) "rose"
2) "8"
3) "jack"
4) "10"
5) "peter"
6) "15"
 使用GET #,可以返回本身的值:比如我们使用使用GET #,返回了id_list 中的id值。 127.0.0.1:6379> sort id_list BY user_age_* GET user_name_* GET user_age_* GET 
1) "rose"
2) "8"
3) "3"
4) "jack"
5) "10"
6) "1"
7) "peter"
8) "15"
9) "2"
 如果有些情况下,我们不想排序,而是想获取id关联的相关数据,比如通过id查询出用户的姓名、年龄等,类似于SQL中的join查询,可以通过BY指定一个不存在的key来实现。 127.0.0.1:6379> sort id_list BY not_exist_key GET 
1) "3"
2) "rose"
3) "8"
4) "2"
5) "peter"
6) "15"
7) "1"
8) "jack"
9) "10"
 对于Hash结构,我们可以使用如下方式获取数据: 127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> lpush id_list 1 2 3
(integer) 3
127.0.0.1:6379> hset id_info_1 name jack age 10
(integer) 2
127.0.0.1:6379> hset id_info_2 name peter age 15
(integer) 2
127.0.0.1:6379> hset id_info_3 name rose age 8
(integer) 2
127.0.0.1:6379> sort id_list by id_info_*->age get id_info_*->age get id_info_*->name
1) "8"
2) "rose"
3) "10"
4) "jack"
5) "15"
6) "peter"
 STORE选项用于保存结果 默认情况下,查询结果只是返回给客户端,使用STORE参数,我们可以将结果保存到一个key中。 保存的数据默认不会过期,可以通过expire命令对key设置过期时间,这就相当于构建了一个缓存数据,让其他客户端也可以使用。但是为了保证其他客户端不会重建缓存,需要加锁,比如使用SETNX命令实现。 127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> lpush id_list 1 2 3
(integer) 3
127.0.0.1:6379> set user_name_1 jack
OK
127.0.0.1:6379> set user_name_2 peter
OK
127.0.0.1:6379> set user_name_3 rose
OK
127.0.0.1:6379> sort id_list get user_name_* store result
(integer) 3
127.0.0.1:6379> lrange result 0 -1
1) "jack"
2) "peter"
3) "rose"
 返回值 数组:没有指定STORE参数时,返回结果列表 整数:指定STORE参数时,返回保存的元素个数 更多个人博客: https://lifelmy.github.io/ 微信公众号:漫漫Coding路 |