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依次 ...
随机推荐
- C#真的过时了吗?
现在有一种言论:C#过时了!!! 有人说现在是BS的时代,C#开发BS网站的那一套,相对于Java.PHP来说,效率太低了! 有人说现在是移动互联网时代,C#作为微软主推的语言,无法开发移动应用成为其 ...
- Cocos2d-x3.0 触摸事件
TouchableSpriteTest auto winSize = Director::getInstance()->getWinSize(); Point origin = Director ...
- js通用方法检測浏览器是否已安装指定插件(IE与非IE通用)
/* * 检測是否已安装指定插件 * * pluginName 插件名称 */ function checkPlugins(pluginName) { var np = navigator.plugi ...
- Shiro学习之身份验证
身份验证,即在应用中谁能证明他就是他本人.一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明. 在shiro中,用户需要提供principals (身份)和cre ...
- scrapy爬虫框架setting模块解析
平时写爬虫的时候并不需要设置setting里所有的参数,今天心血来潮,花了点时间查了一下setting模块创建后自动写入的所有参数的含义,记录一下. 模块相关说明信息 # -*- coding: ut ...
- java类的继承的一些细节
类的继承是java面向对象体系的一个重要方面(封装.继承.多态),对于java类的继承,需要注意如下细节. 1.构造函数. 如果一个类没有任何构造函数,系统会默认分配一个无参的构造函数给它,这个构造函 ...
- 在java项目中加入百度富文本编辑器
富文本编辑器在项目中很常见,他可以将文本,图片等信息存入数据库,在编辑一些图文混排的信息的时候很有用,比如商城项目的商品详情页,包含很多带有样式的文字和图片. 此前一直使用的百度的富文本编辑器uedi ...
- Java并发编程实践读书笔记(2)多线程基础组件
同步容器 同步容器是指那些对所有的操作都进行加锁(synchronize)的容器.比如Vector.HashTable和Collections.synchronizedXXX返回系列对象: 可以看到, ...
- CNN中的卷积操作的参数数计算
之前一直以为卷积是二维的操作,而到今天才发现卷积其实是在volume上的卷积.比如输入的数据是channels*height*width(3*10*10),我们定义一个核函数大小为3*3,则输出是8* ...
- Material使用07 MatGridListModule的使用
1 MatGridListModule简介 对相似数据的展现,尤其是像是图片的展示 使用起来很像表格 官方文档:点击前往 2 MatGridListModule提供的指令 2.1 mat-grid-l ...