Redis SORT排序命令使用方法详解

   对于Redis SORT排序命令 我相信大家都不怎么了解了,因此小编整理了一些Redis SORT排序命令使用方法与例子,希望例子可以对各位玩家带来帮助哦.

  Redis SORT是由Redis提供的一个排序命令。集合中的标签是无序的,可以使用SORT排序。如:

  redis>SADD jihe 5

  (integer) 1

  redis>SADD jihe 1

  (integer) 1

  redis>SADD jihe 2

  (integer) 1

  redis>SADD jihe 8

  (integer) 1

  redis>SORT jihe

  1) "1"

  2) "2"

  3) "5"

  4) "8"

  如果使用Redis SORT排序的不是数字,是字母,将他们按照字典的顺序排名,则需要使用

  SORT jihe ALPHA

  如果不加ALPHA参数,则会报错,提示:(error) ERR One or more scores can't be converted into double。我们还可以使用关系型数据库的DESC进行倒序排序和LIMIT offset count来限定获取的条数

  SORT jihe DESC LIMIT 0 2

  还可以对Redis SORT命令添加BY参数。一条语句只能有一个BY参数。这时,SORT不会根据自身的值排序,比如(1,5,2,8和a,A,g,B),而是根据指定的另一个键中的字段来排序。如:

  SORT tag:redis:article BY article:*->time DESC

  解释:根据tag:redis:article中的值(tag是redis的文章ID),来组合成一个新的key就是article:(ag:redis:article中的一个值):time。获取到tag是redis的文章ID列表,然后根据他们的发布时间来排序。

  Redis SORT命令还有个GET参数,GET参数类似在关系型数据库中的关联查询。比如查询tag是redis的文章ID列表,将列表根据发布时间倒序排序,然后获取每个文章的标题。GET可以有多个:

  SORT tag:redis:article BY article:*->time DESC GET article:*->title GET article:*->time GET #

  GET #的意思是,将文章ID返回回来,你可以写GET article:*->id,也可以写GET #。

  Redis SORT命令还有个参数是STORE,是将排序后的内容存储到一个新的key中。新key的类型是列表类型,如果存在则会覆盖。这个时候可以用EXPIRE来设置缓存:

  SORT tag:redis:article BY article:*->time DESC GET article:*->title GET article:*->time GET # STORE resultKey

  Redis的SORT命令是Redis最复杂最强大的命令之一,时间复杂度是O(n+mLOGm)。n是待排序的列表长度,m是返回的元素个数。减少n和m会提高SORT的性能。

  补充:

  1,适合全体类型的命令

  EXISTS key 判断一个键是否存在;存在返回 1;否则返回0;

  DEL key 删除某个key,或是一系列key;DEL key1 key2 key3 key4

  TYPE key 返回某个key元素的数据类型 ( none:不存在,string:字符,list,set,zset,hash)

  KEYS pattern 返回匹配的key列表 (KEYS foo*:查找foo开头的keys)

  RANDOMKEY 随机获得一个已经存在的key,如果当前数据库为空,则返回空字符串

  RENAME oldname newname更改key的名字,新键如果存在将被覆盖

  RENAMENX oldname newname 更改key的名字,如果名字存在则更改失败

  DBSIZE返回当前数据库的key的总数

  EXPIRE设置某个key的过期时间(秒),(EXPIRE bruce 1000:设置bruce这个key1000秒后系统自动删除)注意:如果在还没有过期的时候,对值进行了改变,那么那个值会被清除。

  TTL查找某个key还有多长时间过期,返回时间秒

  SELECT index 选择数据库

  MOVE key dbindex 将指定键从当前数据库移到目标数据库 dbindex。成功返回 1;否则返回0(源数据库不存在key或目标数据库已存在同名key);

  FLUSHDB 清空当前数据库中的所有键

  FLUSHALL 清空所有数据库中的所有键

  2,处理字符串的命令

  SET key value 给一个键设置字符串值。SET keyname datalength data (SET bruce 10 paitoubing:保存key为burce,字符串长度为10的一个字符串paitoubing到数据库),data最大不可超过1G。

  GET key获取某个key 的value值。如key不存在,则返回字符串”nil”;如key的值不为字符串类型,则返回一个错误。

  GETSET key value可以理解成获得的key的值然后SET这个值,更加方便的操作 (SET bruce 10 paitoubing,这个时候需要修改bruce变成1234567890并获取这个以前的数据paitoubing,GETSET bruce 10 1234567890)

  MGET key1 key2 … keyN 一次性返回多个键的值

  SETNX key value SETNX与SET的区别是SET可以创建与更新key的value,而SETNX是如果key不存在,则创建key与value数据

  MSET key1 value1 key2 value2 … keyN valueN 在一次原子操作下一次性设置多个键和值

  MSETNX key1 value1 key2 value2 … keyN valueN 在一次原子操作下一次性设置多个键和值(目标键不存在情况下,如果有一个以上的key已存在,则失败)

  INCR key 自增键值

  INCRBY key integer 令键值自增指定数值

  DECR key 自减键值

  DECRBY key integer 令键值自减指定数值

  3,处理 lists 的命令

  RPUSH key value 从 List 尾部添加一个元素(如序列不存在,则先创建,如已存在同名Key而非序列,则返回错误)

  LPUSH key value 从 List 头部添加一个元素

  LLEN key 返回一个 List 的长度

  LRANGE key start end从自定的范围内返回序列的元素 (LRANGE testlist 0 2;返回序列testlist前0 1 2元素)

  LTRIM key start end修剪某个范围之外的数据 (LTRIM testlist 0 2;保留0 1 2元素,其余的删除)

  LINDEX key index返回某个位置的序列值(LINDEX testlist 0;返回序列testlist位置为0的元素)

  LSET key index value更新某个位置元素的值

  LREM key count value 从 List 的头部(count正数)或尾部(count负数)删除一定数量(count)匹配value的元素,返回删除的元素数量。

  LPOP key 弹出 List 的第一个元素

  RPOP key 弹出 List 的最后一个元素

  RPOPLPUSH srckey dstkey 弹出 _srckey_ 中最后一个元素并将其压入 _dstkey_头部,key不存在或序列为空则返回”nil”

  4,处理集合(sets)的命令(有索引无序序列)

  SADD key member增加元素到SETS序列,如果元素(membe)不存在则添加成功 1,否则失败 0;(SADD testlist 3 n one)

  SREM key member 删除SETS序列的某个元素,如果元素不存在则失败0,否则成功 1(SREM testlist 3 N one)

  SPOP key 从集合中随机弹出一个成员

  SMOVE srckey dstkey member 把一个SETS序列的某个元素移动到另外一个SETS序列 (SMOVE testlist test 3n two;从序列testlist移动元素two到 test中,testlist中将不存在two元素)

  SCARD key 统计某个SETS的序列的元素数量

  SISMEMBER key member 获知指定成员是否存在于集合中

  SINTER key1 key2 … keyN 返回 key1, key2, …, keyN 中的交集

  SINTERSTORE dstkey key1 key2 … keyN 将 key1, key2, …, keyN 中的交集存入 dstkey

  SUNION key1 key2 … keyN 返回 key1, key2, …, keyN 的并集

  SUNIONSTORE dstkey key1 key2 … keyN 将 key1, key2, …, keyN 的并集存入 dstkey

  SDIFF key1 key2 … keyN 依据 key2, …, keyN 求 key1 的差集。官方例子:

  key1 = x,a,b,c

  key2 = c

  key3 = a,d

  SDIFF key1,key2,key3 => x,b

  SDIFFSTORE dstkey key1 key2 … keyN 依据 key2, …, keyN 求 key1 的差集并存入 dstkey

  SMEMBERS key 返回某个序列的所有元素

  SRANDMEMBER key 随机返回某个序列的元素

  5,处理有序集合(sorted sets)的命令 (zsets)

  ZADD key score member 添加指定成员到有序集合中,如果目标存在则更新score(分值,排序用)

  ZREM key member 从有序集合删除指定成员

  ZINCRBY key increment member 如果成员存在则将其增加_increment_,否则将设置一个score为_increment_的成员

  ZRANGE key start end 返回升序排序后的指定范围的成员

  ZREVRANGE key start end 返回降序排序后的指定范围的成员

  ZRANGEBYSCORE key min max 返回所有符合score >= min和score <= max的成员 ZCARD key 返回有序集合的元素数量 ZSCORE key element 返回指定成员的SCORE值 ZREMRANGEBYSCORE key min max 删除符合 score >= min 和 score <= max 条件的所有成员

  6,hash类型

  Command Parameters Description

  HSET key field value Set the hash field to the specified value. Creates the hash if needed.

  HGET key field Retrieve the value of the specified hash field.

  HMGET key field1 … fieldN Get the hash values associated to the specified fields.

  HMSET key field1 value1 … fieldN valueN Set the hash fields to their respective values.

  HINCRBY key field integer Increment the integer value of the hash at key on field with integer.

  HEXISTS key field Test for existence of a specified field in a hash

  HDEL key field Remove the specified field from a hash

  HLEN key Return the number of items in a hash.

  HKEYS key Return all the fields in a hash.

  HVALS key Return all the values in a hash.

  HGETALL key Return all the fields and associated values in a hash.

  7,排序(List, Set, Sorted Set)

  SORT key BY pattern LIMIT start end GET pattern ASC|DESC ALPHA 按照指定模式排序集合或List

  SORT mylist DESC 降序

  SORT mylist LIMIT 0 10 从序号0开始,取10条

  SORT mylist LIMIT 0 10 ALPHA DESC 按首字符排序

  SORT mylist BY weight_* STORE resultkey 将返回的结果存放于resultkey序列(List)

  8,持久控制

  SAVE 同步保存数据到磁盘

  BGSAVE 异步保存数据到磁盘

  LASTSAVE 返回上次成功保存到磁盘的Unix时间戳

  SHUTDOWN 同步保存到服务器并关闭 Redis 服务器(SAVE+QUIT)

  BGREWRITEAOF 当日志文件过长时重写日志文件

  9,远程控制命令

  INFO 提供服务器的信息和统计信息

  MONITOR 实时输出所有收到的请求

  SLAVEOF 修改复制选项

