zoukankan      html  css  js  c++  java
  • 3. redis的超时,事务,watch

    一. 键的生存时间

    1. expire设置一个已经存在的key的生存时间,到时间后redis自动删除这个<k,v>
    2. 命令
    1. expire 设置生存时间(单位/秒)
    2. pexpire设置生存时间(单位/毫秒)
    3. ttl/pttl 查看键的剩余生存时间
    4. persist 取消生存时间
    5. expireat [key] unix时间戳1351858600
    6. pexpireat [key] unix时间戳(毫秒)1351858700000
    [注]:应用场景:  
         (1)限时优惠活动
         (2)网站数据缓存,一定时间后更新数据
         (3)限制网站访客频率 (eg:每分钟最多访问10次)
    

    二. redis事务

    1. 事务控制原理 :
      当事务开启后, 一条redis操作语句不会立刻执行,而是先缓存起来, 等到事务内的语句全部缓存后, 再一起执行
      事务控制,使得一组操作不被其他线程的操作插入, 并且保持所有语句全部执行或全部不执行
    2. 操作
      multi 事务开始
      exec 事务结束,开始执行事务中的命令
      discard 放弃事务
    127.0.0.1:6379> multi   #开启事务
    OK
    127.0.0.1:6379> set aaa 1
    QUEUED
    127.0.0.1:6379> lpush aaa 4
    QUEUED
    127.0.0.1:6379> get aaa
    QUEUED
    127.0.0.1:6379> exec  #执行事务,结果如下
    1) OK
    2) (error) WRONGTYPE Operation against a key holding the wrong kind of value
    3) "1"   # 上一条操作失败,但这一条操作成功
    
     [注] : redis在缓存命令时, 会检查命令的语法是否正确(编译时异常),发现编译时异常,redis的事务会让这一组操作全部失败
      但是, redis发生运行时异常时,只是这句运行时异常的命令执行失败,而事务里的其他命令会执行成功.
      因为,redis没有事务回滚机制,当缓存数据时没发现语法错误,则redis默认命令全部正确(例入lpush str1 a不被检查出来),逐条执行
    

    三. watch

    1. 作用 :
      当一个客户端连接用watch监控一个变量,随后multi开启事务,在事务开启且未被执行时,若监控的变量值发生变化,则该客户端开启的事务执行失败,exec命令返回nil
    2. exec执行事务后,watch操作自动失效
    3. unwatch取消监控
      [注]: watch不提供通至客户端回调,只是一次性的控制事务是否被执行

    四. Jedis

    /**
     * jedis连接池
     */
    public class RedisTool {
        private static JedisPool pool = null;
        private static String host;
        private static int port;
        public static synchronized Jedis getJedis(){
            if(pool==null){
                JedisPoolConfig config = new JedisPoolConfig();
                config.setMaxTotal(100);
                config.setMaxIdle(10);
                config.setMaxWaitMillis(10000);
                config.setTestOnBorrow(true);
                pool = new JedisPool(config,host,port,10000);
            }
            System.out.println("获取链接中。。");
            Jedis jedis = pool.getResource();
            System.out.println("链接获取成功");
            return jedis;
        }
        public static void setHostandPort(String host,int port){
            RedisTool.host = host;
            RedisTool.port = port;
        }
    
        public static void returnJedis(Jedis jedis){
            pool.returnResourceObject(jedis);
        }
    }
    
    
  • 相关阅读:
    spring是什么?
    检查80端口是否被占用的命令是: netstat -ano | findstr 0.0.0.0:80 或 netstat -ano | findstr "80"
    配置Dubbo 项目遇到的坑---无法读取方案文档 'http://code.alibabatech.com/schema/dubbo/dubbo.xsd'
    maven中使用tomcat插件启动,显示build success但无法继续启动的解决方法
    java.io.File类操作
    eclipse将web项目打war包部署到tomcat下
    Mapper.xml中的resultMap
    2.PLSQL编写简单存储过程(传入参数,修改+打印)
    1.PLSQL编写简单存储过程(无参,纯打印)
    select2
  • 原文地址:https://www.cnblogs.com/72808ljup/p/5205971.html
Copyright © 2011-2022 走看看