一. 键的生存时间

  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);
}
}

3. redis的超时,事务,watch的更多相关文章

  1. Redis系列之key操作命令与Redis中的事务详解(六)

    序言 本篇主要目的有二: 1.展示所有数据类型中key的所有操作命令,以供大家学习,查阅,更深入的挖掘redis潜力. 2.掌握redis中的事务,让你的数据完整性一致性拥有更优的保障. redis命 ...

  2. redis中的事务

    首先明白在java中线程和进程的区别: 1.什么是多线程? 是指一个应用程序同时执行多个任务,一般来说一个任务就是一个线程 ,而一个应用程序有一个以上的线程我们称之为多线程. 2.什么是进程? 进程是 ...

  3. 高并发场景系列(一) 利用redis实现分布式事务锁,解决高并发环境下减库存

    原文:http://blog.csdn.net/heyewu4107/article/details/71009712 高并发场景系列(一) 利用redis实现分布式事务锁,解决高并发环境下减库存 问 ...

  4. 第四节:Geo类型介绍以及Redis批量操作、事务、分布式锁

    一. Geo类型 1. 类型说明 Geo 是 Redis 3.2 版本后新增的数据类型,用来保存兴趣点(POI,point of interest)的坐标信息.可以实现计算两 POI 之间的距离.获取 ...

  5. 利用redis实现分布式事务锁,解决高并发环境下库存扣减

    利用redis实现分布式事务锁,解决高并发环境下库存扣减   问题描述: 某电商平台,首发一款新品手机,每人限购2台,预计会有10W的并发,在该情况下,如果扣减库存,保证不会超卖 解决方案一 利用数据 ...

  6. Redis 中的事务

    Redis支持简单的事务 Redis与mysql事务的对比 Mysql Redis 开启 start transaction muitl 语句 普通sql 普通命令 失败 rollback 回滚 di ...

  7. Redis 学习(三) —— 事务、消息发布订阅

    一.Redis事务 Redis 提供的事务机制与传统的数据库事务有些不同,传统数据库事务必须维护以下特性:原子性(Atomicity), 一致性(Consistency),隔离性(Isolation) ...

  8. Redis数据库 02事务| 持久化| 主从复制| 集群

    1. Redis事务 Redis不支持事务,此事务不是关系型数据库中的事务: Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的 ...

  9. 三、redis系列之事务

    1. 绪言 Redis也提供了事务机制,可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不许加塞.但Redis对事务的支持是部分支持 ...

随机推荐

  1. c 深度剖析 6

    函数的编码风格 1.注释 2,空行 3,缩进 4,参数长度,代码长度,语句长度要合适. 5,少用全局变量 6,指针仅作输入参数时,可用const 设置其为只读属性,避免其在函数中被修改. 7,函数默认 ...

  2. html---文本框样式;

    一.一个单行文本框的例子 <form name="form1" action="mailto:3400982550@qq.com" method=&quo ...

  3. Hive 复习

    hive分为CLI(command line)(用的比较多) JDBC/ODBC-ThriftServer hiveServer(hive -service hiveserver),JDBC访问,一个 ...

  4. ..c++中用c语言的输入法

    题目: 竞选时,要求选民在n个候选人中选择,n个人的名字为 A,B,C,D--连续n个大写字母,如果选择n个人名字之外的人员,则为废票.   统计时以输入'#'为结束标记.请按候选人的得票数目从大到小 ...

  5. C++面向对象要点

    先说说面向对象思想的一个总体认识 对象通常会有行为,这些行为是靠信息支撑,这些信息包括外部信息和内部信息,对象行为会维护其中的一部分信息 因此对象可以看成是这样一种实体,它获取信息,然后决定自己的行为 ...

  6. JSBinding / Run Samples

    This document shows you how to run JSBinding 2048 sample in Editor. First of course, create an empty ...

  7. semat内核阿尔法的状态图

  8. expect安装去测试

    1.下载expect和tcl 下载地址:http://download.csdn.net/download/tobyaries/5754943 2.安装expect tar -zxvf tcl8.4. ...

  9. cocos2dx 2.x 在ios8下clippingNode不起作用 解决办法

    升级xcode到6.1后,跑以前的cocos2dx 2.x写的项目,发现clippingNode失效了. 后来看到这个帖子,解决了我的问题:http://discuss.cocos2d-x.org/t ...

  10. AngularJS 1.5.0-beta.2 and 1.4.8 have been released

    AngularJS 1.5.0-beta.2 With AngularJS 1.5.0-beta.2, we’ve improved the performance and flexibility o ...