一、String
1.1数据结构:简单动态字符串(SDS)
1.2局限:最大值不能超过512M
1.3命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| # 浮点数 incrbyfloat key increment incrbyfloat zyk 0.1
# 字符串追加 append key value
#获取值后删除 getdel key
# 获取相似字符串,字符串不用相邻(redis 7.0) MSET key1 ohmytext key2 mynewtext LCS key1 key2 # 结果 mytext
# 全部key不存在才会设置成功 msetex key value key2 value
# value 字符串截取 start end 都包括 getrange key start end
#获取上次值并设置为新值 getset key value
#字符串替换,offset如果超过用空字符代替 setrange key offset value "hello\x00\x00\x00\x00\x00world"
|
JSON
以二进制存储在树结构中,支持快速访问
Hash
set
常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #添加命令,可以添加多个成员 sadd key number1 number2
#查看key多少成员 scard key
# 获取key 和 其他key 不同元素 # 交集、并集也有类似命令 key1 = a,b,c,d; key2 = a,e; key3 = a,d; sdiff key1 key2 key3 => "b" "c"
# 获取key和其他key不同元素,并且把结果保存在新的zset # 交集、并集也有类似命令 sdiffsctore newKey key1 key2
# key 和 其他key交集 key1 = a,b,c,d key2 = c key3 = a,c sinter key1 key2 key3 => c
# 是否set中元素 sismember key member
# 获取所有成员 smembers key
|
zset
4.1 底层数据结构
链表和跳跃表,如果元素大于128或者大小大于64字节就采用跳跃表
跳跃表采用多级索引实现
4.2 实现排行榜
按照票数和时间方案
使用票数.时间戳保存方案 比如 10.1747798719960 ,10代表10票,小数点后面代表最后投票时间
list
blmove 一个列表元素移到另一个列表阻塞移动
blmove source destination left|right left|right timeout
geo
底层数据结构zset,geo未提供删除命令,可以用zrem删除
7、统计UV
Hyperloglog
pfadd key member 添加元素 会自动去重
pfcount key 统计uv
MySQL索引失效
1、不符合最左匹配原则
2、辨识度太低,比如男女
3、类型错误,比如varchar类型 但是where条件是 name = 1
4、使用了 or
5、in 如果值少了话会走,多的话不会走,
6、列运算 比如 age + 1 = 12 不会走索引,age = 12 -1 走索引
7、使用函数
8、使用is not null ,is null 会走索引
限流算法
1、固定窗口限流,每个窗口再一定时间请求量固定,如果超过就丢弃
问题 如果限流1000,如果再100ms到达一千,后面请求丢弃,服务异常时间太长,可能会两倍突发流量
2、滑动窗口,将窗口划分为几个小窗口,按照一定时间往前移,如果超过时间,其他请求丢弃
3、令牌
4、漏斗
__END__