Redis常用数据结构

时间:2021-04-09 23:25:25

  Redis常用数据结构包括字符串(strings),列表(lists),哈希(hashes),集合(sets),有序集合(sorted sets)。

  redis的key最大不能超过512M,可通过redis-cli config get xxx获取某个参数配置,如获取redis最大内存,redis-cli config get maxmemory。可通过redis-cli config set xxx来设置某个参数的值,如:redis-cli config set maxmemory 400M

  字符串(Strings)

  Redis最简单的数据结构,通过get/set/进行查询和设置参数,set时,吐过key之前已存在,则默认会替换,value最大值不能超过512M,可以通过nx来设置不覆盖之前已存在的value。set key value nx,如果key已存在,返回空,value还是修改之前的值,如果value是整数,则可通过incr等命令进行自增,可通过mset,mget命令添加或查询多组命令。  

  列表(Lists)

  Redis列表是通过链表(linked list)来实现的,插入速度非常快,官网介绍,使用lpush向一个只有10个元素的列表插入元素与向一个有一千万个元素的列表插入元素的速度是相同的,但是查询速度比较慢,这和java中链表的特点一致(插入删除快,查找修改慢)。redis以链表实现列表list的一个原因为在数据库中向一个非常长的量表中快速插入数据是非常重要的。另外,可以在恒定时间内或者指定范围内的数据。当需要快速访问一个非常大的集合中的元素时,可以通过使用另外一种数据结构,sorted set。list常用的命令有lpush,rpush,rpop,lpop,lrange,ltrim,llen等,ltrim与lrange类型,其只保留指定范围内的元素,范围之外的元素将被删除,从0开始,包含起始和结束元素。

  如果要获取最新的五条数据,则可以通过lrange list 0 4来处理,这在有些情况下是很有用的。

127.0.0.1:> LPUSH list aa bb cc dd ee ff gg kk ll mm
(integer)
127.0.0.1:> LRANGE list
) "mm"
) "ll"
) "kk"
) "gg"
) "ff"
127.0.0.1:>

  lrange中元素位置也可以使用负数,如想要获取最早的5条数据,可以通过lrange list -5 -1

127.0.0.1:> LRANGE list - -
) "ee"
) "dd"
) "cc"
) "bb"
) "aa"
127.0.0.1:>

  如果只保留最新的5条数据,则可以使用ltrim,不在前五条的数据将被删除,节省内存空间

127.0.0.1:> LPUSH num
(integer)
127.0.0.1:> LTRIM num
OK
127.0.0.1:> LRANGE num
) ""
) ""
) ""
) ""
) ""
127.0.0.1:>

  可以使用lpush与rpop或者rpush与lpop模拟队列,先进先出

127.0.0.1:> LPUSH ls01
(integer)
127.0.0.1:> RPOP ls01
""
127.0.0.1:>
127.0.0.1:> RPUSH ls02
(integer)
127.0.0.1:> LPOP ls02
""
127.0.0.1:>

  可以使用lpush与lpop或者rpush与rpop模拟栈,先进后出

127.0.0.1:> LPUSH ls03
(integer)
127.0.0.1:> LPOP ls03
""
127.0.0.1:>
127.0.0.1:> RPUSH ls04
(integer)
127.0.0.1:> RPOP ls04
""
127.0.0.1:>

  使用rpush,brpop,lpush,blpop可以实现生产者消费者模式,当获取病毒奥信息,则等待,知道超时,blpop key timeout,等到timeout时间还未获取到数据,则结束命令

  哈希(Hashes)

  类似于java中的map,可用于存储一个对象的属性,常用命令有hset,hget,hgetall,hmset,hdel,hlen

  集合(Sets)

  无序数据,不允许重复,可以执行多个集合的交集,并集和差集,常用的命令有sadd,sismember,smembers,sinter交集,sunion并集,sdiff差集,spop随机获取并移除元素

  sunionstore拷贝集合到一个新的集合中,语法结构:sunionstore newset oldset,

