redis事务和过期时间

1. 事务

redis中的事务是一组命令的集合。redis的事务:multi->queued->exec。

redis保证一个事务中的所有命令要么都执行要么都不执行。如果在发送exec命令前客户端断线了,redis会清空事务队列,事务中的所有命令都不会执行。而一旦客户端发送了exec命令,所有的命令就都会被执行,即使此后客户端断线也没关系,因为redis中已经记录了所有要执行的命令。

如果一个事务中的某个命令执行出错:

1)语法错误:只要有一个命令有语法错误,执行exec命令后redis就会直接返回错误,连语法正确的命令也不会执行。

2)运行错误:redis的事务没有关系数据库事务提供的回滚,为此开发者必须在事务执行出错后自己收拾剩下的摊子(将数据库复原回事务执行前的状态等)。

watch:watch命令可以监控一个或多个键,一旦其中有一个键被修改或删除,之后的事务就不会执行。

执行exec命令后会取消对所有键的监控,如果不想执行事务中的命令也可以使用unwatch命令来取消监控。

2. 过期时间

expire key seconds,单位是秒。expire命令返回1表示设置成功,返回0表示键不存在或设置失败。pexpire key millisecond,单位毫秒。

ttl key:返回键的剩余时间(秒)。键不存在时返回-2,若键没有设置过期时间则返回-1。

persist key:取消键的过期时间设置。

为了提高网站的负载能力,常常需要将一些访问频率较高但是对cpu或io资源消耗较大的操作的结果缓存起来,并希望让这些缓存过一段时间自动过期。

当服务器内存有限时,如果大量地使用缓存键且过期时间设置得过长就会导致redis占满内存;另一方面如果为了防止redis占用内存过大而将缓存键的过期时间设置得太短,就可能导致缓存命中率过低并且大量内存闲置。实际开发中为缓存键设置一个合理的过期时间其实很难,为此可以限制redis能够使用的最大内存,并让redis按照一定的规则淘汰不需要的缓存键,这种方式很常用。

maxmemory bytes

maxmemory-policy xxx:当超出了maxmemory时redis会依据maxmemory-policy参数指定的策略来删除不需要的key直到redis占用的内存小于指定内存。

redis支持的淘汰键的规则 说明
volatile-lru 使用lru算法删除一个key(只对设置了过期时间的key)
allkeys-lru 使用lru算法删除一个key
volatile-random 随机删除一个key(只对设置了过期时间的key)
allkeys-random 随机删除一个key
volatile-ttl 删除过期时间最近的一个key
noeviction 不删除key,只返回错误

原文地址:https://www.cnblogs.com/i-hard-working/p/12037932.html

时间: 2024-10-27 10:17:28

redis事务和过期时间的相关文章

php操作redis和memcache过期时间

php-redis 设置过期时间setTimeOut 命令行expireredis过期时间redis术语里面,把设置了expire time的key 叫做:volatile keys. 意思就是不稳定的key.没有设置过期时间的也就是永久存储 set:set('key','value')将值 value 关联到 key setTimeOut:setTimeout('x', 3);设置过期时间 setex:setex('key', 3600, 'value')带生存时间的写入值 这个命令类似于以下

redis key设置过期时间

最近做的一个项目需要用到redis存储storm计算的结果,使用过程中发现我的redis使用内存空间一直在增大,颇为好奇,因为我都设置了key的过期时间了呀.. 最后一看代码才发现问题.原来我都是在代码中先调用expire()方法调用顺序有问题. expire(key,time) 如果当前redis没有这个key的时候默认是不操作的.哎,写代码千万得严谨啊

java操作Redis缓存设置过期时间

关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间. 在应用中我们会需要使用redis设置过期时间,比如单点登录中我们需要随机生成一个token作为key,将用户的信息转为json串作为value保存在redis中,通常做法是: //生成token String token = UUID.randomUUID().toString(); //把用户信息写入redis jedisClient.set(REDIS_USER_SESSION_KEY + ":"

redis的key过期时间

public void set(String key,String value,int liveTime){ this.set(key, value); this.getJedis().expire(key, liveTime); } 通过设置key的淘汰时间来决定key的存储策略

Redis原子性写入HASH结构数据并设置过期时间

Redis中提供了原子性命令SETEX或SET来写入STRING类型数据并设置Key的过期时间: > SET key value EX 60 NX ok > SETEX key 60 value ok 但对于HASH结构则没有这样的命令,只能先写入数据然后设置过期时间: > HSET key field value ok > EXPIRE key 60 ok 这样就带了一个问题:HSET命令执行成功而EXPIRE命令执行失败(如命令未能成功发送到Redis服务器),那么数据将不会过

redis文档翻译_key设置过期时间

Available since 1.0.0.    使用开始版本1.01 Time complexity: O(1)  时间复杂度O(1) 出处:http://blog.csdn.net/column/details/redisbanli.html Set a timeout on key. After the timeout has expired, the key will automatically be deleted. A key with an associated timeout

Redis学习系列六ZSet(有序列表)及Redis数据结构的过期

一.简介 ZSet可以说是Redis中最有趣的数据结构了,因为他兼具了Hash集合和Set的双重特性,也是用的最多的,保证了value值的唯一性的同时,,同时又保证了高性能,最主要的是还可以给每个Value设置Source(权重),那么我们就可以通过权重进行排序,这在业务上是非常常见的,比如很多地方需要,比如我们需要对所有用户的数学成绩进行排序.对英语等等地例子比比皆是,那么通过ZSet,你将会得到一个响应速度非常快的过程.下面会介绍. ZSet的内部原理是通过跳跃列表来实现的,这里还是不想说太

Redis 小白指南(三)- 事务、过期、消息通知、管道和优化内存空间

Redis 小白指南(三)- 事务.过期.消息通知.管道和优化内存空间 简介 <Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍> 讲的是 Redis 的介绍,以及如何在 Windows 上安装并使用,一些 GUI 工具和自己简单封装的 RedisHelper. <Redis 小白指南(二)- 聊聊五大类型:字符串.散列.列表.集合和有序集合>讲的是 Redis 中最核心的内容,最常用的就是和数据类型打交道. 目录 事务 过期时间 消息通知 管道 优化内存空间

redis 过期时间

memcached 和 redis 的set命令都有expire参数,可以设置key的过期时间.但是redis是一个可以对数据持久化的key-value database,它的key过期策略还是和memcached有所不同的.梳理,整理如下: redis通过expire命令来设置key的过期时间. 语法:redis.expire(key, expiration) 1. 在小于2.1.3的redis版本里,只能对key设置一次expire.redis2.1.3和之后的版本里,可以多次对key使用e