Redis学习笔记(三)Redis支持的5种数据类型的总结
继续Redis学习笔记(二)来说说剩余的三种数据类型。
三、列表类型(List)
1.介绍
列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的一段片段。列表类型内部是使用双向链表实现的,所以操作列表两端的字符串速度会很快。
2.命令
1)向列表两端添加元素
LPUSH key value [value...] RPUSH key value [value...]
LPUSH key value [value...] 是向列表左边添加元素,添加多个元素的话依次向列表左边添加。
RPUSH key value [value...] 是向列表右边添加元素,添加多个元素的话依次向列表右边添加。两个命令的返回值都是列表的长度。
从下图大家就可以明白具体过程:
2)获取列表中元素的个数
LLEN key
返回值为列表的长度,当键不存在时会返回0。
3)获得列表片段
LRANGE key start stop
此命令是返回列表中索引从start到stop之间的所有元素,包括两端的元素。Redis的列表索引从左边由0开始,右边由-1开始。那么 LRANGE key 0 -1 就可以查看列表中的所有元素了,特别的,如果start的索引位置比stop的索引位置靠后,则会返回空列表;如果stop大于实际的索引范围,则会返回到列表最右边的元素。
4)从列表两端弹出元素
LPOP key 和 RPOP key
它们的返回值是被弹出(移除)元素的值。示例如下:
5)删除列表中指定的值
LREM key count value
此命令会删除列表中前count个值为value的元素,返回值是实际删除的元素个数,当然count也可以为负数。
当count>0时,LREM命令会从列表的左边开始删除前count个值为value的元素;
当count<0时,LREM命令会从列表的左边开始删除前|count|个值为value的元素;
当count=0时,LREM命令会删除列表中所有值为value的元素。
LREM numbers 2 3 表示从numbers列表的左边开始删除前两个值为3的元素;LREM numbers -2 -1 表示从numbers列表的右边删除前两个值为-1的元素;返回值为2表示 成功删除了2个元素。
6)获得/设置指定索引的元素值
LINDEX key index LSET key index value
LINDEX 命令用来返回指定索引的元素值,索引从0(左边第一位)和-1(右边第一位)开始。
LSET 命令会将索引为index的元素赋值为value。示例如下:
7)只保留列表指定片段
LTRIM key start end
此命令用来删除指定索引范围之外的所有元素,只保留指定索引范围之内的元素,其指定索引范围的方法和LRANGE 命令一样。
8)向列表中插入元素
LINSERT key BEFORE|AFTER pivot value
LINSERT 命令首先会在列表中查询值为pivot的元素,然后根据BEFORE|AFTER来决定是把value插入到pivot的前面还是后面。返回值为执行插入操作后,列表的元素个数。
9)将元素从一个列表转移到另一个列表
RPOPLPUSH source destinntion
RPOPLPUSH 命令会先从source 列表的右边弹出一个元素,然后将其加入到destination列表的左边,并返回这个元素的值。当然source和destination是可以相同的。
四、集合类型(Set)
1.介绍
集合类型在Redis中是使用值为空的散列表(hash table)实现的。在集合中的每个元素都是不同的,且没有顺序。一个集合类型的数据至多可以存储2的32次方-1个字符串。
集合类型和列表类型有很多的相似之处,对比如下:
2.命令
1)SADD key member [member1 ...] SREM key member [member1 ...]
SADD 命令用来向集合中添加一个或多个元素,如果键不存在则会创建该键。又因为Set中是没有重复的元素的,所以如果要添加的元素已经在集合中存在,则会自动忽略掉这个元 素。返回值为成功添加的元素个数(忽略的元素不计)。
SREM 命令用来从集合中删除一个或多个元素,返回值为成功删除的元素个数。示例如下:
第二条SADD命令返回值为2,是因为元素a在第一次SADD命令中已经添加了。SREM命令返回值为1是因为集合中没有c这个元素。
2)获得集合中的所有元素,以及判断元素是否在集合中
SMEMBERS key SISMEMBER key member
SMEMBERS 命令会返回集合中所有的元素;SISMEMBER 命令用来判断集合中是否存在member元素,当值存在时返回值为1,否则为0。
3)集合间的运算
SDIFF key [key···]
此命令用于对多个集合取差集。示例如下:
注意:SDIFF setA setB 表示结果为A-B,如下图所示;SDIFF setB setA 表示结果为B-A,从上图可以看出结果不同。
SINTER key [key···]
SINTER 命令用来对多个集合取交集运算。示例如下图:
SUNION key [key···]
此命令用于对多个集合进行并集运算。示例如下:
SDIFFSTORE destination key [key···] SINTERSTORE destination key [key···] SUNIONSTORE destination key [key···]
以上3个命令和之前的3个集合间运算的命令用法基本一致,区别仅仅在于*STORE 命令不会直接返回结果,而是将结果存储在destination 键中,常用与需要进行多步集合运算的场 景中。
4)获得集合中元素个数
SCARD key
SCARD命令用来获得集合中的元素个数。
5)随机获得集合中的元素
SRANDMEMBER key [count]
SRANDMEMBER 命令用来从集合中随机获得元素,[count]参数可以指定一次获得几个元素,根据count的正负不同,具体表现也不同。
当count>0时,SRANDMEMBER 会随机从集合里获得count个不重复的元素。如果count的值大于集合中的元素个数,那么SRANDMEMBER 会返回集合中所有的元素。
当count<0时,SRANDMEMBER 会随机从集合里获得|count|个元素,这些元素有可能相同。
6)从集合中弹出一个元素
SPOP key
SPOP 命令与LPOP 命令作用类似,区别是LPOP是List的命令,是从列表左边弹出一个元素(List有序)。SPOP是Set的命令,由于Set的元素是无序的,所以SPOP命令会从集合中随 机弹出一个元素。
五、有序集合类型(Sorted Set)
1.介绍
有序集合类型是在集合类型的基础上为集合中每个元素都关联了一个分数,这使得我们不仅可以完成集合类型支持的一些操作,还能够获得分数最高(或最低)的前N个元素、获得指定分数范围内的元素与分数有关的操作。虽然集合中的每个元素都是不同的,但是它们的分数却可以相同。
有序集合类型和列表类型的比较:
相似点:
1)二者都是有序的。
2)二者可以获得某一范围的元素。
不同点:
1)列表是通过链表实现的,所以获取靠近两端的元素速度极快;有序集合类型是使用散列表(Skip list)和跳跃表实现的,所以即使读取位于中间的元素速度也很快。
2)列表中不能简单的调整某个元素的位置,但是有序集合可以通过更改元素的分数来调整元素的位置。
3)有序集合要比列表类型更加耗费内存。
2.命令
1)增加元素
ZADD key score member [score member ···]
ZADD命令用来向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换掉原来的分数。返回值是新添加到有序集合中的元素个数,不包含之前已经存在 的元素。所以ZADD命令不但可以用来做添加操作,更可以用来做更新操作。另外,分数不仅可以是整数,也可以是浮点数。示例如下:
2)获得元素的分数
ZSCORE key member 示例如下
3)获得排名在某个范围内的所有元素
ZRANGE key start stop [WITHSCORES] ZREVRANGE key start stop [WITHSCORES]
ZRANGE 命令会按照元素分数从小到大的顺序返回索引从start 到 stop 之间的所有元素(包含两端的元素)。
如果需要同事获取到分数的话只需要在命令尾部加上WITHSCORES即可。如下:
ZREVRANGE 命令和ZRANGE命令用法一致,区别在于ZREVRANGE 命令是按照元素分数从大到小的顺序给出结果的。特别的,如果元素的值是中文的话,取决于中文的编码格 式。
4)获得指定分数范围内的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
ZRANGEBYSCORE 命令是按照元素分数从小到大的顺序返回分数在min和max(包含min、max)之间的元素。如果希望分数范围不包含端点值,可以在分数前加上“(”符号。min 和max还支持无穷大,同ZADD命令一样。-inf表示负无穷,+inf表示正无穷。示例如下:
WITHSCORES参数的用法和ZRANGE命令一样,此处不在赘述。
LIMIT offset count 参数表示在获得的元素列表的基础上向后偏移offset个元素,并且只获取前count个元素。想获得分数高于60分的从第二个人开始的前3个人,示例如下:
想获取分数低于100分或等于100分的前三个人,可以用ZREVRANGEBYSCORE命令,示例如下:
5)增加某个元素的分数
ZINCRBY key increment member
返回值是增加后的分数。示例如下:
6)获得集合中元素的数量,获得指定分数范围内的元素个数
ZCARD key ZCOUNT key min max
ZCOUNT 命令中min和max参数的特性和ZRANGEBYSCORE中的一样。
7)删除元素
ZREM key member [member ···]
ZREM命令是删除一个或者多个元素,返回值是删除的元素的个数(不包含本来就不存在的元素)。
ZREMRANGEBYRANK key start stop
ZREMRANGEBYRANK 命令是按照元素分数从小到大的的顺序(即索引0表示最小的值)删除在指定排名范围之内的所有元素,并返回删除元素的数量。示例如下:
ZREMRANGEBYSCORE key min max
ZREMRANGEBYSCORE命令会删除指定分数范围内的所有元素,返回值是删除的元素数量。示例如下:
8)获得元素的排名
ZRANK key member ZREVRANK key member
ZRANK 命令会按照元素分数从小到大的顺序获得指定的元素的排名(从小到大,即分数最小的排名为0);ZREVRANK 命令则相反(从大到小,即分数最大的排名为0)。示例如下
9)计算有序集合的交集
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight...] ] [AGGREGATE SUM|MIN|MAX]
ZINTERSTORE 命令用来计算多个有序集合的交集并将结果存储在destination键中(同样以有序集合存储),返回值是destination 键中的元素个数。
destination键中元素的分数是由AGGREGATE 参数决定的。
(1)当AGGREGATE 是SUM时(默认值),destination键中元素的分数是每个参与计算的集合中该元素分数的和。
(2)当AGGREGATE 是MIN时,destination键中元素的分数是每个参与计算的集合中该元素分数的最小值。
(3)当AGGREGATE 是MAX时,destination键中元素的分数是每个参与计算的集合中该元素分数的最大值。
另外还有一个命令与ZINTERSTORE命令的用法一样,名为ZUNIONSTORE,它的作用是计算集合间的并集,这里不再赘述。
Redis学习笔记(三)Redis支持的5种数据类型的总结的更多相关文章
- redis学习笔记(三)——redis的命令大全总结
总结了一些redis五种存储类型的常用命令以及一些通用操作命令,不是很全,是在学习的时候将学到的做了个汇总,使用的时候可以查一下. 笔记写在表格里面了,不好粘贴.......后面的直接截图了..... ...
- Redis学习笔记之入门基础知识——五种数据类型
1) 字符串 SET设置值,GET获取值,DEL删除值 INCR key-name将键存储的值加上1 DECR key-name将键存储的值减去1 INCRBY key-name amou ...
- redis 学习笔记三
一.redis 复制 数据库复制指的是发生在不同数据库实例之间,单向的信息传播的行为,通常由被复制方和复制方组成,被复制方和复制方之间建立网络连接,复制方式通常为被复制方主动将数据发送到复制方,复制方 ...
- StackExchange.Redis学习笔记(三)
这一章主要写一些StackExchange.Redis的配置及不太经常用到的函数 数据库连接 下面是我的连接字符串,里面指定了地址,密码,及默认的数据库 Redis启动后默认会分成0-15个数据库,不 ...
- StackExchange.Redis学习笔记(三) 数据库及密码配置 GetServer函数
这一章主要写一些StackExchange.Redis的配置及不太经常用到的函数 数据库连接 下面是我的连接字符串,里面指定了地址,密码,及默认的数据库 Redis启动后默认会分成0-15个数据库,不 ...
- redis学习笔记(三)
Spring data redis: 要求: Redis 版本 > 2.6 与 Lettuce 或 Jedis 集成,两种java开源Redis库. Spring redis主要做的两件事: 连 ...
- Redis学习笔记之Redis单机,伪集群,Sentinel主从复制的安装和配置
0x00 Redis简介 Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure server). Redis的键值 ...
- Redis学习总结(三)--Redis持久化
Redis 是将数据存储在内存中的,如果出现断电或系统故障的时候数据就会存在丢失的现象,Redis通过将数据持久化到硬盘中来避免这个问题的出现,我们今天就来学习下 Redis 持久化. Redis 持 ...
- redis相关笔记(三.redis设计与实现(笔记))
redis笔记一 redis笔记二 redis笔记三 1.数据结构 1.1.简单动态字符串: 其属性有int len:长度,int free:空闲长度,char[] bur:字符数组(内容) 获取字符 ...
- Redis学习笔记(4) Redis事务、生存时间及排序
1. Redis事务 Redis中的事务(transaction)是一组命令的集合,一个事务中的命令要么都执行,要么都不执行.事务的原理是先将属于一个事务的命令发送给Redis,然后再让Redis依次 ...
随机推荐
- 使用AOP记录应用调用链开销
最近系统出现了一次线上的性能问题,本来以为目前的QPS应该是不会出现任何问题的,结果微服务还是比较容易因为某个点的问题导致雪崩的...出了性能问题就要做分析,正统的思路是要不断进行压测用JProfil ...
- Cocos2d-x 3.0 Android改动APK名、更改图标、改动屏幕方向、改动版本,一些须要注意的问题
非常多新手程序员做出一个游戏后,编译成apk安装在手机上.却发现安装程序名和游戏图标都是Cocos2dx默认的,并且默认屏幕方向是横向.那么须要怎么才干改动为自己想要的呢? 打开你创建的project ...
- SQL-PL/SQL基础
SQL的4GL,对流程控制的支持不够,Oracle的PL/SQL是3GL.加入了流程控制.变量等支持能够在数据库层面上进行程序的设计. PL/SQL的特点 1.支持事务控制和SQL. 2.数据类型在S ...
- 游戏服务端中使用Servlet和Java注解的一个好设计
SNS类游戏基本都是使用HTTP短连接,用Java来开发服务端时能够使用Servlet+Tomcat非常轻松的架构起服务端来.在这里介绍一种使用Servlet比較好的一种设计,我也见过非常多基于HTT ...
- DDD理论学习系列——案例及目录
目录 DDD理论学习系列(1)-- 通用语言 DDD理论学习系列(2)-- 领域 DDD理论学习系列(3)-- 限界上下文 DDD理论学习系列(4)-- 领域模型 DDD理论学习系列(5)-- 统一建 ...
- (转)java内部类详解
本文转自http://www.cnblogs.com/dolphin0520/p/3811445.html,谢谢作者 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能 ...
- 有关Ajax跨域请求的解决方案
前言 最近博主在赶项目进度.所以微信二次开发那边的博文一直没有更新.后续时间会慢慢记录这个学习历程的.来年公司要开发微信小程序.到时也会记录一下历程. 闲话少说,今天在工作中遇到了SpringMVC接 ...
- springboot+jpa+thymeleaf增删改查的示例(转)
这篇文章介绍如何使用jpa和thymeleaf做一个增删改查的示例. 先和大家聊聊我为什么喜欢写这种脚手架的项目,在我学习一门新技术的时候,总是想快速的搭建起一个demo来试试它的效果,越简单越容易上 ...
- springboot命令启动
gradle打jar包命令 jar { doFirst { def jarFiles = ''; configurations.compile.collect { jarFiles += it.nam ...
- 《TCP-IP详解卷1:协议》【PDF】下载
<TCP-IP详解卷1:协议>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062539 内容简介<TCP/IP详解卷1:协 ...