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的通信次数。
这次的博客就到这里结束了,本来还想写点订阅/发布的,结果自己也不太会,就不出来丢人了.......谢谢能看完。
相关推荐
9. **性能优化**:包括内存管理、避免阻塞操作、合理设置过期时间等,都是提升Redis性能的关键。 10. **运维与监控**:如何监控Redis的状态,如使用`INFO`命令查看统计信息,以及使用第三方工具如Redis Monitor、...
RedisUtils工具类是Java开发中常见的一种封装了Redis...在处理大量数据时,考虑使用管道(pipeline)或者事务(transaction)来提高性能。最后,为了防止内存泄漏,应该及时清理不再使用的键,或者设定合理的过期时间。
4. **过期时间设置**:为了实现缓存功能,Redis允许为键设置过期时间,如`EXPIRE mykey 60`将使键`mykey`在60秒后自动删除。 5. **数据持久化**:虽然Redis是内存数据库,但可以通过RDB(快照)或AOF(追加日志)两...
4. **Redis事务**:Redis支持多条命令的原子执行,通过`MULTI`、`EXEC`命令实现事务,但不支持回滚。 5. **发布/订阅(Pub/Sub)**:Redis提供发布/订阅模式,用于实现轻量级的消息传递,常用于实时消息系统或解耦...
StackExchange.Redis是一个强大的C#客户端库,用于与Redis内存数据存储进行交互。Redis是一个高性能的...在实际使用过程中,开发者应结合Redis的最佳实践,例如合理设置过期时间、优化数据结构等,以充分利用其优势。
Redis支持TTL(Time To Live)功能,可以为键设置过期时间,实现自动清理。 在数据结构方面,Redis的哈希(Hash)适合存储对象,可以通过`HSET key field value`添加字段,`HGET key field`获取字段值。列表(List...
Redis的发布/订阅模式允许客户端订阅频道并在频道上接收消息。 - 发布消息: ```shell PUBLISH channel message ``` - 订阅频道: ```shell SUBSCRIBE channel ``` #### 监控(Monitoring) 使用监控命令`...
`redis-py`还支持连接监控、连接恢复、过期时间设置、主从复制、集群模式等功能。在实际开发中,可以通过阅读`redis-py-master`源代码了解其实现细节,更好地理解和优化使用Redis的方式,提升应用性能。此外,持续...
请说明Redis事务的特点和使用方式。 - **事务**:一组连续的命令被视为一个单独的操作。 - **特点**:虽然Redis本身是单线程的,但事务可以提供命令序列的原子性。 - **使用方式**:使用`MULTI`命令开始事务,接着...
管道技术允许客户端一次性发送多个命令到Redis服务器,从而减少了网络往返时间,提高了效率。 ```bash redis-cli --pipe SET key1 value1 SET key2 value2 END ``` #### 十一、发布/订阅(Pub/Sub) Redis还支持...
### Redis 完整版教程知识点概述 #### 一、Redis简介 - **定义**:Redis是一种高性能的键值型数据库,完全开源且免费,遵循BSD许可协议。 - **特点**: - 支持数据持久化,即可以将内存中的数据保存到磁盘并在重启...
4. Redis事务(Transactions): Redis支持事务,可以一次执行多个命令,确保原子性。通过`MULTI`、`EXEC`、`DISCARD`等命令,我们可以实现命令的批量操作,这对于数据库操作的完整性至关重要。 5. Redis持久化: ...
`Exists key` 检查键是否存在,`Expire key seconds` 或 `Expire key timestamp` 设置键的过期时间,`Persist key` 取消键的过期设置。`TTL key` 返回键的剩余生存时间,`Move key db` 将键移动到另一个数据库,`...
Redis,全称Remote Dictionary Server,是一款高性能的键值对存储系统,常被用作数据库、缓存和消息中间件。Redis以其丰富的数据结构、高效的数据处理能力以及支持网络的特性,广泛应用于各种互联网服务和企业级应用...
- 结合Redis的SETNX指令和过期时间,实现可靠的分布式锁机制。 - 保障多节点环境下资源共享的互斥性,避免数据冲突。 #### 结语 Redis凭借其出色的性能表现和丰富的功能集,在众多应用场景中展现出了巨大的价值...
在使用 Python 客户端访问 Redis 的情况下,“事务性管道”(通常被称为“事务”或“MULTI/EXEC 事务”)是通过调用 Redis 连接上的 `.pipeline()` 方法而构造的,该方法无需参数或带一个布尔值 True 参数。...
Redis事务通过`MULTI`、`EXEC`、`DISCARD`命令实现。`MULTI` 开始事务,`WATCH key1 key2 ...` 监视键,如果被修改则事务失败,`UNWATCH` 取消监视,`EXEC` 执行事务,`DISCARD` 取消事务。 4. 服务器信息与管理 ...