Redis笔记
1、Redis数据结构
KEY | VALUE |
字符串(string) | |
列表(list) | |
集合(set) | |
哈希(hash) | |
有序集合(sorted set) |
2、List数据结构
3、hash数据结构
KEY | VALUE | |
stuName | tom | |
stuAge | 20 | |
stuSubject | java |
页面:JSON
{"stuName":"tom","stuAge":"20","stuSubject":"java"}
Java程序:对象
public class Stu {
private String stuName;
private String stuSubject;
private Integer stuAge;
……
}
Map
Map<String,String> map = new HashMap();
map.put("stuName","tom");
……
Redis:HASH
……
※特殊说明:Redis的HASH类型不支持嵌套。
嵌套JSON:{
"stuName":"tom",
"stuAge":"20",
"stuSubject":"java",
"address":{
"country":"China",
"province":"GuangDong",
"city":"shenzhen"
}
}
HASH:
"stuName":"tom"
"stuAge":"20"
"stuSubject":"java"
"address":"{"country":"China","province":"GuangDong","city":"shenzhen"}"
4、zset数据结构
KEY | VALUE | |
胖胖 | 30 | |
妞妞 | 32 | |
二刘 | 58 |
5、持久化
5.1、RDB
每隔一定时间,将内存中的数据保存到硬盘上。
假设5秒保存一次。
- AOF
- 基本工作方式
把每一个修改数据的命令保存到硬盘上。
set num 5
incr num
incrby num 6
- 三种保存策略
- 每一条修改数据的命令都保存到硬盘上
- 每一秒保存一次
- 不保存
- AOF重写
- 当AOF文件体积增加到一定程度后,可以把过程性命令删除。
- 原始命令
set num 5
incr num
incrby num 6
5.2、精简后命令
set num 12
5.3、总体策略
一般来讲,在实际项目运行过程中,放到Redis中的数据,通常都是允许出现细微出入;非常重要不允许出现任何误差的数据不建议放在Redis中。
Redis中保存数据应该尽可能追求更好性能,而不是数据的绝对安全。
6、乐观锁和悲观锁
6.1、悲观锁
在执行某一个操作之前,基于当前场景经常对数据发生修改操作的事实,判断当前操作也有很大可能性会被干扰,所以操作执行前把数据锁定,我在修改时不允许其他操作修改。
6.2、乐观锁
在执行某一个操作之前,基于当前场景很少对数据发生修改操作的事实,判断当前操作也不太可能性会被干扰,所以操作执行前不会把数据锁定,我在修改时万一发生其他操作修改我数据的情况,我就放弃自己本次操作。
Redis采取乐观锁策略,不支持悲观锁。
6.3、读写分离集群
6.4、哨兵模式