Redis五大数据结构
1、Redis介绍
Redis是REmote DIctionary Server的缩写,作者定位于一个内存KV存储数据库(In-memory key-value Store),让Redis自豪的并不是那每秒10K的读写速度,而是它那可以应对很多情况的数据结构,我这里就简单的介绍一下它五大数据结构,也可以方便的让自个翻翻API,并给以后翻阅源码打下一个基础。
2、Strings
1)简介
String是Redis最基本的数据结构,它的String是二进制安全的,即String中可以存放任意的二进制数据,比如说JPG图片、序列化对象等。String值长度最大可到512mb。
2)结构定义
struct sdshdr{
|
3)支持命令
APPEND、GET、GETBIT、GETRANGE、GETSET、STRLEN
MGET、MSET、MSETNX、SET、SETBIT、SETEX、SETNX、SETRANGE
3、Hashes
1)简介
Hashes中存放了多个键值对(field/value),所以Hash结构可方便的表示一个对象。如:
HMSET user:00001 username wikie password gender male
一个Hash可以存放2^32 – 1个键值对。Hash对象是用zipmap存储的,查找、删除均为O(n),但一般来说对象的field对象不会大多,所以说操作评价还是近似O(1)。如果field/value的大小超过一定限制后,Redis会在内部自动将zipmap替换成正常的Hash实现,可在配置文件中指定:
hash-max-zipmap-entries 64 # 字段最多64个
hash-max-zipmap-value 512 # value最大为512字节
2)结构定义
//Please check in dict.h |
3)支持命令
HDEL、HEXISTS、HGET、HGETALL、HINCRBY、HKEYS、HLEN
4、Lists
1)简介
Lists是一个简单的strings类型的双向链表,按照插入顺序排序。
最大长度支持2^32-1,可以通过命令从头部或者尾部添加删除元素,即可很方便的实现栈与队列操作。List还可以阻塞,很容易就实现了一个工作队列,而不用轮询。
2)结构定义
// Check in adlist.h |
3)支持命令
BLPOP 、BRPOP 、BRPOPLPUSH、LINDEX、LINSERT、LLEN
LPOP、LPUSH、LPUSHX、LRANGE、LREM、LSET、LTRIM
5、Sets
1)简介
与数学的中的集合概念类似,没有重复的值,对其有添加删除操作,可对都个结合求交、并等操作,key理解为集合的名字。新浪微博中的:“我和她都关注了”只需要一个SINTER命令就可以实现。
Sets通过Hash Table实现,添加删除的时间复杂度均为O(n),HashTable会随着添加或者删除自动调整大小。需要注意的是,调整HashTable大小需要同步(获取写锁)阻塞读写操作,后期可能会采用SkipList(无序如何使用SkipList?)实现。
和其它类型一样,最大支持2^32-1个元素。
2)结构定义
与Hashes中的dict一致。
3)支持的方法
SADD、SCAR、SDIFF、SDIFFSTORE、SINTER、SISMEMBER
SMEMBERS、SMOVE、SPOP、SRANDMEMBER、SREM
6、ZSets
1)简介
ZSets为Set的升级版本,即排序的Sets,在Set的基础之上增加了顺序(Score)属性,每次插入均需要指定,且会自动重新调整值的顺序。Score为double类型,ZSets实现为SkipList与HashTable的混合体。
元素到Score的映射是添加在HashTable中的,所以给定一个元素获取Score开销为O(1),Score到元素的映射则为SkipList。
2)结构定义
/* ZSETs use a specialized version of Skiplists */ |
3)支持命令
ZADD、ZCARD、ZCOUNT、ZINCRBY、ZINTERSTORE
ZRANGE、ZRANGEBYSCORE、ZRANK、ZREM
ZREMRANGEBYRANK、ZREMRANGEBYSCORE、ZREVRANGE
ZREVRANGEBYSCORE、ZREVRANK、ZSCORE、ZUNIONSTORE
参考资料:
from: http://yihongwei.com/2012/03/redis-data-strutrue/
Redis五大数据结构的更多相关文章
- redis 五大数据结构__常用命令
linux 下下载redis数据库 apt install redis 如果提示权限不够的话, 直接提权: sudo apt install redis-server linux启用.停止服务 ser ...
- redis学习笔记-04:redis五大数据结构类型
redis的命令大全网站:http://redisdoc.com/ 一.redis五大数据类型 1.String(字符串).Hash(哈希,类似Java里的Map).List(列表).Set(集合)和 ...
- Redis学习笔记(4)——Redis五大数据结构介绍以及应用场景
出处:https://www.jianshu.com/p/f09480c05e42 Redis是典型的Key-Value类型数据库,Key为字符类型,Value的类型常用的为五种类型:String.H ...
- Redis第二讲【Redis基本命令和五大数据结构】
[二.Redis基本命令和五大数据结构] redis的基础知识和命令 redis 是一个单进程(包装epoll函数来对读写事件进行相应) 默认有16个数据库,初始使用的数据库为0号库 默认端口为637 ...
- 一文搞定Redis五大数据类型及应用场景
本文学习知识点 redis五大数据类型数据类型:string.hash.list.set.sorted_set 五大类型各自的应用场景 @TOC 1. string类型 1-1 string类型数据的 ...
- Redis基本数据结构总结之STRING和LIST
Redis基本数据结构总结前言 Redis的特点在于其读写速度特别快,因为是存储在内存中的,其非常适合于处理大数据量的情况:还有一个是其不同于其他的关系型数据库,Redis是非关系型数据库,也就是我们 ...
- Redis基本数据结构总结之SET、ZSET和HASH
Redis基本数据结构总结 前言 Redis的特点在于其读写速度特别快,因为是存储在内存中的,其非常适合于处理大数据量的情况:还有一个是其不同于其他的关系型数据库,Redis是非关系型数据库,也就是我 ...
- Redis各种数据结构性能数据对比和性能优化实践
很对不起大家,又是一篇乱序的文章,但是满满的干货,来源于实践,相信大家会有所收获.里面穿插一些感悟和生活故事,可以忽略不看.不过听大家普遍的反馈说这是其中最喜欢看的部分,好吧,就当学习之后轻松一下. ...
- 聊一聊Redis的数据结构
如果没有记错的话,应该是在两个月前把 我们经常看到此类的文章: Redis的五种数据结构 Redis的数据结构以及对应的使用场景 其实以数据结构这个词去说明Redis的String.Hash.List ...
随机推荐
- 【LOJ】#2037. 「SHOI2015」脑洞治疗仪
题解 维护区间内1的个数,左边数0的长度,右边数0的长度,区间内0区间最长个数,覆盖标记 第一种操作区间覆盖0 第二种操作查询\([l_0,r_0]\)中1的个数,区间覆盖0,然后覆盖时找到相对应的区 ...
- 004 关于Java如何扫描指定package下所有的类
q前言: 在工作中看到这个知识点,就顺便参考了百度的一些资料,整理一下,希望以后用的到. 一:理论部分 1.使用场景 写一个MVC框架,需要从包中扫描出组件并注册到容器中,而JDK没有提供现成的从方法 ...
- 002 Ajax中传输格式为HTML
一: 1.介绍 返回的数据可以直接插入到需要的地方. 2.优缺点 二:程序大纲 1.结构 三:程序 1.css body { background: #ffb url("logo.png&q ...
- 基于Laravel开发博客应用系列 —— 构建博客后台管理系统
一个完整的博客应用不能没有后台管理系统.所以在本节中我们将继续完善博客应用 —— 开发后台管理系统. 1.创建路由 在上一节十分钟创建博客项目中,已经设置过了 app/Http/routes.php, ...
- servlet文件下载实例剖析
package mypack; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; ...
- C#语言-NPOI.dll导入Excel功能的实现
前言:刚工作那会,公司有一套完善的MVC框架体系,每当有导入EXCEL功能要实现的时候,都会借用框架里自带的导入方法,一般三下五除二就完成了,快是快,可总是稀里糊涂的,心里很没有底.前几天,在另一个原 ...
- @react-native-community/async-storage在Android上的手动link问题
PS C:\Users\linjin\Desktop\RN_APP> react-native link @react-native-community/async-storage error ...
- [转]kali中eth0网卡突然消失解决方案
前言 不知道怎么kali的eth0网卡突然消失了.这可有点难受啊.在网上查找了一番找到了解决办法,特此记录. 问题 怎么办? 解决办法 首先使用ifconfig -a命令查看所有的网卡接口 发现 ...
- [ 转载 ] Java Jvm内存介绍
一.基础理论知识 1.java虚拟机的生命周期: Java虚拟机的生命周期 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序.程序开始执行时他才运行,程序结束时他就停止.你在同一台机器上 ...
- HDU 3949 XOR 线性基
http://acm.hdu.edu.cn/showproblem.php?pid=3949 求异或第k小,结论是第k小就是 k二进制的第i位为1就把i位的线性基异或上去. 但是这道题和上一道线性基不 ...