`
zk_chs
  • 浏览: 215667 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Redis事务、过期时间、排序、消息、管道

阅读更多

1:事务,Redis中的事务是一组命令的集合,事务同命令一样都是Redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行。

 

MULTI开启事务,EXEC关闭事务

redis> MULTI
redis> SET key1 value1
redis> QUEUED
redis> SET key2 value2
redis> QUEUED
redis> EXEC

 

EXEC命令的返回值就是这些命令的返回值组成的列表,返回值顺序和命令的顺序相同。

 

事务中的错误处理: 分为语法错误和运行错误

1)语法错误指命令不存在或者命令参数的个数不对,只要有一个语法错误,不管语句顺序如何,即使在错误语句前面的语句都正确,执行EXEC命令后Redis就会直接返回错误,连正确的命令也不会执行。

 

2)运行错误指在命令执行时出现的错误,比如使用不同数据类型的命令操作同一个key,这种错误在Redis执行之前是不会被发现的。如果事务里的一条命令出现的运行错误,事务里其他的命令依然会继续执行(包括错误语句之后的命令)。

 

Redis中没有回滚功能,所以要注意不要发生运行错误

 

 2过期时间,Redis中可以使用EXPIRE命令设置一个键的过期时间,到时间后Redis会将其自动删除

 

redis> EXPIRE key seconds

 seconds参数表示键的过期时间,单位是秒。注意,不能使用表达式,比如15分钟不能写成15*60,而是900

 

返回值:返回1表示设置成功,0表示失败

 

使用TTL命令可以查看一个键还有多久过期

redis> TTL key

返回值是单位秒,如果键没有设置过期时间则返回-1,当键不存在时返回-2。

 

如果想要取消键的过期时间设置,可以使用PERSIST命令。

redis> PERSIST key

返回值:过期时间被成功清除返回1;否则返回0(当键不存在或本身就是永久的)。

除了PERSIST以外,使用SET或者GETSET命令为键赋值也会清除键的过期时间(使用string数据类型的赋值方式,覆盖了原来的键),

 

还有一个命令为PEXPIRE,区别是PEXPIRE使用毫秒为单位

另外两个不常用的命令:EXPIREAT,PEXPIREAT;他们使用UNIX时间表示键的过期时间

redis> PEXPIRE key 1000(毫秒)
redis> EXPIREAT key seconds
redis> PEXPIREAT key milliseconds

 

如果用WATCH命令监控了一个拥有过期时间的key,当key到期自动清除时,不会被WATCH认为发生了修改

 

 3:排序,Redis提供了SORT命令对列表类型、集合类型和有序集合类型键进行排序。

 

 排序命令如下:(redis命令与下面的介绍需一对一对照看)

 

1 redis> SORT key [ASC/DESC] [LIMIT offset count] [STORE deskey]
2 redis> SORT key [ALPHA] [ASC/DESC] [LIMIT offset count] [STORE deskey]
3 redis> SORT key1 BY key2:*->field [ASC/DESC] [LIMIT offset count] [STORE deskey]
4 redis> SORT key1 BY key2:*->field [ASC/DESC] GET key3:*->field1 
             [GET key3:*->field2...] [LIMIT offset count] [STORE deskey]
 1)如果集合中有非数字类型,SORT会报错,集合中可以有小数。这种命令方式只对数字进行排序,LIMIT限制返回数量为count,offset表示跳过前offset个元素。STORE将结果存到指定键,该键是list类型,如果键已经存在则覆盖原来的键,不论原key是什么类型,即使是string也会覆盖。

 

 2)添加ALPHA后,实现按字典顺序排列非数字元素,1-9A-Za-z,数字部分不再按照大小排序,而是对每一位数字的大小做比较(比如2排在12的后面)。

 

 3)BY后面的键为参考键,参考键可以是字符串类型键或散列类型键的某个字段(key->field表示),当有BY参数时,将使用key1中每个元素的值替换"*"符号,并获取对应键的指定的字段值,然后对这个值进行排序,再映射至key1中,完成对key1的排序。当key2中不含"*"时,SORT不会执行排序命令;当参考键不存在时,会默认参考键的值为0。

 

 4)对key1完成排序后,再代入key3:*中,更快的获取需要的元素;可以使用多个GET获取多个值,如果还想获取key1对应的值,可以使用GET #,他返回元素本身的值。

 

上述几种排序方法,STORE会返回添加的元素数量,2 3 返回排序后的key1,4返回排序后的key1在key3中所查询的值

 

 4:消息,即队列

 

redis>BRPOP key seconds
redis>BLPOP key seconds

 名字很容易理解,阻塞的list,弹出元素。第一个参数是键名;第二个参数是超市时间,单位为秒。若超过指定时间仍未取得元素则返回nil。0表示不限制等待时间

 

可以通过list实现优先级队列:

redis> BRPOP list1 list2 list3 ...
redis> BLPOP list1 list2 list3 ...

 可以同时设置多个队列,即同时检测多个键,如果都能取得元素,则优先从list1中取。(将优先级高的列表放在优先级低的前面,便可以实现优先级队列)

 

 5:管道,优化redis,减少tcp收发总耗时

 

Jedis jedis = new Jedis("127.0.0.1", 6379);
Pipeline pipeline = jedis.pipelined();
for (int i = 0; i < 10000; i++){
    pipeline.incr("key");
}
pipeline.sync();

 不再是单条命令发送,而是批量发送。减少了客户端与Redis的通信次数。

 

 

 这次的博客就到这里结束了,本来还想写点订阅/发布的,结果自己也不太会,就不出来丢人了.......谢谢能看完。

分享到:
评论

相关推荐

    Redis实战_Redis实战中文完整版_Redis快速入门_Redis数据类型及操作_Redis常用

    9. **性能优化**:包括内存管理、避免阻塞操作、合理设置过期时间等,都是提升Redis性能的关键。 10. **运维与监控**:如何监控Redis的状态,如使用`INFO`命令查看统计信息,以及使用第三方工具如Redis Monitor、...

    redisUtils工具类的使用

    RedisUtils工具类是Java开发中常见的一种封装了Redis...在处理大量数据时,考虑使用管道(pipeline)或者事务(transaction)来提高性能。最后,为了防止内存泄漏,应该及时清理不再使用的键,或者设定合理的过期时间。

    Redis测试Demo

    4. **过期时间设置**:为了实现缓存功能,Redis允许为键设置过期时间,如`EXPIRE mykey 60`将使键`mykey`在60秒后自动删除。 5. **数据持久化**:虽然Redis是内存数据库,但可以通过RDB(快照)或AOF(追加日志)两...

    Redis实战(黄健宏译)

    4. **Redis事务**:Redis支持多条命令的原子执行,通过`MULTI`、`EXEC`命令实现事务,但不支持回滚。 5. **发布/订阅(Pub/Sub)**:Redis提供发布/订阅模式,用于实现轻量级的消息传递,常用于实时消息系统或解耦...

    StackExchange.Redis-1.2.6

    StackExchange.Redis是一个强大的C#客户端库,用于与Redis内存数据存储进行交互。Redis是一个高性能的...在实际使用过程中,开发者应结合Redis的最佳实践,例如合理设置过期时间、优化数据结构等,以充分利用其优势。

    redis入门指南第二版

    Redis支持TTL(Time To Live)功能,可以为键设置过期时间,实现自动清理。 在数据结构方面,Redis的哈希(Hash)适合存储对象,可以通过`HSET key field value`添加字段,`HGET key field`获取字段值。列表(List...

    连接Redis服务器 在使用Redis之前,首先需要使用redis-cli工具连接到Redis服务器 redis-cli是Re

    Redis的发布/订阅模式允许客户端订阅频道并在频道上接收消息。 - 发布消息: ```shell PUBLISH channel message ``` - 订阅频道: ```shell SUBSCRIBE channel ``` #### 监控(Monitoring) 使用监控命令`...

    redis-py-master.zip

    `redis-py`还支持连接监控、连接恢复、过期时间设置、主从复制、集群模式等功能。在实际开发中,可以通过阅读`redis-py-master`源代码了解其实现细节,更好地理解和优化使用Redis的方式,提升应用性能。此外,持续...

    Redis面试题.pdf

    请说明Redis事务的特点和使用方式。 - **事务**:一组连续的命令被视为一个单独的操作。 - **特点**:虽然Redis本身是单线程的,但事务可以提供命令序列的原子性。 - **使用方式**:使用`MULTI`命令开始事务,接着...

    连接Redis服务器 在使用Redis之前,首先需要使用redis-cli工具连接到Redis服务器 redis-cli是Red

    管道技术允许客户端一次性发送多个命令到Redis服务器,从而减少了网络往返时间,提高了效率。 ```bash redis-cli --pipe SET key1 value1 SET key2 value2 END ``` #### 十一、发布/订阅(Pub/Sub) Redis还支持...

    redis 完整版教程(公司内部请某培训机构的教程)

    ### Redis 完整版教程知识点概述 #### 一、Redis简介 - **定义**:Redis是一种高性能的键值型数据库,完全开源且免费,遵循BSD许可协议。 - **特点**: - 支持数据持久化,即可以将内存中的数据保存到磁盘并在重启...

    redis 实战练手项目,顺带玩下go-zero-redis-action-practice.zip

    4. Redis事务(Transactions): Redis支持事务,可以一次执行多个命令,确保原子性。通过`MULTI`、`EXEC`、`DISCARD`等命令,我们可以实现命令的批量操作,这对于数据库操作的完整性至关重要。 5. Redis持久化: ...

    Redis补充笔记1

    `Exists key` 检查键是否存在,`Expire key seconds` 或 `Expire key timestamp` 设置键的过期时间,`Persist key` 取消键的过期设置。`TTL key` 返回键的剩余生存时间,`Move key db` 将键移动到另一个数据库,`...

    redis文档.rar

    Redis,全称Remote Dictionary Server,是一款高性能的键值对存储系统,常被用作数据库、缓存和消息中间件。Redis以其丰富的数据结构、高效的数据处理能力以及支持网络的特性,广泛应用于各种互联网服务和企业级应用...

    ### 这是一篇对Redis开发详细介绍的文

    - 结合Redis的SETNX指令和过期时间,实现可靠的分布式锁机制。 - 保障多节点环境下资源共享的互斥性,避免数据冲突。 #### 结语 Redis凭借其出色的性能表现和丰富的功能集,在众多应用场景中展现出了巨大的价值...

    Using Redis As a Time Series Database: Why and How

    在使用 Python 客户端访问 Redis 的情况下,“事务性管道”(通常被称为“事务”或“MULTI/EXEC 事务”)是通过调用 Redis 连接上的 `.pipeline()` 方法而构造的,该方法无需参数或带一个布尔值 True 参数。...

    redis常用命令用法实例(超详细)

    Redis事务通过`MULTI`、`EXEC`、`DISCARD`命令实现。`MULTI` 开始事务,`WATCH key1 key2 ...` 监视键,如果被修改则事务失败,`UNWATCH` 取消监视,`EXEC` 执行事务,`DISCARD` 取消事务。 4. 服务器信息与管理 ...

Global site tag (gtag.js) - Google Analytics