Redis常用数据结构
Redis 常用数据结构
1、总体结构
KEY | VALUE |
---|---|
string | string |
string | list |
string | set |
string | hash |
string | zset |
Redis 中的数据,总体上是键值对,不同数据类型指的是键值对中值的类型。
2、string 类型
Redis 中最基本的类型,它是 key 对应的一个单一值。二进制安全,不必担心由于编码等问题导致二进制数据变化。所以 redis 的 string 可以包含任何数据,比如 jpg 图片或者序列化的对象。Redis 中一个字符串值的最大容量是 512M。
3、list 类型
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。它的底层是双向链表,所以它操作时头尾效率高,中间效率低(额外花费查找插入位置的时间)。
在 Redis 中 list 类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis 将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List 中可以包含的最大元素数量是 2^32-1 个。
list 是一个有序可以重复的数据类型。
4、set 类型
Redis 的 set 是 string 类型的无序集合。它是基于哈希表实现的。set 类型插入数据时会自动去重。最大可以包含 2^32-1 个元素。
5、hash 类型
Redis 本身就是一个键值对集合,而 hash 类型的 Value 也是一个键值对集合,可以将 Value 当做 Java 中的 Map<String,String>对待。
6、zset 类型
Redis zset 和 set 一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。zset 的成员是唯一的,但分数(score)却可以重复。
7、Geospatial
Redis 在 3.2 推出 Geo 类型,该功能可以推算出地理位置信息,两地之间的距离。
8、HyperLogLogs
用于大数据量基数统计,速度非常快,占用内存非常小。每个 HyperLogLog 键只需要花费 12KB 内存,就可以计算接近 2^64 个不同元素的基数。比如计算网站 UV(User view,用户访问数量,一个用户一天访问同一个 URL 地址多次合并为一次)。
9、bitmap
直接对 string 的二进制位进行操作的一组命令。
统计数据特别块,举个例子,用 bitmap 统计在线人数,准备一个全部为 0 的字符串,有一个在线就将一个 0 改为 1。
10、常用数据类型应用场景
数据类型 | 应用场景 |
---|---|
string | 分布式 Session 存储 分布式数据库 ID 计数器:统计网站访问量 |
hash | 存储对象信息(购物车中的商品信息) 存储表的信息 |
list | 实现队列、栈操作 汇总日志 粉丝列表 关注的人列表 |
set | 签到 打卡 点赞 |
zset | 排行榜 百度热点搜索 |
geospatial | 获取地理位置信息 两地之间的距离 |
hyperloglogs | 基数统计 |
bitmaps | 统计用户访问次数 |