Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis V3.2 数据结构及操作
数据类型
|
主要操作
|
底层实现
|
应用场景
|
Key |
删除 key
设置/移除/查询 key 的生存时间
随机获取一个 key
重命名
key
排序
key
中的元素
|
分布式锁 | |
String |
增加/减小 key 中的数字
同时设置一个或多个
key-value
对
获取一个或多个给定
key
的值
覆写给定
key
所储存的字符串值
获取
key
中字符串的子串
获取
key
中字符串的长度
|
1、Raw(简单动态字符串Simple Dynamic String-SDS)
2、Rint(为了节约内存,Redis会将字符串表示的64位有符号整数编码为整数来进行储存)
|
计数器 |
Hash |
(批量)设置key中的域/值
(批量)获取key中的域/值
(批量)删除key中的域
增加
key
中某个
域
的值
获取key中所有的域/域的数量/值/域值对
|
字典+压缩双链表(Ziplist)
Ziplist压缩Hash键空间,节省内存。
|
|
List |
(批量)将值
插入到列表
(头/尾)
获取列表
的长度
按 下标/区间 获取列表
中
的元素
移除列表中的元素
修剪
列表,只保留指定区间内的元素
按下标设置列表中的元素值
|
1、双链表(LinkedList)
2、压缩双链表(Ziplist)
压缩双链表以连续的内存空间来表示双链表,压缩双链表节省前驱和后驱指针的空间,这在小的List上,压缩效率是非常明显的,非常节省空间。
哈希键、列表键、有序集合键初始化的底层实现皆采用 Ziplist。
|
保留固定数量最新数据(修剪)
构建简单消息队列
|
Set |
(
批量)将元素
插入到集合
获取
集合中元素/元素数量
(移除)获取集合中一个随机的元素
集合间
交/并/差集
|
1、字典
2、
intset 整数有序集合(
为了节约内存,Redis会将64位有符号整数编码为整数来进行储存)
|
数据去重
集合间交/并/差集
|
Sorted Set |
获取有序集中某个元素的 分数值/排名
获取有序集中
分数
值某个区间内的所有元素
/元素数量
增加/减小某个元素的分数值
按 排名/分数/字典序 区间移除有序集
中的元素
有序集交/并集
|
字典+跳跃表(Skiplist) |
排行榜
点赞(
Set
去重)
|
Bitmap |
设置或清除指定偏移量上的位
获取
指定偏移量上的位
获取所有值为 1 的
比特位的数量
多个bitmap进行 与/或/异或/非
|