zoukankan      html  css  js  c++  java
  • redis事务以及发布订阅

    1. 什么是redis的事务?

             redis事务就是一个命令执行的队列,将一系列预定义命令包装成一个整体,就是一个队列。当执行的时候,一次性按照添加顺序依次执行,中间不会被打断或者干扰。

    2. 能干嘛?

             一个队列中,一次性,顺序性,排他性的执行一系列命令

    3. redis事务基本操作
    开启事务:multi     设置事务的开始位置,这个指令开启后,后面所有的指令都会加入事务中
    执行事务: exec     设置事务的结束位置,同时执行事务,与multi成对出现,成对使用
    取消事务:discard  终止当前事务,取消multi后,exec前的所有指令
    
    注意:加入事务的命令并没有立马执行,而且加入队列中,exec命令后才执行
    4. 加入和执行事务有错误会怎么办?

    加入事务语法报错,事务则取消
    执行事务报错,则成功的返回成功,失败的返回失败,不影响报错后面的指令

    注意:已经执行完毕的命令对应的数据不会自动回滚,需要程序员自己实现
    5. 监控key
    watch: 对key进行监控,如果在exec执行前,监控的key发生了变化,终止事务执行
    unwatch: 取消对所有的key进行监控
    
    6. redis发布订阅
    publish: 发布消息   语法:publish channel名称   “消息内存”
    subscribe: 订阅消息  语法:subscribe channel名称
    pubscribe : 使用通配符订阅消息 语法: pubscribe channel*名称
    punsubscribe: 使用通配符退订消息。语法:punsubscribe channel*名称
    unsubscribe : 退订消息 语法:unsubscribe  channel名称
    
    7. 删除策略 (redis使用:惰性删除+定期删除)

    定时删除-->以CPU内存换redis内存
    惰性删除-->以redis内存换CPU内存
    定期删除
    1.redis在启动的时候读取配置文件hz的值,默认为10
    2.每秒执行hz次serverCron()-->databasesCron()--->actveEXpireCyle()
    3.actveEXpireCyle()对每个expires[]进行逐一检测,每次执行250ms/hz
    4.对某个expires[
    ]检测时,随机挑选N个key检查
             如果key超时,删除key
             如果一轮中删除的key的数量>N*25%,循环该过程
             如果一轮中删除的key的数量小于等于N25%,检查下一个expires[ ]
             current_db用于记录actveEXpireCyle()进入哪个expires[ * ] 执行,如果时间到了,那么下次根据current_db继续执行

  • 相关阅读:
    模板--后缀自动机
    十二省NOI“省选”联考模测(第二场)A抽卡大赛
    BZOJ 1800: [Ahoi2009]fly 飞行棋
    BZOJ 1208: [HNOI2004]宠物收养所
    BZOJ 1876: [SDOI2009]SuperGCD
    BZOJ 1013: [JSOI2008]球形空间产生器sphere
    BZOJ 1011: [HNOI2008]遥远的行星
    BZOJ 1010: [HNOI2008]玩具装箱toy
    BZOJ 1008: [HNOI2008]越狱
    BZOJ 1007: [HNOI2008]水平可见直线
  • 原文地址:https://www.cnblogs.com/liulong99/p/12208674.html
Copyright © 2011-2022 走看看