简介
本文介绍Redis的所有数据类型,包括:含义、应用场景、最大存储量。
string(字符串)
简介
字符串类型是redis最基础的数据结构,其他几种结构都是在字符串类型基础上构建的。String数据结构是简单的key-value类型,key是String,value不仅可以是String,也可以是数字。
使用场景
- 缓存功能
- 对于比较费时的、访问比较频繁的查询接口,可以将数据缓存到Redis
- 计数器
- 视频播放次数。
- 全局ID
- 共享session
- 实现分布式session。
- 限速
- 限制用户访问接口次数。
- 限制短信等需要付费的接口的频率:比如通过短信验证码登录。
hash(哈希)
简介
Hash是一个String类型的field和value之间的映射表,即Redis的hash数据类型key(hash表名称)对应的value实际的内部存储结构为一个HashMap。
使用场景
用一个对象来存储用户信息,商品信息,订单信息等等。
key=JavaUser293847 value={ "id": 1, "name": "SnailClimb", "age": 22, "location": "Wuhan, Hubei" }
list(列表)
简介
list 就是链表,Redis list 的实现为一个双向链表。可以对列表两端插入(pubsh)和弹出(pop),还可以获取指定范围的元素 列表、获取指定索引下表的元素等,列表是一种比较灵活的数据结构,它可以充当栈和队列的角色,
key=sss value={ hah, sonw, wek}
使用场景
- 用户的url权限
- 将一个用户拥有的所有url权限存到Redis。
- 缓存请求的数据支持高并发
- 对于并发量高的接口,可以先将数据缓存到Redis(List结构),后期可以通过定时任务之类的进行异步处理与落库
- 组合成其他数据结构
- lpush+lpop=Stack(栈)
- lpush+rpop=Queue(队列)
- lpush+ltrim=Capped Collection(有限集合)
- lpush+brpop=Message Queue(消息阻塞队列)
set(集合)
简介
- 与列表类似,不同的是集合中不允许有重复的元素。
- Set内部用HashMap实的,只用了HashMap的key列来存储对象。
- Set中的元素是无序的,不能通过索引下标获取元素。
- Set支持集合内的增删改查,同时还支持多个集合取交集、并集、差集。
- Set是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
- Set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。
使用场景
- sadd=tagging(标签)
- 标签(tag):如一个用户对娱乐、体育感兴趣,另一个对新闻感兴趣,这些兴趣就是标签,可获得共同爱好(取交集)的标签(用户和标签的关系维护应该放在一个事物内执行,防止部分命令失败造成数据不一致)
- spop/srandmember=random item(生成随机数,比如抽奖)
- sadd+sinter=social Graph(社交需求)
- sinterstore key1 key2 key3 (求交集,将交集存在key1内)
zset(有序集合)
简介
zset是sorted set的缩写,和Set相比,zset增加了一个权重参数score,使得集合中的元素能够按score进行有序排列。这个参数在添加/修改元素时可以指定,每次指定后,SortSet会自动重新按新的值来排序。
使用场景
适用于需要排序的场景,例如: 排行榜(按照时间、按照播放量、按照获得的赞数等排序)
bitmap (位图)
简介
很节约内存的一种数据类型。
使用场景
高效地统计大量数据(例如亿级)。例如:
- 给一个 userId ,判断用户登陆状态;
- 显示用户某个月的签到次数和首次签到时间;
- 两亿用户最近 7 天的签到情况,统计 7 天内连续签到的用户总数;
数据类型最大存储量
官网网址
https://redis.io/topics/data-types
概述
Strings类型:一个String类型的value最大可以存储512M
Lists类型:list的元素个数最多为2^32-1个,也就是4294967295个。
Sets类型:元素个数最多为2^32-1个,也就是4294967295个。
Hashes类型:键值对个数最多为2^32-1个,也就是4294967295个。
Zset类型:跟Sets类型相似。
请先
!