十大数据类型
学习
redis 操作手册
英文
中文
Redis命令中心(Redis commands) – Redis中国用户组(CRUG)
学习方法
举出一个数据结构的应用场景(理解数据结构特点),并操作(练习api)
键值的操作命令
scan 如何使用
命令不区分大小写,key 区分大小写
帮助,help @类型
string
最大长度 512MB
下面是具体讲解相当于字符串截取
节点在操作锁资源的时候,setnx lock uuid,操作完毕 del lock
list
双端链表实现
lpush list1 0 1 2 3 4 5
lrange list1 0 -1 -> 5 4 3 2 1 0 注意这个顺序关系
lrem 删除n个值为xx的元素
rpoplpush
lset 把指定索引的值更新为新值
应用场景-》某个用户关注的所有up
队列,先进先出,很方便的做分页查询
hash
哈希表实现
应用场景:购物车
key->购物车前缀+用户id value->商品id:数量
# 增加商品
# 用户id: uid001 分别添加 商品id 10025 10065 的两件商品
hset cart:uid001 10025 1
hset cart:uid001 10065 1
# 全选功能
HGETALL cart:uid001
#1) "10025"
#2) "1"
#3) "10065"
#4) "1"
# 查看商品数量
hlen cart:uid001
# 增加(减少hdecrby)商品
hincrby cart:uid001 10025 1
# 删除某个商品
hdel cart:uid001 10065
set
哈希表实现,支持快速查找和去重
社交关系求并集和差集
zset
有元素权重的 set,跳表实现,快速的范围查询,排行榜
bitmap
存储的数据结构
统计占有字节数,strlen 是八位一扩容,联想 java 集合底层实现
bitcount 全部键里面含有1的有多少个
- 为什么这里要使用一个映射表:
有一个自增id,节省空间,bitmap 索引是从1开始的
- 这里的 bitop 你能说说自己的理解吗
可以理解为两个bit串对应位做与操作
另外一个统计签到的案例
这里的key使用的是用户id,然后偏移量表示天数,value和之前一致,便于统计某个用户累计签到(与之前统计系统某一段时间用户签到量做对比)
估算内存占用
HyperLogLog
一种只需要占用很小的内存就能计算很多元素集合的基数的数据结构
- 统计某个网页的UV、某个文章的UV
- UV Unique Visitor 独立访客,一般理解为客户端IP,需要去重
- 用户搜索网站关键词数量
- 统计用户每天搜索不同词条个数
统计 uv 实现
GEO
底层是 zset
两个距离之间的距离
处理乱码,使用 redis-cli --raw 连接
Stream
注意这里的消息id是递增的
bitfield
没啥人用略过