Redis常用命令-list-set-zset

Redis常用命令

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)等

https://gitee.com/nmwork/RedisUtil

1.   Redis数据类型

1.1.  List类型

1.1.1.   简介

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)

è类似JAVA中的LinkedList

1.1.2.   命令

赋值语法:

LPUSH key value1 [value2]  //将一个或多个值插入到列表头部(从左侧添加)

RPUSH key value1 [value2]  //在列表中添加一个或多个值(从右侧添加)

LPUSHX key value   //将一个值插入到已存在的列表头部。如果列表不在,操作无效

RPUSHX key value   //一个值插入已存在的列表尾部(最右边)。如果列表不在,操作无效。

取值语法:

LLEN key      //获取列表长度

LINDEX key index   //通过索引获取列表中的元素

LRANGE key start stop  //获取列表指定范围内的元素

描述: 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

start:  页大小*(页数-1) 

stop : (页大小*页数)-1

 

删除语法:

LPOP key  移出并获取列表的第一个元素(从左侧删除)

RPOP key  移除列表的最后一个元素,返回值为移除的元素(从右侧删除)

BLPOP key1 [key2 ] timeout

移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

实例

redis 127.0.0.1:6379> BLPOP list1 100

在以上实例中,操作会被阻塞,如果指定的列表 key list1 存在数据则会返回第一个元素,否则在等待100秒后会返回 nil 。

BRPOP key1 [key2 ] timeout

移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

LTRIM key start stop   对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

修改语法:

 

LSET key index value  通过索引设置列表元素的值

LINSERT key BEFORE|AFTER world value 在列表的元素前或者后插入元素

描述:将值 value 插入到列表 key 当中,位于值 world 之前或之后。

高级语法:

 

RPOPLPUSH source destination

移除列表的最后一个元素,并将该元素添加到另一个列表并返回   
示例描述:

RPOPLPUSH a1  a2   //a1的最后元素移到a2的左侧

RPOPLPUSH a1  a1  //循环列表,将最后元素移到最左侧

BRPOPLPUSH source destination timeout

从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

1.1.3.   应用场景

项目常应用于:1、对数据量大的集合数据删减
2
、任务队列

1、  对数据量大的集合数据删减

列表数据显示、关注列表、粉丝列表、留言评价等…分页、热点新闻(Top5)等

利用LRANGE还可以很方便的实现分页的功能,在博客系统中,每片博文的评论也可以存入一个单独的list中。

 

2、  任务队列

(list通常用来实现一个消息队列,而且可以确保先后顺序,不必像MySQL那样还需要通过ORDER BY来进行排序)

 

任务队列介绍(生产者和消费者模式):

在处理Web客户端发送的命令请求时,某些操作的执行时间可能会比我们预期的更长一些,通过将待执行任务的相关信息放入队列里面,并在之后对队列进行处理,用户可以推迟执行那些需要一段时间才能能完成的操作,这种将工作交给任务处理器来执行的做法被称为任务队列(task queue)。

RPOPLPUSH
source destination

移除列表的最后一个元素,并将该元素添加到另一个列表并返回   
示例描述:

常用案例:

1:订单系统的下单流程、

2:用户系统登录注册短信等

用户登录成功后,

三个资源:

列表页面 
(登录后就允许访问)

实名认证页面(登录后就允许访问)

转帐页面 
(登录后、还要实名认证后)

代码演示:

1.2.  Set类型

1.2.1.   简介

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

类似于JAVA中的 Hashtable集合

redis的集合对象set的底层存储结构特别神奇,底层使用了intset和hashtable两种数据结构存储的,intset我们可以理解为数组,hashtable就是普通的哈希表(key为set的值,value为null)。

intset内部其实是一个数组(int8_t
coentents[]数组),而且存储数据的时候是有序的,因为在查找数据的时候是通过二分查找来实现的。

1.2.2.   命令

赋值语法:

SADDkey member1 [member2] 向集合添加一个或多个成员

取值语法:

SCARD key 获取集合的成员数

SMEMBERSkey  返回集合中的所有成员

SISMEMBER key member 
判断 member 元素是否是集合 key 的成员(开发中:验证是否存在判断)

SRANDMEMBER key
[count]
 返回集合中一个或多个随机数

删除语法:  

SREM key member1 [member2] 移除集合中一个或多个成员

SPOP key [count]  移除并返回集合中的一个随机元素

SMOVE source destination member

将 member 元素从 source 集合移动到 destination 集合

差集语法:

SDIFFkey1[key2]   返回给定所有集合的差集(左侧)

SDIFFSTORE destination key1 [key2]  返回给定所有集合的差集并存储在 destination 中

交集语法:

SINTER key1 [key2] 
返回给定所有集合的交集(共有数据)

SINTERSTORE destination key1 [key2]  返回给定所有集合的交集并存储在 destination 中

并集语法:

SUNION key1 [key2] 返回所有给定集合的并集

SUNIONSTORE destination key1 [key2]  所有给定集合的并集存储在 destination 集合中

1.2.3.   应用场景

常应用于:对两个集合间的数据[计算]进行交集、并集、差集运算

1、以非常方便的实现如共同关注、共同喜好、二度好友等功能。对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存储到一个新的集合中。

2、利用唯一性,可以统计访问网站的所有独立 IP

