继续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种数据类型的总结的更多相关文章

  1. redis学习笔记(三)——redis的命令大全总结

    总结了一些redis五种存储类型的常用命令以及一些通用操作命令,不是很全,是在学习的时候将学到的做了个汇总,使用的时候可以查一下. 笔记写在表格里面了,不好粘贴.......后面的直接截图了..... ...

  2. Redis学习笔记之入门基础知识——五种数据类型

    1) 字符串 SET设置值,GET获取值,DEL删除值 INCR key-name将键存储的值加上1       DECR key-name将键存储的值减去1 INCRBY key-name amou ...

  3. redis 学习笔记三

    一.redis 复制 数据库复制指的是发生在不同数据库实例之间,单向的信息传播的行为,通常由被复制方和复制方组成,被复制方和复制方之间建立网络连接,复制方式通常为被复制方主动将数据发送到复制方,复制方 ...

  4. StackExchange.Redis学习笔记(三)

    这一章主要写一些StackExchange.Redis的配置及不太经常用到的函数 数据库连接 下面是我的连接字符串,里面指定了地址,密码,及默认的数据库 Redis启动后默认会分成0-15个数据库,不 ...

  5. StackExchange.Redis学习笔记(三) 数据库及密码配置 GetServer函数

    这一章主要写一些StackExchange.Redis的配置及不太经常用到的函数 数据库连接 下面是我的连接字符串,里面指定了地址,密码,及默认的数据库 Redis启动后默认会分成0-15个数据库,不 ...

  6. redis学习笔记(三)

    Spring data redis: 要求: Redis 版本 > 2.6 与 Lettuce 或 Jedis 集成,两种java开源Redis库. Spring redis主要做的两件事: 连 ...

  7. Redis学习笔记之Redis单机,伪集群,Sentinel主从复制的安装和配置

    0x00 Redis简介 Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure server). Redis的键值 ...

  8. Redis学习总结(三)--Redis持久化

    Redis 是将数据存储在内存中的,如果出现断电或系统故障的时候数据就会存在丢失的现象,Redis通过将数据持久化到硬盘中来避免这个问题的出现,我们今天就来学习下 Redis 持久化. Redis 持 ...

  9. redis相关笔记(三.redis设计与实现(笔记))

    redis笔记一 redis笔记二 redis笔记三 1.数据结构 1.1.简单动态字符串: 其属性有int len:长度,int free:空闲长度,char[] bur:字符数组(内容) 获取字符 ...

  10. Redis学习笔记(4) Redis事务、生存时间及排序

    1. Redis事务 Redis中的事务(transaction)是一组命令的集合,一个事务中的命令要么都执行,要么都不执行.事务的原理是先将属于一个事务的命令发送给Redis,然后再让Redis依次 ...

随机推荐

  1. python的unittest測试框架的扩展浅谈

    非常多时候測试框架须要依据測试数据来自己主动生成測试用例脚本,比方接口測试,通过不同參数构建组合去请求接口,然后验证返回结果.假设这样能通过配置excel数据来驱动測试.而不用去写一大堆的測试用例脚本 ...

  2. 【CODEFORCES】 A. Dreamoon and Sums

    A. Dreamoon and Sums time limit per test 1.5 seconds memory limit per test 256 megabytes input stand ...

  3. Asp.net MVC 生成zip并下载

    前面有生成Excel或Word的示例,所以就不再重新写了. 这里只提供将指定文件以ZIP的方式下载. 创建一个 Zip工具类 public class ZIPCompressUtil { public ...

  4. Ubuntu下搜狗拼音突然无法输入中文的解决办法

    搜狗输入法前段时间还可以正常使用,突然今天无法输入中文了.这种情况在Ubuntu中非常常见,可能的原因有3个:1.可能依赖有问题.2.配置文件出错了.3运行出错,需要重新启动一下. 因为我的这个是突然 ...

  5. MPSOC之4——petalinux提取源码

    petalinux使用太不方便,捆绑的太死板,也不通用,还不如直接用编译器来的简单高效. 本文说明从petalinux中提取出源代码的过程,前提是已经petalinux-build完成. 1. ubo ...

  6. spring boot oauth2的一些记录

    oauth2及时从一个项目A申请另一个项目B的访问的时候,不用在项目A输入项目B的用户名和密码,个人理解先跳转到项目B,利用项目B的用户名和密码得到一个code之类的,这里有点像openID,不过不是 ...

  7. 【java】多线程同步死锁

    package 多线程; class A{ public synchronized void say(B b){ System.out.println("A说:你把你的本给我,我把我的笔给你 ...

  8. iOS Block的简单使用以及__block 和static修饰变量

    简单的代码总结,不足之处多多指教. //简单的使用 -(void)blockOne{ ; int(^BlockOne)(int) = ^(int num2) { return number*num2; ...

  9. 排查程序死循环,死锁的方法 ——pstack

    pstack命令可显示每个进程的栈跟踪,pstack $pid即可,pstack命令须由$pid进程的属主或者root运行. 这次出现cpu占比100%的情况,但看memory占比,并无异常,怀疑是某 ...

  10. date 命令详解

    date - print or set the system date and time Display the current time in the given FORMAT, or set th ...