一、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__