1.3.  有序集合(sorted set) ZSET

1.3.1.   简介

1、 Redis
有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

2、不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

3、有序集合的成员是唯一的,但分数(score)却可以重复。

4、集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

Redis的ZSet是有序、且不重复

(很多时候,我们都将redis中的有序集合叫做zsets,这是因为在redis中,有序集合相关的操作指令都是以z开头的)

1.3.2.   命令

赋值语法:

ZADD key score1 member1 [score2 member2]

向有序集合添加一个或多个成员,或者更新已存在成员的分数

取值语法:

ZCARD key  获取有序集合的成员数

ZCOUNT key min max 计算在有序集合中指定区间分数的成员数

ZRANK key member 返回有序集合中指定成员的索引

ZRANGE key start stop [WITHSCORES]

通过索引区间返回有序集合成指定区间内的成员(低到高)

ZREVRANGE key start stop [WITHSCORES]

返回有序集中指定区间内的成员,通过索引,分数从高到底

删除语法:

   
 del key
  移除集合

ZREM key member [member
...] 移除有序集合中的一个或多个成员

ZREMRANGEBYRANK key start
stop 移除有序集合中给定的排名区间的所有成员(第一名是0)(低到高排序)

ZREMRANGEBYSCORE key min
max 移除有序集合中给定的分数区间的所有成员

1.3.3.   应用场景

常应用于:排行榜

1比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。

2比如一个存储全班同学成绩的Sorted Set,其集合value可以是同学的学号,而score就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。

3还可以用Sorted Set来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。

原文地址:https://www.cnblogs.com/Dearmyh/p/11600784.html

时间: 2024-10-15 00:56:31

Redis常用命令-list-set-zset的相关文章

自学总结redis第二部分(redis常用命令、高级命令特性以及与java代码的结合)

六.redis多数据类型介绍(常用命令) 6.1前提操作 #如果前面的redis环境没搭好,那么可以先暂时在 "http://try.redis.io/"中实践redis命令部分.   #为了测试方便,把redis登录密码暂时撤销   #redis一共分为五种基本数据类型:String,Hash,List,Set,ZSet #所有命令都可以到"http://www.redis.cn/commands.html"  去搜索到. #首先由于redis是一个基于key-v

Redis常用命令与高级应用

附: 127.0.0.1:6379> set xiaofei 小飞 OK 127.0.0.1:6379> get xiaofei "\xe5\xb0\x8f\xe9\xa3\x9e" 127.0.0.1:6379> quit [[email protected] redis-2.8.6]# redisc --raw 127.0.0.1:6379> get xiaofei 小飞 127.0.0.1:6379> 5. sorted sets类型和操作 sort

Redis快速起步及Redis常用命令大全

本系列教程内容提要 Java工程师之Redis实战系列教程教程是一个学习教程,是关于Java工程师的Redis知识的实战系列教程,本系列教程均以解决特定问题为目标,使用Redis快速解决在实际生产中的相关问题,为了更方便的与大家一起探讨与学习,每个章节均提供尽可能详细的示例源码及注释,所有示例源码均可在javacourse-redis-in-action找到相关帮助! 本章目标: 什么是Redis Redis数据结构 Redis常用命令 什么是Redis Redis是一个功能强大的非关系型内存数

redis常用命令及高级特性

11.redis常用命令 keys * 返回所有的键 keys my* 模糊匹配 exists key 确认key是否存在 del key expire key time对现有的键设置过期时间[秒为单位] ttl key 查看过期时间,-1代表已过期 move 将当期数据库中的key移到其它数据库当中 select database_name 选择数据库 move key database_name persist key 取消过期时间,此时ttl key返回-1并不代表过期 randomkey

No-sql之redis常用命令

转自:http://blog.csdn.net/nicewuranran/article/details/51793760 No-SQL之Redis 介绍 Redis是一种基于内存存储的key-value高性能存储系统,类似memcached,但是redis支持丰富的数据结构类型,并且其还支持数据持久化到磁盘. Redis is a data structure server. It is open-source, networked, in-memory, and stores keys wi

Redis 常用命令 大全

Redis 常用命令 发现几个很好的 Redis 常用命令汇总大全网页,分享给小伙伴们~ 1.Redis 命令参考 http://redisdoc.com/string/index.html 2.W3Cschool https://www.w3cschool.cn/redis_all_about/redis_all_about-sfc726u6.html 3.Runoob https://www.runoob.com/redis/redis-commands.html 原文地址:https://

Redis常用命令使用总结

redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的.在此基础上,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数

Redis常用命令-string-hash

Redis 1.   Redis命令描述 Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客户端. Redis 客户端在我们之前下载的的 redis 的安装包中. Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)等 1.1.  Redis键key Redis 键命令用于管理 redis 的键 DEL key 该命令用于在 key 存在时删除

2. Redis 常用命令

注意:Redis中命令不区分大小写 Set命令 set bar 1 #设置一个key 为bar的键 get命令 get bar #获取bar键的键值 keys keys * #获取所有的键 exists exists [key] #判定是否存在key,如果存在返回1,后在返回0 del del key [key-] #可以删除一个或多个键,返回值是删除的键的个数 type 获取键值的类型 返回的类型可以是:string:hash:list:set:zset incr 1) 当时整数类型时,会自增