string
redis所有数据的基础,采用预分配进行数据的分配当数据小于1MB时候,成倍扩容,大于1MB每次扩容1倍。最大512MB。
int类型支持计数
list
quicklist的数据结构(ziplist+双向链表)
hash
类似于Java的hashmap,采用数组+链表方式,数据量小采用ziplist。
rehash采用渐进式
set
底层采用一个特殊的字典来维护,字典的值都为NULL
zset
(skiplist or ziplist)+hash
bitmap
setbit key offset value【0 or 1】 set某一位的bit值
getbit key offset 返回当前位的值
bitcount key [start end] 返回start-end值为1的bit的数量。start-end必须是8的倍数
bitpos key [true false] 返回第一个true or false的值。
hyperHyperLog
- pfadd key value 不同的才会加入到列表中
- pfcount key 查看key的值
用于统计网站的uv,大小是12kb,缺点是有误差
bloomfilter
redis4.0以后提供插件支持
- bf.add
- bf.exists
重复并且存在误判。
Reids的限流–redis-cell
redis4.0后提供的限流模块
cl.throttle key capacity opsQuota opssec quota-pre-action
返回值
0 or 1 –结果0允许,1不允许
capacity–漏斗容量
left_quota–剩余容量
next_gen_quota_sec–下一次产生多少令牌的事件
maxQuotaSec–令牌桶满,下一次capacity=left_quota的时间 单位:秒
Redis的位置服务-GeoHash
原理是,将地球变为一个平面,划分成一系列方格每个方格有一个唯一编号,方格越近编号越近,将坐标的经纬度映射为一维坐标,放在唯一的方格中,只需要查看俩个方格的距离即可。
坐标会变成一串整数编码越长越精确,这些整数编码能还原成坐标。getHash会对这个整数做一次base32。
redis的坐标编码是52位,且底层采用zset。value是key,score是哪个52位的编码,我们查询附近的坐标只需要按照score查询即可
命令
- geoadd key 精度 纬度 value 添加
- geodist key value1 value2 单位 查询value1和value2的距离
- geoops key value 获取value的坐标
- geohash key value 获取hash值可以计算出经纬度
- georediusbymember key value 20 km [withcoord withdist withhash] count 3 asc 查找value半径20km的其他坐标【包括自己】 按照距离升序排列
- georedius key value x y 20 km [withcoord withdist withhash] count 3 asc 查找坐标点【x、y】半径20km的其他坐标【包括自己】 按照距离升序排列