Redis 进阶使用(一)

 

一、piple 的使用

http://redis.cn/topics/pipelining.html

  • 管道主要作用就是一次发送多个命令,减少了命令的通信成本

  • redis 启动是冷启动的,有些场景需要,进行一些数据的初始化,这个时候,可以间接用到piple 

 参考  Redis从文件中批量插入数据  或  Redis 大量数据插入 

二、发布和订阅 

       http://redis.cn/topics/pubsub.html

help @pubsub

 PSUBSCRIBE pattern [pattern ...]
  summary: Listen for messages published to channels matching the given patterns
  since: 2.0.0

  PUBLISH channel message
  summary: Post a message to a channel
  since: 2.0.0

6379  客户端发布渠道ooxx,信息hello ,后边新开对的客户端是不能收到的,只有订阅之后才能实时收到 

  PUBSUB subcommand [argument [argument ...]]
  summary: Inspect the state of the Pub/Sub subsystem
  since: 2.8.0

  PUNSUBSCRIBE [pattern [pattern ...]]
  summary: Stop listening for messages posted to channels matching the given patterns
  since: 2.0.0

  SUBSCRIBE channel [channel ...]
  summary: Listen for messages published to the given channels
  since: 2.0.0

  UNSUBSCRIBE [channel [channel ...]]
  summary: Stop listening for messages posted to the given channels
  since: 2.0.0

使用场景:聊天记录,需要查看历史记录,包括3天之内,以及更远的记录;

实际应用中,更远的记录一般在数据库里进行全量持久化;redis 作为缓存,可以缓存一定期限内的,比如3天,则可以用sorted_set进行一定期限内消息的维护(一些只取部分满足需求的命令);

也可以像上图一样,进行职责的拆分,当多个客户端的时候,采用多个redis 服务,每个服务的职责不一样,持久化,以及缓存分开来做;

三、事务

http://redis.cn/topics/transactions.html

       redis 不支持回滚;

 

上图表示: 由于redis 是单线程的,那么多个客户端同时间隔有多个命令的时候,对于最后先执行的,是触发事务执行的命令exec 先到的客户端,所以上图虽然1先发了其它的命令,但是晚于2发出执行命令exec ,那么,只能是2先执行,再执行客户端1中建立的事务;

添加watch 是为了监控某些条件,假如客户端1的事物是要在k1 = 3的时候执行,那么增加watch 之后,会进行比对,当需要执行时发现k1 有变动,那么client1 的事务就不会执行,就会根据这个做相应的反应,比如抛错等等;

help @transactions

  DISCARD -
  summary: Discard all commands issued after MULTI
  since: 2.0.0

  EXEC -
  summary: Execute all commands issued after MULTI,执行MULTI之间的事务命令的标志
  since: 1.2.0

  MULTI -
  summary: Mark the start of a transaction block,开启事务标志,后续就可以写多个要执行的命令,包括在这个事务中
  since: 1.2.0

  UNWATCH -
  summary: Forget about all watched keys
  since: 2.2.0

  WATCH key [key ...]
  summary: Watch the given keys to determine execution of the MULTI/EXEC block
  since: 2.2.0

四、布隆过滤器(解决缓存穿透的问题)

https://github.com/RedisBloom/RedisBloom

右下角为安装过程,

如果缓存穿透了,但是数据库咩有值,则需要增加key 相对应的value防止报错;

五  、Redis当做使用LRU算法的缓存来使用

http://redis.cn/topics/lru-cache.html

  • LRU是Redis唯一支持的回收方法。本页面包括一些常规话题,Redis的maxmemory指令用于将可用内存限制成一个固定大小,还包括了Redis使用的LRU算法,这个实际上只是近似的LRU。
  • maxmemory配置指令用于配置Redis存储数据时指定限制的内存大小。通过redis.conf可以设置该指令,或者之后使用CONFIG SET命令来进行运行时配置;

过期相关 http://redis.cn/commands/expire.html 

六、数据的持久化RDB

  • LINUX 中的管道

  • 父进程与子进程,进程间是数据隔离的;父进程可以让子进程看到自己的变量用export,但是不能被修改;

  • 创建子进程,fork();linux 调用fork 进行 copy on write机制(写的时候进行一个新的地址进行修改,例如 下图其中一个redis 跟更改a3 时,会在9w 那里进行修改) ;

  • 持久化RDB

       http://redis.cn/topics/persistence.html

  • 持久化AOF

记到文件中的是命令,*代表后边几个变量,$代表的是变量有几个字节,后边接变量,或者指令;

dump.rdb 文件 为二进制,几乎看不懂,但是命令 redis-check-rdb 可以帮助检查;

bgrewriteaof   指令,可以将无用的命令记录剔除掉,保留最新的状态;这是老版本4.0之前把融合关掉(在相应端口比如6379.conf 中配置aof-use-rdb-preamble   no 来实现),没有开启混合RDB的情况;

开启了RDB混合之后(在相应端口比如6379.conf 中配置aof-use-rdb-preamble   no 来实现),,红框圈的是bgrewriteaof 命令后得到的结果,当继续有新的命令,则会以命令的形式追加进去;

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值