Redis提升

redis的发布和订阅

客户端可以订阅多个频道,当订阅的频道有消息发布,就会通知所有订阅该频道的客户端

SUBSCRIBE channel1  //订阅频道

publish channel1 hello  //发布消息

bitsmap 位图

setbit   key   offest  1    //将偏移的位置,置1 

getbit   key   offest        //获取偏移位置对应的值

bitcount  key    //统计置1的数量

bitop    and/or

省内存,适用于存储大量活跃用户


hyperloglog  做基数处理的数据类型

pfadd  key  val1  val2  val3 ...   

pfcount  key   //统计出基数的个数

pfmerge  k3  k1  k2  //合并到k3

Geospatial  经纬度

getadd   key  经度  维度   字段

geopos  key  字段   //查看某字段的经纬度

geodist   key  字段1  字段2   km   //查看两地之间的距离

Redis事务

Redis事务是一个单独的隔离操作∶事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断


Redis事务的主要作用就是串联多个命令防止别的命令插队

事务命令

multi  //开始    exec  //执行    discard  //放弃组队

组队的时候,有任意一个命令出现了报告错误,执行时整个队列都会被取消

如果执行阶段某个命令报告了错误,则只有报错的命令不会被执行,而其他正确命令可以执行

事务冲突解决

悲观锁:任意时刻只有一个人可以操作数据库

乐观锁:读共享,更新数据后,会更改数据库版本号,其他人再次更新时,需要查看数据库版本号是否一致。

watch  key           //监视key

unwatch  key       //取消监视key,exec命令或者discard命令被执行后,就不须要执行unwatch

乐观锁

Redis事务的三大特性

单独的隔离操作
事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断


没有隔离级别的概念
队列中的命令没有提交之前都不会实际被执行,因为事务提交前任何指令都不会被实际执行


不保证原子性
事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚

 

Redis持久化RDB

rdb:在指定的时间间隔内将内存中的数据集快照写入磁盘

Redis 会单独fork 一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换为持久化的文件(dump.rdb)。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效

RDB的缺点是最后一次持久化后的数据可能丢失

优点:

1.适合大规模的数据恢复
2.对数据完整性和一致性要求不高更适合使用
3.节省磁盘空间

4.恢复速度快

缺点: 

1.Fork 的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑
2.虽然 Redis,在 fork 时使用了写时拷贝技术,但是如果数据庞大时还是比较消耗性能
3.在备份周期在一定间隔时间做一次备份,所以如果 Redis意外down 掉的话,就会丢失最后一次快照后的所有修改

redis.conf

当redis无法写入磁盘,直接关闭redis的写操作   stop-writes-on-bgsave-error yes

 存储到磁盘的快照是否压缩  stop-writes-on-bgsave-error yes

 

检查数据完整性  rdbcompression yes 

save秒  写操作次数

20s   >=  3    20秒后,子进程进行持久化



rdb数据备份

 复制dump.rdb 

Redis持久化AOF

以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作

开启AOF

AOF和RDB同时开启,系统默认读取AOF(数据不会丢失)的数据

AOF文件异常

通过/usr/local/bin/redis-check-aof--fix 进行修复

AOF同步频率设置

appendfsync always
始终同步,每次 Redis的写入都会立刻记入日志;性能较差但数据完整性比较好

appendfsync everysec
每秒同步,每秒记入日志一次,如果宕机,本秒的数据可能丢失

appendfsync no
redis不主动进行同步,把同步时机交给操作系统

重写压缩

AOF 采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集

触发机制:设置重写的基准值(>=64M),文件达到基准值的%100时,开始重写

持久化流程

1.客户端的请求写命令会被append追加到AOF 缓冲区内
2.AOF缓冲区根据AOF持久化策略,将写操作同步到磁盘的AOF文件中;
3.AOF文件大小超过重写策略或手动重写时,会对 AOF文件 rewrite重写,压缩AOF文件容量

4.Redis 服务重启时,会重新 load 加载 AOF 文件中的写操作达到数据恢复的目的

优势:

1.备份机制更稳健,丢失数据概率更低
2.可读的日志文本,通过操作AOF稳健,可以处理误操作

劣势:

1.比起RDB占用更多的磁盘空间
2.恢复备份速度要慢
3.每次读写都同步的话,有一定的性能压力
4.存在个别 Bug,造成恢复不能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值