思维草图
String类型
字符串类型,是redis中最简单的存储类型,可以包含任何数据,例如jpg图片或者序列化的对象等,底层都是以字节数组形式存储,最大能存储512MB的数据。
常用命令
KEY命名规范
加前缀,分层次分模块构建,更方便管理
项目名:业务名:类型:id
如定义
project:user:1
project:equipment:1
根据具体项目规范来定义key值。
如果value是一个Java对象,可以先将对象序列化成Json再存入,这样后面取出来操作也非常方便。
Hash类型
String类型是将对象序列化成JSON字符串后进行存储,当需要进行修改对象中的某个字段时非常不方便。
Hash类型可以将对象中的每个字段独立存储,可以针对单个字段进行CRUD操作,非常适合用来存储对象。
KEY | VALUE | |
field | value | |
user:12138 | id | 12138 |
name | 路明非 | |
age | 18 |
常用命令
List类型
一个双向链表结构。
特征
- 有序
- 元素可以重复
- 插入和删除快
- 查询速度一般
常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表,系统的实时信息变化(网络、内存、cpu)
常用命令
Set类型
可以看做是一个value为null的HashMap。
特征
- 无序
- 元素不可重复
- 查找快
- 支持交集、并集、差集等功能
常用命令
ZSet类型
可排序的set集合,ZSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。
特征
- 可排序
- 元素不可重复
- 查询速度快
因为SortedSet的可排序特性(从小到大排序 ),经常被用来实现排行榜这样的功能。
常用命令
所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可,例如:
升序获取sorted set 中的指定元素的排名: ZRANK key member
降序获取sorted set 中的指定元素的排名: ZREVRANK key memeber
HyperLogLogs基数统计
A = {1, 2, 3, 4, 5}
B = {3, 5, 6, 7, 9}
那么基数(不重复的元素)= {1, 2, 4, 6, 7, 9}
允许容错,即可以接受一定误差,可以是一个带有 0.81% 标准错误的近似值
Bitmap位存储
操作二进制位来进行记录,只有0和1两个状态。
可以用来统计用户登录、未登录,打开、未打卡。两个状态的,都可以使用Bitmap。
比如存储一年的打卡状态需要的内存,365天=365bit,1字节 = 8bit,大概需要 46个字节左右。
如使用bitmap来记录 周一到周日的打卡 0表示未打卡,1表示打卡
查看某一天是否有打卡
统计这一周的打卡情况
geospatial地理位置
这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人。
地理位置查询网址
传送门http://www.jsons.cn/lngcode/
添加地址的经纬度
注意
- 有效的经度从-180度到180度。
- 有效的纬度从-85.05112878度到85.05112878度。
当坐标位置超出上述指定范围时,该命令将会返回错误。
获取指定的成员的精度和纬度
计算两地之间的距离
获取附近以(100, 30)这个坐标为中心,寻找半径为10000km的城市