sort
命令是Redis中最强大的命令之一,本文试图经过一些例子来总结Redis Sort的经常使用方法。redis
127.0.0.1:6379> RPUSH users 3 4 5 1 33 8 (integer) 6 127.0.0.1:6379> SORT users 1) "1" 2) "3" 3) "4" 4) "5" 5) "8" 6) "33"
在上面的例子中,咱们对一系列的数字进行了排序,获得了排序后的结果。数组
127.0.0.1:6379> RPUSH users 3 4 5 1 33 8 (integer) 6 127.0.0.1:6379> SORT users limit 1 4 asc alpha 1) "3" 2) "33" 3) "4" 4) "5"
在上面的例子中,咱们使用了三个参数,limit
, asc
和alpha
。limit
表示对结果进行分页,其中1
表示页数,4
表示一页中元素的个数。asc
表示对结果进行正序排序。alpha
表示对结果使用字母序排序,而不是数字序。缓存
# 首先添加一组用户ID 127.0.0.1:6379> RPUSH users 13 84 23 454 (integer) 4 # 而后添加一些user_age:id key用来表示用户的年龄 127.0.0.1:6379> set user_age:13 20 OK 127.0.0.1:6379> set user_age:84 23 OK 127.0.0.1:6379> set user_age:23 34 OK 127.0.0.1:6379> set user_age:454 11 # 使用sort命令基于用户年龄对用户进行排序 127.0.0.1:6379> sort users by user_age:* desc 1) "23" 2) "84" 3) "13" 4) "454"
在上面的例子中,咱们使用一些值user_age:*
,来对列表进行排序。
咱们经过sort
命令强大的by
参数来设置排序的规则。by
参数除了能够指定基于键值对数据进行排序外,也能够基于哈希对象进行排序,请看下面这个例子:bash
# 添加一组用户ID 127.0.0.1:6379> RPUSH users 13 84 23 454 (integer) 4 # 添加了一组哈希对象来表示用户 127.0.0.1:6379> hmset user:13 age 20 name user_13 OK 127.0.0.1:6379> hmset user:84 age 23 name user_84 OK 127.0.0.1:6379> hmset user:23 age 34 name user_23 OK 127.0.0.1:6379> hmset user:454 age 11 name user_454 OK # 基于哈希对象的来对上面的例子进行排序 127.0.0.1:6379> sort users by user:*->age 1) "454" 2) "13" 3) "84" 4) "23" # 基于哈希对象的来对上面的例子进行排序,并获取用户名称 127.0.0.1:6379> sort users by user:*->age get user:*->name 1) "user_454" 2) "user_13" 3) "user_84" 4) "user_23"
在这个例子中,users
是一个列表用来表示用户ID,user:*
为哈希对象用来表示用户。
在第一个sort
命令中,咱们基于用户哈希对象的age
字段来进行排序,获得的结果为排序事后的用户ID列表。
若是想要取的返回值不是用户ID的话,也能够经过get
参数来指定获取的字段。
在第二个sort
命令中,咱们仍是经过用户哈希对象的age
字段来排序,获取的结果为用户哈希对象的name
字段组成的数组。code
# 添加一组用户ID 127.0.0.1:6379> RPUSH users 13 84 23 454 # 添加一组key用来表示用户年龄 127.0.0.1:6379> set user_age:13 20 OK 127.0.0.1:6379> set user_age:84 23 OK 127.0.0.1:6379> set user_age:23 34 OK 127.0.0.1:6379> set user_age:454 11 OK # 根据用户年龄对用户ID进行排序,并将排序结果存储在users_sort_result所表明的列表中 127.0.0.1:6379> SORT users by user_age:* desc store users_sort_result (integer) 4 # 为排序结果设置过时时间 127.0.0.1:6379> expire users_sort_result 30 (integer) 1
在上面的例子中,咱们根据用户年龄对用户ID进行了排序,同时为排序结果设置了一个过时时间,这样咱们就能够将排序结果缓存起来了。
而后每回获取排序结果的时候,咱们能够先查缓存,若是缓存不存在的话,则进行排序。
须要注意的是,为了不多个客户端同时操做排序结果,咱们须要使用SETNX
命令来为缓存结果设置一个锁,详见SETNX key value对象