Redis的基础类型(四)

其他数据结构

BitMaps

Bitmaps 是在字符串类型上面定义的位操作。一个字节由8个二进制位组成。

set k1 a

获取value在offset处的值(a对应的ASCII码是97,转换为二进制数据是01100001)

getbit k1 0

修改二进制数据

setbit k1 6 1
setbit k1 7 0
get k1

QA:怎么变成b了?(b对应的ASCII码是98,转换为二进制数据是01100010)

//统计二进制位中1的个数
bitcount k1
//获取第一个1或者0的位置
bitpos k1 1
bitpos k1 0

因为bit非常节省空间(1MB = 8388608 bit),可以用来做大数据量的统计。
例如:在线用户统计,留存用户统计

setbit onlineusers 0 1 
setbit onlineusers 1 1
setbit onlineusers 2 0

支持按位与、按位或等等操作。

BITOP AND destkey key [key ...], 对一个或多个key求逻辑并,并将结果报错到destkey。
BITOP OR destkey key [key ...], 对一个或多个key求逻辑或,并将结果报错到destkey。
BITOP XOR destkey key [key ...], 对一个或多个key求逻辑异或,并将结果报错到destkey。
BITOP NOT destkey key , 对给定key求逻辑非,并将结果报错到destkey。

应用场景:
用户访问统计
在线用户统计

Hyperloglogs

  Hyperloglogs : 提供了一种不太精确的基数统计法,用来统计一个集中不重复的元素个数,比如统计网站的UV,或者应用的日活、月活,存在一定的误差。

在Redis中实现的HyperLogLog,只需要12k内存就能统计2^64个数据。

Geo

需求:获取半径1公里以内的门店,那么我们就要把门店的经纬度保存起来。那么这时候我们是直接把经纬度保存在数据库中,一个字段存经度,一个字段存纬度。计算距离比较复杂。Redis的GEO直接提供了这个方法、

geoadd location 11.3333 232.31313 xxx
geopos location xxx

操作:增加地址位置信息、获取地址位置信息、计算两个位置的距离、获取指定范围内的地理位置集合。

Streams

5.0推出的数据类型。支持多播的可持久化的消息队列,用于实现发布订阅功能,借鉴kafka的设计。

总结

数据结构总结

对象 对象type属性值 type命令输出 底层可能的存储结构 object encoding
字符串对象 OBJ_STRING "string" OBJ_ENCODING_INT
OBJ_ENCODING_EMBSTR
OBJ_ENCODING_RAW
int
embstr
raw
列表对象 OBJ_LIST "list" OBJ_ENCODING_QUICKLIST quicklist
哈希对象 OBJ_HASH "hash" OBJ_ENCODING_ZIPLIST
OBJ_ENCODING_HT
ziplist
hashtable
集合对象 OBJ_SET "set" OBJ_ENCODING_INTSET
OBJ_ENCODING_HT
intset
hashtable
有序集合对象 OBJ_ZSET "zset" OBJ_ENCODING_ZIPLIST
OBJ_ENCODING_SKIPLIST
ziplist
skiplist+hashtable

编码转换总结

对象 原始编码 升级编码
字符串对象 INT
整数并且小于long 2^63-1
embstr
超过44字节,被修改
raw
哈希对象 ziplist
键和值的长度小于64byte,键值对个数不超过512个,同时满足
hashtable
列表对象 quicklist
集合对象 intset
元素都是整数类型,元素个数小于512个,同时满足
hashtable
有序集合对象 ziplist
元素数量不超过128个,任何一个member的长度小于64字节,同时满足
skiplist

应用场景总结

缓存 -- 提升热点数据的访问速度
共享数据 -- 数据的存储和共享的问题
全局ID -- 分布式全局ID 的生成方案(分库分表)
分布式锁 -- 进程间共享数据的原子操作保证
在线用户统计和计数
队列、栈 -- 跨进程的队列、栈
消息队列 -- 异步解耦的消息机制
服务注册与发现 -- RPC通信机制的服务协调中心(Dubbo支持Redis)
购物车
新浪、Twitter 用户消息时间线
抽奖
点赞、签到、打卡
商品标签
用户关注模型
电商产品筛选
排行榜

原文地址:https://www.cnblogs.com/snail-gao/p/14304091.html