Redis相关知识点总结

数据结构

String

方法:set、get、del、incr、decr

> set str adb
OK
> get str
adb
> del str
1
> get str
null
> set str 2
OK
> incr str
3
> get str
3
> decr str
2

场景:
1.缓存
2.计数器
3.session

Hash

即键值对结构。
方法:hset、hget、hdel、hgetall

> hset abc ddd toryxu
0
> hset abc fff toryxu
1
> hget abc fff
toryxu
> hdel abc fff
1
> hgetall abc
ddd
toryxu
> hset abc aaa toryxu
1
> hgetall abc
ddd
toryxu
aaa
toryxu

场景:
1.缓存

List

双端链表。
lpush+lpop = 栈,先进先出
lpush+rpop = 队列,先进后出
lpush+ltrim = 有限集合
ltrim:下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
lpush+brpop = 消息队列
brpop:获取并移除右边最后一个元素。

> rpush list1 a
2
> rpush list1 b
3
> brpop list1 0(0是timeout超时等待时间)
list1
b
> llen list1
2
> ltrim list1 1 -1
OK
> llen list1
1

Set

无序、不重复的集合。
方法:
sadd、srem、scard(获得集合数量)、smembers(展示集合元素)、sismember(判断是否存在于集合,是返回1,否返回0)

> sadd test 1 2 3 4
0
> srem test 1
1
> smembers test
2
3
4
> sismember test 3
1
> scard test
3

场站:
1.收藏、点赞
2.给用户打标签

ZSet

有序、不重复的集合,给每个元素设置一个分数
方法:
zadd、zrange、zscore

> zadd ztest 100 abc 90 bcd
2
> zrange ztest 0 1
bcd
abc
> zrange ztest 0 1 withscore
ERR syntax error
> zrange ztest 0 1 withscores
bcd
90
abc
100
> zscore ztest abc
100
> zrevrange ztest 0 1 withscores
abc
100
bcd
90

场景:
1.排行榜

Redis持久化方式

RDB

生成快照
save 900 1 (每900s有一个写入,则备份,可以多个设置组合使用)

优点:
子进程生成快照,恢复速度快。
缺点:
保存频率不够快,服务器故障可能导致数据丢失。

AOF

记录所有写操作,在服务重启的时候再执行一遍。
fsync配置将写操作存储到磁盘的周期:

always: 每个事件周期都同步刷新一次
everysec: 每一秒都同步刷新一次
no: 我只管写,让操作系统自己决定什么时候真正写入吧

优点:
就算出现服务器故障,也不会丢失太多数据。
缺点:
AOF文件更大,性能占用更高。

Redis为什么这么快

1.基于内存实现
数据都是存在内存,只有持久化的时候存到磁盘。

2.单线程执行避免上下文切换

3.高效的数据结构

List:
双端链表,头尾指针,并且在头指针上存储len。
Hash:
hash本身。
zSet:
跳表,链表的基础上增加多级索引。

4.合理的数据编码

String:存储数字的话,采用int类型的编码,如果是非数字的话,采用 raw 编码;

List:字符串长度及元素个数小于一定范围使用 ziplist 编码,任意条件不满足,则转化为 linkedlist 编码;

Hash:hash 对象保存的键值对内的键和值字符串长度小于一定值及键值对;

Set:保存元素为整数及元素个数小于一定范围使用 intset 编码,任意条件不满足,则使用 hashtable 编码;

Zset:zset 对象中保存的元素个数小于及成员长度小于一定值使用 ziplist 编码,任意条件不满足,则使用 skiplist 编码。

Redis集群

待完善。

你可能感兴趣的:(技术,redis)