时间: 2024-10-26 01:04:49

Redis SORT排序命令使用方法详解的相关文章

Redis sort 排序命令详解_Redis

本文介绍redis排序命令 redis支持对list,set,sorted set元素的排序 sort 排序命令格式: sort key [BY pattern] [LIMIT start count] [GET pattern] [ASC|DESC] [ALPHA] [STORE dstkey]  1) sort key (list) 这是最简单的情况,没有任何选项对集合自身元素排序并返回排序结果,默认为value升序. 示例: 复制代码 代码如下: 127.0.0.1:6379> lpush

linux redis安装和持久化配置方法详解

Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库 Redis使用的是NoSQL非关系型数据库,最大特点是没有固定模式,即表的格式不固定, 一般都舍弃了事务处理功能而注重海量存储下的读写性能. redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set –有序集合)和hash(哈希类型).这些数据

linux系统下sudo命令使用方法详解

介绍 sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等.这样不仅减少了root用户的登录和管理的时间,同样也提高了安全性.sudo不是对shell的一个代替,它是面向每个命令的. sudo命令 sudo -K -L -V -h -k -l -vsudo [-HPSb] [-a auth_type] [-c class-] [-p prompt] [-u username#uid] {-e file [...]

Oracle中SPOOL命令使用方法详解

举例:test.sh  代码如下 复制代码 #! /bin/sh sqlplus -s scott/tiger<<EOF  set head off  set linesize 20000  set echo off  set feedback off  set pagesize 0  set termout off  set trimout on  set trimspool on   spool /home/test.txt    select empno || '|' || ename

Linux chkconfig 命令使用方法详解

使用语法: chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset] 每个被chkconfig 管理的服务需要在对应的/etc/rc.d/init.d 下的脚本加上两行或者更多行的注释. 第一行告诉 chkconfig 缺省启动的运行级以及启动和停止的优先级.如果某服务缺省不在任何运行级启动,那么使用 - 代替运行级 chkconfig在没有参数运行时,显示用法.如果加上服务名