127.0.0.1:> SADD set
(integer)
127.0.0.1:> SUNIONSTORE set01 set
(integer)
127.0.0.1:>

 若将oldset放到前面,且newset为空,则会清空oldset

127.0.0.1:> sadd set
(integer)
127.0.0.1:> SUNIONSTORE set set001
(integer)
127.0.0.1:> SMEMBERS set
(empty list or set)
127.0.0.1:>

  scard获取给定集合的成员个数

127.0.0.1:> sadd myset
(integer)
127.0.0.1:> scard myset
(integer)
127.0.0.1:>

  srandmember随机获取集合中的元素,但不移除元素

127.0.0.1:> SRANDMEMBER myset
""
127.0.0.1:> SRANDMEMBER myset
""
127.0.0.1:> SRANDMEMBER myset
""
127.0.0.1:> SRANDMEMBER myset
) ""
) ""
127.0.0.1:> SRANDMEMBER myset
) ""
) ""
127.0.0.1:>

  有序集合(Sorted sets)

  数据无序,不允许重复,每个元素都对应一个float型的分数,集合中元素按照顺序获取,排序规则如下

  1、如果A和B是两个具有不同分值的元素,如果A的分值大于B的分值,则A>B

  2、如果A和B有相同的分值,则如果A的字符串字典顺序比B的大,则A>B。A与B不可能具有相同的字符串,若字符串相同,则其分值将被覆盖。

127.0.0.1:> ZADD exam  math  Chinese  English  Synthesis
(integer)
127.0.0.1:> ZRANGE exam -
) "Chinese"
) "English"
) "math"
) "Synthesis"
127.0.0.1:>

  能够确认的是,输出的元素已经是有序的了,其中0和-1意思为从第一个数据到最后一个数据,输出分数可能更加直观

127.0.0.1:> ZRANGE exam  - withscores
) "Chinese"
) ""
) "English"
) ""
) "math"
) ""
) "Synthesis"
) ""
127.0.0.1:>

  反向输出可以使用zrevrange

127.0.0.1:> zrevrange exam  - withscores
) "Synthesis"
) ""
) "math"
) ""
) "English"
) ""
) "Chinese"
) ""
127.0.0.1:>

  查找小于130分的课程

127.0.0.1:> ZRANGEBYSCORE exam -inf  withscores
) "Chinese"
) ""
) "English"
) ""
127.0.0.1:>

  查找大于130分的课程

127.0.0.1:> ZRANGEBYSCORE exam  +inf withscores
) "math"
) ""
) "Synthesis"
) ""
127.0.0.1:>

  查找120到128的分数

127.0.0.1:> ZRANGEBYSCORE exam   withscores
) "Chinese"
) ""
) "English"
) ""
127.0.0.1:>

  可以发现,ZRANGEBYSCORE 查询出的元素包含第一个和最后一个,删除时也是如此

127.0.0.1:> ZREMRANGEBYSCORE exam
(integer)
127.0.0.1:>
127.0.0.1:>
127.0.0.1:> ZRANGE exam - withscores
) "math"
) ""
) "Synthesis"
) ""
127.0.0.1:>

  当分值相同,以字典顺序排序

127.0.0.1:> ZADD users  wangyangming  huxueyuan  lihongzhang  zengguopa
(integer)
127.0.0.1:> ZRANGE users -
) "huxueyuan"
) "lihongzhang"
) "wangyangming"
) "zengguopa"
127.0.0.1:>

  根据字段顺序查询元素,包括第一个元素,但不包括最后一个元素,如下例子为包含h开头的元素,但不包含w开头的元素。

127.0.0.1:> ZRANGEBYLEX users [h [w
) "huxueyuan"
) "lihongzhang"
127.0.0.1:>

  

