Redis常用数据结构
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常用数据结构的更多相关文章
- php数组去重、魔术方法、redis常用数据结构及应用场景
一.用函数对数组进行去重的方法 1.arrau_unique函数的作用 移除数组中重复的值. 将值作为字符串进行排序,然后保留每个值第一次出现的健名,健名保留不变. 第二个参数可以选择排序方式: SO ...
- Redis常用数据结构和操作
1.String 存入字符类型 Set name luowen 设置name = luowen 存储 Get name 获取设置好的name的值 Setnx name luowen 设置name键值为 ...
- Redis 常用数据结构及其控制命令整合
Redis 键值支持5种基本结构,分别是字符串,列表,哈希,集合,有序集合.每一种数据结构都有对应的取值和设值命令,辅助命令,除此之外,还有一些全局命令,用来管理Redis存储的所有 键. 全局命令 ...
- redis常用数据结构解析
Redis是一个开源的Key-Value存储引擎,它支持string.hash.list.set和sorted set等多种值类型.由于其卓越的性能表现.丰富的数据类型及稳定性,广泛用于各种需要k/v ...
- Redis 常用数据结构命令
1. 字符串(string) 增加元素 set key value [EX seconds] [PX milliseconds] [NX|XX] EX seconds:为键设置秒级过期时间 PX mi ...
- Redis常用数据类型介绍、使用场景及其操作命令
Redis常用数据类型介绍.使用场景及其操作命令 本文章同时也在cpper.info发布. Redis目前支持5种数据类型,分别是: 1.String(字符串) 2.List(列表) 3.Hash(字 ...
- Redis中7种集合类型应用场景&redis常用命令
Redis常用数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部 ...
- Redis常用数据类型
Redis常用数据类型 转载自:http://blog.sina.com.cn/s/blog_7f37ddde0101021q.html Redis最为常用的数据类型主要有以下五种: ●Str ...
- Redis学习笔记(4)——Redis五大数据结构介绍以及应用场景
出处:https://www.jianshu.com/p/f09480c05e42 Redis是典型的Key-Value类型数据库,Key为字符类型,Value的类型常用的为五种类型:String.H ...
随机推荐
- Session执行机制与原理
Session执行机制与原理 作者:Stanley 罗昊 [转载请注明出处和署名,谢谢!] 什么是Session 首先了解一下Session的中文意思:一次会话,什么是一次会话呢?我举个例子:就我们现 ...
- 使用RESTful风格开发Java Web
什么是RESTful风格? REST是REpresentational State Transfer的缩写(一般中文翻译为表述性状态转移),REST 是一种体系结构,而 HTTP 是一种包含了 RES ...
- 【Java基础】【24多线程(上)】
24.01_多线程(多线程的引入)(了解) 1.什么是线程 线程是程序执行的一条路径, 一个进程中可以包含多条线程 多线程并发执行可以提高程序的效率, 可以同时完成多项工作 2.多线程的应用场景 红蜘 ...
- RabbitMQ是如何运转的?
前言 之前已经介绍了RabbitMQ交换机模型的相关简单概念,都是作为此篇的基础铺垫,如果对此篇不懂的可以先看我上一篇的介绍认识RabbitMQ交换机模型,或者联系评论,分享<RabbitMQ实 ...
- python中循环删除列表中元素时的坑!
循环删除列表中元素时千万别用正序遍历,一定要用反序遍历! 废话不多说,先上案例代码: def test(data): for i in data: data.remove(i) return data ...
- 第9章 使用客户端凭据保护API - Identity Server 4 中文文档(v1.0.0)
快速入门介绍了使用IdentityServer保护API的最基本方案. 我们将定义一个API和一个想要访问它的客户端. 客户端将通过提供ClientCredentials在IdentityServer ...
- (摘)Entity Framework Core 2.1带来更好的SQL语句生成方案
微软发布了Entity Framework Core2.1,为EF开发者带来了很多期待已久的特性.EF Core 2.1增加了对SQL GROUP BY的支持,支持延迟加载和数据种子等. EF Cor ...
- 30.C++复习篇
本章学习内容: 1.const 2.指针const 3.inline内联函数 4.函数重载 5.extern “C” 6.new/delete声明与释放 7.namespace命名空间 8.C++中的 ...
- rocketmq 发送时异常:system busy 和 broker busy 解决方案
记一次 rocketmq 使用时的异常. 这里就不说什么rocketmq 源码啥的了,因为没看过.网上一搜这两个异常 大部分都是什么源码解读,也没说出现后的解决办法(蓝瘦香菇). 大量测试发现: 1. ...
- JS的arguments
arguments对象:当前函数内置的全局属性,表示当前函数的所有参数的集合可以用来检测函数实参的个数 使用环境:当函数的参数个数无法确定时,使用arguments 写一个函数输出arguments看 ...