redis小本本(一)

一、超时时间:

  1. 对一个已经设定了超时时间的key,进行任何更改键值对的操作,都不会影响超时时间。
  2. 如果给一个key超时时间设定为非正数,或者过去的一个时间,这个key直接被删除。
  3. 如果对一个已经有设定过超时时间的key重新设定超时时间,可以将原超时时间覆盖
  4. 使用persist命令可以将expires命令产生的超时时间移除
  5. 即使redis实例没有开启,expire时间也会继续走
  6. redis的expires如何实现的呢?
    -被动删除,在每次被访问之前检查这个key的超时时间
    -主动删除,分为以下三步,每秒进行10次:
    (1)尝试去看20个随机的有超时时间的key是否超时
    (2)将所有检查到超时的key删除
    (3)如果超过25%的key都超时了,重复进行步骤一

二、事务:

  1. 事务是原子性的,要么所有的命令都执行,要么所有的命令都不执行
  2. 事务的执行有以下三个顺序:(1)事务开始,(2)命令入队,(3)执行命令
  3. 使用MULTI,EXEC,DISCARD进行事务的使用
    -使用MULTI开启事务,对于这个命令下得所有的命令,都会进入到队列中
    -使用EXEC命令将队列中的所有命令一并执行,结果会以一个列表的形式出现,每一个列表项就是队列中每条指令的执行返回结果
    -使用DISCARD可以清空事务队列并关闭事务。
    -使用WATCH命令,可以对某个键值进行监控,如果在本客户端对此键进行访问的过程中,有其他客户端对此键进行更改,则本客户端不执行操作,返回失败
  4. 事务在将命令入队的时候,如果有任何一条命令出现错误,会自动的结束事务
  5. WATCH命令的执行原理:当对键值进行监控时,生成一个列表,列表的值为所有被监控的key,对于每个key,再挂着一个链表,这个链表中的内容为所有监控当前key的客户端。如果当这个key的值被更改了,则遍历监控这个key的客户端列表,将每个客户端的REDIS_DIRTY_CAS标志位置位,等到客户端来访问这个key的时候,发现REDIS_DIRTY_CAS标志位被置位,则命令执行失败

三、批量操作

  1. 如果想要使用redis进行大量的数据插入操作,一条条的插入太浪费时间,因为每插入一条都要等待server端的回复
  2. redis-cli提供了一种可以进行快速的批量操作的方式,将多个操作写在文件中,让redis-cli去操作这个文件
    -例如:对于文件data.txt中写入内容:
    SET KEY0 VALUE0
    SET KEY1 VALUE1
    SET KEY2 VALUE2
    SET KEY3 VALUE3
    SET KEY4 VALUE4 ...

    -然后在启动redis客户端时,使用命令 cat data.txt | redis-cli--pipe
    -就可以将data.txt文件中的命令全部执行到redis中,而且非常快速
  3. 批量操作的实现原理
    -将文件中的命令传给客户端
    -客户端获取命令的同时解析语句
    -当所有命令传输结束的时候,客户端向服务端发送一个随机的20比特的字符串
    -当最后一个命令发送完毕,客户端就开始将服务端返回的结果与这个20比特的字符串相匹配,如果匹配成功,代表此客户端发送的所有命令执行成功
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值