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. SVN就是这么简单

    什么是SVN SVN全称:Subversion,是一个开放源代码的版本控制系统 Svn是一种集中式文件版本管理系统.集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码, ...

  2. DSAPI多功能组件编程应用-网络相关(上)

    [DSAPI.DLL下载地址]  DSAPI多功能组件编程应用-网络相关,网络相关编程有很多很多,这里讲解一下封装在DSAPI中的网络相关的功能,这些都是本人简化到极点的功能了,可以在软件开发过程中节 ...

  3. Java多线程之---用 CountDownLatch 说明 AQS 的实现原理

    本文基于 jdk 1.8 . CountDownLatch 的使用 前面的文章中说到了 volatile 以及用 volatile 来实现自旋锁,例如 java.util.concurrent.ato ...

  4. [Go] golang创建目录写文件判断文件

    package main import ( "log" "os" ) func main() { //创建目录 os.Mkdir("test" ...

  5. Java开发笔记(五十二)对象的类型检查

    前面介绍了类的多态性,来自于鸡类的实例chicken,既能用来表达公鸡实例,也能用来表达母鸡实例.可是这导致了一个问题,假如在call方法内部需要手工判断输入参数属于公鸡实例还是母鸡实例,那该如何是好 ...

  6. 大湾区联动:广州深圳助力东莞.NET俱乐部首次线下活动

    新年伊始,经过一个寒冬考验后的.NET社区热情不减,长沙.南京.合肥.东莞先后建立以微信为主要平台的线上.NET社区.并相继开始筹划和组织各地区的首次线下活动.东莞作为粤港澳大湾区的腹地,制造业基地, ...

  7. 从Linux上传到Git过程

    1.1 实验内容 本次课程讲的是在实验楼的在线环境中,如何使用 Github 去管理在在线环境中使用的代码.配置.资源等实验相关文件,怎样去添加.同步和下拉在远程仓库中的实验文件,以此来维持自身的实验 ...

  8. Android远程桌面助手扩展之微信跳一跳辅助

    微信跳一跳的外挂辅助已是五花八门,万能的TB上也有了各种明码标价的代练.微信小程序游戏的火爆甚至带火了手游外挂产业.另一方面,跳一跳游戏也在不断更新,防止使用外挂刷高分.Android远程桌面助手支持 ...

  9. android 开发之 ListView 与Adapter 应用实践

    在开发android中,ListView 的应用显得非常频繁,只要需要显示列表展示的应用,可以说是必不可少,下面是记录开发中应用到ListView与Adapter 使用的实例: ListView 所在 ...

  10. UDK命令

    UDK命令行参数与控制台命令都是大小写不敏感的 命令行  udn中文  udn英文 全词大小写匹配,正则表达式,在c++代码中搜索减号开头的命令行参数(如:-BENCHMARK.-onethread等 ...