1.Redis五种数据类型在不同项目中的应用
数据类型 | 使用场景 |
---|---|
String | 比如说,我想知道什么时候封锁一个 IP 地址 Incrby 命令 |
Hash | 存储用户信息[ id, name , age] Hset( key ,field, value) Hset( key ,id, 101) Hset( key ,name, admin) Hset( key ,age, 23) 修改案例--------- Hget(userKev,jd)+ Hset(userKey,id,102) 为什么不使用String类型来存储 String拿到对象值之后需要反序列化,我们只需要更改id name, age 没有意义反序列化 Set(userKey;用信息的字符串) Get(userKey) 不建议使用String 类型。 |
List | 实现最新消息的排行,还可以利用 List 的 push 命令,将任务存在list集合 中,同时使用另-个命令,将任务从集合中取出[ pop ]。。 Redis - List 数据类型来模拟消息队列。[电商中的秒杀就可以采用这种方式 来完成一个秒杀活动]。 |
Set | 特殊之处:可以自动排重。比如说微博中将每个人的好友存在集合( Set) 中,+ 这样求两个人的共通好友的操作。我们只需要求交集即可。 |
Zset | 以某一个条件为权重,进行排序。 京东:商品详情的时候,都会有一个综合排名,还可以按照价格进行排名 |
2.不同形式的持久化方式
2. 1.RDB
在指定的时间间隔内将内存的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。
2.1.1备份执行过程
Redis会单独创建(fork) -个子进程来进行持久化,将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何I0操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。
2. 1.2文件地址
rdb的保存文件,在redis.conf中配置文件名称,默认为dump.rdb
rdb的文件保存路径也可以修改,默认为Redis启动命令行所在的目录下。
2. 1.3rdb的优缺点
优点:
- 节省磁盘空间
- 恢复速度快
缺点: - 虽然Redis在fork时使用了写时拷贝技术,但是如果数据过于庞大还是比较消耗性能。
- 在备份周期在一定间隔时间做一次备份,所以如果Redis以外down机,就会失去最后一次快照后面的修改
2. 2AOF
以日志的形式记录每个写操作,将Redis执行过程中所有的写指令记录下来,读操作不记录,只许追加文件但是不可以修改文件,Redis启动之初会读取该文件重新构建数据。换而言之就是Redis重启后就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
2.2.1Rewrite
AOF使用文件追加方式,文件会越来越大为了避免出现这种情况,新增了重写机制,当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。可以使用命令bgrewriteaof。
2.2.2Redis如何实现重写
AOF文件持续增长过大时,会fork出一条进程将文件写(也是先写临时文件最后在rename),遍历新进程的内存中数据。写aof文件的操作方式,并没有读取旧的aof文件,而是将整个内存的数据库内容用命令的方式写了一个新的aof文件,这个和快照有点类似。
2. 2.3何时重写
写虽然可以节约大量的磁盘空间,减少恢复时间。但是每次重写还是有一定的负担的,因此可以设定Redis要满足一定的条件才可以进行重写。
2. 2.4AOF优点与缺点
优点
- 备份机制更加稳健,丢失数据的概率更低。
- 可读的日志文本,通过操作AOF稳健,可以处理误操作。
缺点:
- 比起ROF占用更多的磁盘空间
- 恢复备份要慢很多
- 每次读写都同步的话,有一定的性能压力。
- 存在个别bug,造成无法恢复