linux tail命令使用方法详解

一.tail命令语法 tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ] 参数说明: ■-f 该参数用于监视File文件增长. ■-c Number 从 Number 字节位置读取指定文件 ■-n Number 从 Number 行位置读取指定文件. ■-m Number 从 Number 多字节字符位置读取指定文件,比如你的文件如果包含中文字,如果指定-c参数,可能导致截断,但使用

nosql中redis的备份和还原方法详解

edis的备份和还原,借助了第三方的工具,redis-dump 1,安装redis-dump  代码如下 复制代码 [root@localhost tank]# yum install ruby rubygems ruby-devel   //安装rubygems 以及相关包    [root@localhost tank]# gem sources -a http://ruby.taobao.org/   //源,加入淘宝,外面的源不能访问  http://ruby.taobao.org/ a

java中set接口使用方法详解_java

java中的set接口有如下的特点: 不允许出现重复元素: 集合中的元素位置无顺序: 有且只有一个值为null的元素. 因为java中的set接口模仿了数学上的set抽象,所以,对应的数学上set的特性为: 互异性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次.无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的.集合上可以定义序关系,定义了序关系后,元素之间就可以按照序关系排序.但就集合本身的特性而言,元素之间没有必然的序.空集的性质:空集是一切集合的子集    

Android 中ViewPager重排序与更新实例详解

Android 中ViewPager重排序与更新实例详解 最近的项目中有栏目订阅功能,在更改栏目顺序以后需要更新ViewPager.类似于网易新闻的频道管理. 在重新排序之后调用了PagerAdapter的notifyDataSetChanged方法,发现ViewPager并没有更新,于是我开始跟踪源码,在调用PagerAdapter的notifyDataSetChanged方法后,会触发Viewpager的dataSetChanged方法. void dataSetChanged() { //