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. Asp.Net Core 程序部署到Linux(centos)生产环境(二):docker部署

    运行环境 照例,先亮环境:软件的话我这里假设你已经批准好了.net core 运行环境,未配置可以看我的这篇[linux(centos)搭建.net core 运行环境] 腾讯云 centos:7.2 ...

  2. 记一次Eureka启动报Failed to start bean 'eurekaAutoServiceRegistration' 。。。错误

    在一次项目迁移的过程中,新导入了两个依赖,结果项目启动就报错,如下: 主要原因是:Failed to start bean 'eurekaAutoServiceRegistration'; neste ...

  3. 图数据库项目DGraph的前世今生

    本文由云+社区发表 作者:ManishRai Jain 作者:ManishRai Jain Dgraph Labs创始人 版权声明:本文由腾讯云数据库产品团队整理,页面原始内容来自于db weekly ...

  4. [十九]JavaIO之PipedReader 和 PipedWriter

    功能简介 还记得PipedInputStream  和 PipedOutputStream么 我们之前是这么说的: p, li { white-space: pre-wrap; } 使用管道通信时,必 ...

  5. iptables 指南

    iptables 是 Linux 内核集成的防火墙系统, 几乎所有 Linux 发行版都会内置 iptables. iptables 对进出的 IP 数据报进行处理和过滤, 过滤规则(rule)存储在 ...

  6. SpringBoot集成rabbitmq(一)

    前言 Rabbitmq是一个开源的消息代理软件,是AMQP协议的实现.核心作用就是创建消息队列,异步发送和接收消息.通常用来在高并发中处理削峰填谷.延迟处理.解耦系统之间的强耦合.处理秒杀订单.  入 ...

  7. onload 和 domready

    博客地址:https://ainyi.com/46 window.onload 事件会在页面或图像加载完成后触发(即所有元素的资源都下载完毕)如果页面上有许多图片.音乐或 falsh 还没加载完成,o ...

  8. 【.Net Core】获取绝对路径、相对路径

    一.绝对路径 1.获取应用程序运行当前目录Directory.GetCurrentDirectory(). System.IO命名空间中存在Directory类,提供了获取应用程序运行当前目录的静态方 ...

  9. java日期 Calendar类的使用

    举例: import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public clas ...

  10. js中函数表达式和自执行函数表达式的用法总结

    立即调用函数表达式 给函数体加大括号,在有变量声明的情形下,没有任何区别 但是,如果只是[自动执行]的情形下,就会不同 因为,一个匿名函数,不赋值或函数体不加小括号,是不能自动执行的 //以下情形并无 ...