Redis总结(上)
1. 基本数据类型
- string
在 Redis 中字符串类型的 Value 最多可以容纳的数据长度是 512M
操作:
set操作
get操作
setnx(set if not exist)操作
exists 操作
mset 操作(原子性)
setex (set with expire) 设置过期时间
incr、decr、decrby、incrby、range等等
用途:
计数
单一值缓存
- list
操作:
rpush、lpush
lpop、rpop
lrange、llen、lindex、lrem等等
用途:
队列
栈
- set
特性
只能保存 2^32-1 个元素
可以求交集、并集、差集。可以利用此特性完成一些应用上的需求
操作:
sadd操作
smove
smembers people
scard people
srandmember 操作
sdiff 差集
sinter交集
sunion并集
sismember、srem、smembers
用途:
通过交集找到共同好友、共同粉丝、共同关注的人,相似推荐等
抽奖
- zset
特性
set的基础上、每一个元素有一个评分
底层数据结构:跳表
操作:
zadd 添加(可同时添加多个)
zrange ..... (withscore)
zrangebyscore 直接根据分数范围查询,不显示分数
zrem 移除
zcard 操作
用途:
排行榜
- hash
特性
根据key存对象
操作:
hmset、hset添加操作
hget、hmget获取操作
hdel删除
hexists判断是否存在
getall、hlen、hkeys(获取所有key)
用途:
缓存
2. 特殊数据类型
- geohash
存放数据和他的坐标
geo底层的数据结构就是zset!
底层原理:
geohash算法
1、地球纬度区间是 [-90,90], 经度区间是 [-180,180]。 将它展开想象长一个矩形为
2、将平面切割多个子空间,编号然后遍历
对大部分而言,编码相似的距离也相近, 但 Peano 空间填充曲线最大的缺点就是突变性,有些编码相邻但距离却相差很远,比如 0111 与 1000,编码是相邻的,但距离相差很大。Peano 曲线就是一种四叉树线性编码方式
Peano曲线注意点(也就是缺点)
临界点的编码值差异很大
Peano 空间填充曲线,这种曲线会产生突变
类似的还有Hilbert空间填充曲线,并且相较于Peano没有突变。但是代码实现较为复杂。因此大部分geohash选择用Peano曲线
3、通过base32或base36算法将二进制数转成字符串
redis中geohash的实现
操作:
geoadd(可一次性添加多个)
geopos获取经度和维度
geodist计算两点之间的距离
georadius 获取半径元素
zrem指令对元素进行删除(zset指令)
使用注意:
集群环境下经常涉及到集合在节点间进行迁移,单个数据量过大会对集群迁移造成影响。建议Geo数据使用单独的redis,并且不使用集群
- Hyperloglog
类似于只统计个数的set,当数据量特别大,且只需要统计信息时使用;每个HyperLogLog只占用12KB
操作:
pfcount
pfadd
pfmerge
实现原理:每添加一个元素、把该元素生成一个随机整数、并记录低位连续零位的最大长度K,通过K值估算随机数的数量N:N=2^K。然后采取多个算法加权得到比较精确的值
为什么要占用12KB字节。redis的hyperloglog采用16384个桶,也就是2^13,每个桶的 maxbits需要6个位(最大值63),总共最大内存就是2^13 * 6/8 = 12KB
用途:
模糊统计访问人数
- bitmap
Bitmap 位图:数据结构!都是操作二进制位来进行记录,就只有0和1两个状态!!!他的内容其实就是字符串,也就是byte数组,且至少有8位
操作:
setbit
getbit
bitcount
零存整取、零存整取、整存零取
bitcount位图统计指令:统计一定范围内
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
涵盖各大厂考官最爱问知识点,22年最新整理!