Redis常用数据结构的更多相关文章

  1. php数组去重、魔术方法、redis常用数据结构及应用场景

    一.用函数对数组进行去重的方法 1.arrau_unique函数的作用 移除数组中重复的值. 将值作为字符串进行排序,然后保留每个值第一次出现的健名,健名保留不变. 第二个参数可以选择排序方式: SO ...

  2. Redis常用数据结构和操作

    1.String 存入字符类型 Set name luowen 设置name = luowen 存储 Get name 获取设置好的name的值 Setnx name luowen 设置name键值为 ...

  3. Redis 常用数据结构及其控制命令整合

    Redis 键值支持5种基本结构,分别是字符串,列表,哈希,集合,有序集合.每一种数据结构都有对应的取值和设值命令,辅助命令,除此之外,还有一些全局命令,用来管理Redis存储的所有 键. 全局命令 ...

  4. redis常用数据结构解析

    Redis是一个开源的Key-Value存储引擎,它支持string.hash.list.set和sorted set等多种值类型.由于其卓越的性能表现.丰富的数据类型及稳定性,广泛用于各种需要k/v ...

  5. Redis 常用数据结构命令

    1. 字符串(string) 增加元素 set key value [EX seconds] [PX milliseconds] [NX|XX] EX seconds:为键设置秒级过期时间 PX mi ...

  6. Redis常用数据类型介绍、使用场景及其操作命令

    Redis常用数据类型介绍.使用场景及其操作命令 本文章同时也在cpper.info发布. Redis目前支持5种数据类型,分别是: 1.String(字符串) 2.List(列表) 3.Hash(字 ...

  7. Redis中7种集合类型应用场景&redis常用命令

    Redis常用数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部 ...

  8. Redis常用数据类型

    Redis常用数据类型 转载自:http://blog.sina.com.cn/s/blog_7f37ddde0101021q.html     Redis最为常用的数据类型主要有以下五种: ●Str ...

  9. Redis学习笔记(4)——Redis五大数据结构介绍以及应用场景

    出处:https://www.jianshu.com/p/f09480c05e42 Redis是典型的Key-Value类型数据库,Key为字符类型,Value的类型常用的为五种类型:String.H ...

随机推荐

  1. uniq-删除重复

    uniq常用于管道中,用来删除已使用sort排序完成的重复记录. uniq有3个好用的选项: -c 可在每个输出行之前加上该行重复的次数: -d 仅显示重复的行 -u 仅显示未重复的行

  2. 又来了,SDE非直连

    现在sde都推荐直连了,没想到还是遇到了非直连. 用10.1默认是直连,但还支持非直连. 安装半天始终无法启动.系统差点崩了. 原来是sde用户密码过期锁定了,好烦. C:\Program Files ...

  3. Q4: Two Sum

    问题描述: Given an array of integers, find two numbers such that they add up to a specific target number ...

  4. Hive(六):HQL DDL

    HQL语法基于 SqlLine(http://sqlline.sourceforge.net/),DDL主要包含数据库.函数.视图的创建.修改.删除,参考资料:(https://cwiki.apach ...

  5. dbms_file_transfer使用简介

    dbms_file_transfer这个包可以在两个位置传输文件,分别可以有以下位置: a 从一个asm diskgroup传输到另外一个asm diskgroup b 从一个asm diskgrou ...

  6. Kettle汇总时参数

    Kettle汇总时手动执行小时汇总命令: ./kitchen.sh -norep -file /usr/local/evqm/kettle/kettle_scripts/rpt_hour.kjb -p ...

  7. background小结

    CSS背景属性Background详解 本文详解了CSS的背景属性Background,包括CSS3中新增的背景属性.如果你是个CSS初学者,还可以查看之前介绍的CSS浮动属性和CSS透明属性详解. ...

  8. sqlserver 存储过程 带输出参数

    CREATE PROCEDURE [dbo].[output] @acctNbr varchar(), --会员卡号 @acctPwd1 nvarchar() OUT, --登录密码 @acctPwd ...

  9. 前端校验插件——Validator简单使用

    >>>>>>>>>>>>>>>>>>>>>>>>> ...

  10. 小tips:JS中this操作执行像(object.getName = object.getName)()操作改变了this

    var name = "The window"; var object = { name: "My Object", getName: function(){ ...