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. 输入法设置,SublimeTest,putty掉线

    设置默认中文 在我们使用计算机中,如果输入法的默认语言是英文,那么我们操作起来会更加方便,那我们怎么设置呢??? 以Windows10为例 SublimeTest相关设置 SublimeTest出现乱 ...

  2. 使用yum安装不知道到底安装在什么文件夹

    find /* >yum001    #记录之前的文件夹 find /* >yum002    #记录安装完成后的文件夹 diff yum001 yum002 >yum000     ...

  3. LeetCode专题-Python实现之第13题:Roman to Integer

    导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...

  4. [十]JavaIO之FilterInputStream FilterOutputStream

    FilterInputStream  FilterOutputStream都是装饰器模式中的Decorator抽象装饰角色 他们继承了各自的抽象构建InputStream 和OutputStream ...

  5. Java——重载和重写

    前言 在程序设计中经常会遇到对对方法的重载或者重写,下面将介绍重载和重写. 重载(Overloade) 重载出现的原因 任何程序设计语言都具备的一项重要特性就是对名字的运用.当创建一个对象时,就给对象 ...

  6. c# Task 篇幅二

    上面一篇https://i.cnblogs.com/EditPosts.aspx?postid=10444773我们介绍了Task的启动,Task的一些方法以及应用,今天我们着重介绍一下Task其它概 ...

  7. 第22章 使用外部身份提供商登录 - Identity Server 4 中文文档(v1.0.0)

    ASP.NET Core有一种灵活的方式来处理外部身份验证.这涉及几个步骤. 注意 如果您使用的是ASP.NET Identity,则会隐藏许多基础技术细节.建议您还阅读Microsoft 文档并执行 ...

  8. C#工具:ASP.NET MVC生成图片验证码

    1.复制下列代码,拷贝到控制器中. #region 生成验证码图片 // [OutputCache(Location = OutputCacheLocation.None, Duration = 0, ...

  9. WEB前端常见面试题汇总:(一)

    1.JS找字符串中出现最多的字符 例如:求字符串'nininihaoa'中出现次数最多字符 方法一: var str = "nininihaoa"; var o = {}; for ...

  10. 在IIS上部署你的ASP.NET Core 2.1项目

    1.在控制面板→程序→启用或关闭Windows功能→勾选Internet Information Services以及Web管理工具下的IIS管理控制台 2.IIS 安装AspNetCoreModul ...