Redis高级特性
redis中键的生存时间(expire)
Redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它。
1. 过期时间可以设置为秒或者毫秒精度。
2. 过期时间分辨率总是 1 毫秒。
3. 过期信息被复制和持久化到磁盘,当 Redis 停止时时间仍然在计算 (也就是说 Redis 保存了过期时间)。
命令
expire 设置生存时间(单位/秒)
expire key seconds(秒)
ttl 查看键的剩余生存时间
ttl key
persist 取消生存时间
persist key
expireat [key] unix时间戳1351858600
EXPIREAT cache 1355292000 # 这个 key 将在 2012.12.12 过期
操作
应用场景
1. 限时的优惠活动信息
2. 网站数据缓存(对于一些需要定时更新的数据,例如:积分排行榜)
3. 手机验证码
4. 限制网站访客访问频率(例如:1分钟最多访问10次)
redis的事务(transaction)
redis中的事务是一组命令的集合。事务同命令一样都是redis的最小执行单元。一组事务中的命令要么都执行,要么都不执行。(例如:转账)
原理:
先将属于一个事务的命令发送给redis进行缓存,最后再让redis依次执行这些命令。
命令:
multi //事务开始
.....
exec //事务结束,开始执行事务中的命令
discard //放弃事务
操作
应用场景:
1. 一组命令必须同时都执行,或者都不执行。
2. 我们想要保证一组命令在执行的过程之中不被其它命令插入。
错误处理
1. 语法错误:致命的错误,事务中的所有命令都不会执行
2. 运行错误:不会影响事务中其他命令的执行
Redis 不支持回滚(roll back)
正因为redis不支持回滚功能,才使得redis在事务上可以保持简洁和快速。
watch命令
作用:监控一个或者多个键,当被监控的键值被修改后阻止之后的一个事务的执行。
但是不能保证其它客户端不修改这一键值,所以我们需要在事务执行失败后重新执行事务中的命令。
注意:执行完事务的exec命令之后,watch就会取消对所有键值的监控
unwatch:取消监控
redis中数据的排序(sort)
sort命令可以对列表类型,集合类型和有序集合类型进行排序。
命令
sort key [desc] [limit offset count]
by 参考键(参考键可以是字符串类型或者是hash类型的某个字段,hash类型的格式为:键名->字段名)
如果参考键中不带*号则不排序
如果某个元素的参考键不存在,则默认参考键的值为0
扩展 get参数
get参数的规则和by参数的规则一样
get # (返回元素本身的值)
扩展 store参数
使用store 参数可以把sort的排序结果保存到指定的列表中
性能优化
1:尽可能减少待排序键中元素的数量
2:使用limit参数只获取需要的数据
3:如果要排序的数据数量很大,尽可能使用store参数将结果缓存。
操作
“发布/订阅”模式
发布:publish
publish channel message
订阅:subscribe
subscribe channel [.....]
取消订阅:unsubscribe
unsubscribe [channel]
按照规则订阅:psubscribe
psubscribe channel ?
按照规则取消订阅:punsubscribe
注意:使用punsubscribe命令只能退订通过psubscribe 订阅的频道。
操作
redis任务队列、栈
任务队列:使用lpush和rpop(brpop)可以实现普通的任务队列
栈:使用rpush和rpop
brpop是列表的阻塞式(blocking)弹出原语。
它是 RPOP命令的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被 BRPOP命令阻塞,直到等待超时或发现可弹出元素为止。
当给定多个 key 参数时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的尾部元素。
操作
redis管道(pipeline)
redis的pipeline(管道)功能在命令行中没有,但是redis是支持管道的,在Java的客户端(jedis)中是可以使用的。
1:不使用管道方式,插入1000条数据耗时328毫秒
// 测试不使用管道
public static void testInsert() {
long currentTimeMillis = System.currentTimeMillis();
Jedis jedis = new Jedis("192.168.33.130", 6379);
for (int i = 0; i < 1000; i++) {
jedis.set("test" + i, "test" + i);
}
long endTimeMillis = System.currentTimeMillis();
System.out.println(endTimeMillis - currentTimeMillis);
}
2:使用管道方式,插入1000条数据耗时37毫秒
// 测试管道
public static void testPip() {
long currentTimeMillis = System.currentTimeMillis();
Jedis jedis = new Jedis("192.168.33.130", 6379);
Pipeline pipelined = jedis.pipelined();
for (int i = 0; i < 1000; i++) {
pipelined.set("bb" + i, i + "bb");
}
pipelined.sync();
long endTimeMillis = System.currentTimeMillis();
System.out.println(endTimeMillis - currentTimeMillis);
}
在插入更多数据的时候,管道的优势更加明显:测试10万条数据的时候,不使用管道要40秒,实用管道378毫秒。
redis的安全策略
设置数据库密码(配置)
requirepass password
验证密码(命令)
auth password
bind参数(可以让数据库只能在指定IP下访问)
bind 127.0.0.1
修改命令的名称
rename-command flushall cleanall
禁用命令
rename-command flushall ""
redis info命令
以一种易于解释(parse)且易于阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。
通过给定可选的参数 section ,可以让命令只返回某一部分的信息:
http://redisdoc.com/server/info.html
redis内存占用情况
测试情况:
100万个键值对(键是0到999999值是字符串“hello world”)在32位操作系统的笔记本上 用了100MB
使用64位的操作系统的话,相对来说占用的内存会多一点,这是因为64位的系统里指针占用了8个字节,但是64位系统也能支持更大的内存,所以运行大型的redis服务还是建议使用64位服务器
Redis实例最多存keys数
理论上Redis可以处理多达2的32次方的keys,并且在实际中进行了测试,每个实例至少存放了2亿5千万的keys,也可以说Redis的存储极限是系统中的可用内存值。
参考:
http://blog.csdn.net/u011204847/article/details/51302109#
相关推荐
本文将深入探讨Redis的高级特性,包括慢查询、Pipeline、事务和Lua脚本,帮助你更好地理解和利用这些特性提升系统性能。 ### 1. 慢查询 Redis的慢查询日志(Slow Log)是用于追踪执行时间过长的操作,有助于定位和...
在《Redis 宝典:基础、高级特性与性能调优》中,你可以深入学习以下几个方面的知识: 1. **Redis 基础**:了解 Redis 的安装、配置和启动过程,掌握客户端连接与命令交互方式。基础命令包括设置、获取和删除键值对...
其高级特性包括持久化、主从复制和哨兵机制,这三大特性是保障 Redis 高可用性和数据安全的关键。 **持久化**: Redis 提供了两种持久化方式:RDB(Redis Database)和 AOF(Append Only File)。RDB 模式通过定时...
互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术...
以上只是Redis高级特性和命令的一部分,实际的"redis高级命令实践.md"文件可能会涵盖更多细节,包括命令的用法示例、最佳实践以及优化技巧等。对于使用Redis的企业和个人来说,理解和掌握这些高级特性至关重要,能够...
【Lettuce-Redis高级客户端详解1】 ...以上就是关于Lettuce作为Redis高级客户端的基本介绍,包括其核心特性、连接方式和基本使用方法。Lettuce的灵活性和高性能使得它成为Java开发者在处理Redis时的理想选择。
二、Redis高级特性 1. 消息队列:Redis的发布/订阅(Pub/Sub)功能使其可用作简单的消息队列服务,允许生产者发布消息到频道,消费者订阅并接收这些消息。 2. 距离度量:有序集合结合`GEOADD`等命令,可以实现地理...
除了基本操作,RedisUtils还可能提供对Redis高级特性的支持,比如哈希操作(`hSet(String key, String field, String value)`、`hGet(String key, String field)`等)、列表操作(`lPush(String key, String value)...
4. **Redis高级特性**: - **持久化**:通过RDB和AOF两种方式保存数据到磁盘,确保数据安全。 - **主从复制**:支持多个从节点复制主节点数据,提供高可用性和读负载均衡。 - **事务**:保证一系列命令的原子性...
四、Redis高级特性 1. 持久化:Redis提供了RDB(快照)和AOF(Append Only File)两种持久化方式,确保数据在系统崩溃后能恢复。 2. 主从复制:通过复制功能,可以实现数据的备份和负载均衡,提高系统的可用性和...
**五、Redis高级特性** 1. **事务(Transactions)**:通过`MULTI`、`EXEC`命令实现原子操作。 2. **发布/订阅(Pub/Sub)**:简单的消息订阅和发布机制,实现解耦通信。 3. **lua脚本(Scripting)**:在服务器端...
除此之外,Spring Data Redis还提供了对Redis高级特性的支持,如哈希、列表、集合、有序集合等数据结构的操作。例如,我们可以通过`opsForHash()`方法操作哈希: ```java @Autowired private RedisTemplate, Object...
5. **Redis高级特性**: - **发布/订阅(Publish/Subscribe)**:实现消息传递,允许不同客户端之间通信。 - **主从复制**:提高读取性能,通过复制数据到多个从节点。 - **分片/Sharding**:通过一致性哈希等策略...
3. **Redis高级特性**: - **事务**:Redis支持简单的事务,通过`MULTI`、`EXEC`命令包裹多条操作,保证原子性。 - **发布订阅(Pub/Sub)**:实现消息传递,客户端可以订阅特定频道,服务器向频道发布消息时,...
### Redis高级特性 #### 1. 持久化机制 - **RDB快照**:定期将内存中的数据以快照的形式保存到磁盘上。 - **AOF(Append Only File)**:每次执行写操作时,都会将命令追加到AOF文件中,当Redis重启时,可以通过重放...
8. **Redis 高级特性** - 事务(Transactions):保证一组操作的原子性。 - 背压(Backpressure):防止数据过快流入 Redis 导致内存溢出。 - 持久化(Persistence):通过 RDB 或 AOF 方式保存数据到磁盘,以防...
五、Redis高级特性 1. 持久化:Redis提供了RDB和AOF两种持久化方式,确保数据在服务器崩溃后能够恢复。 2. 主从复制:通过复制功能,可以实现数据备份和负载均衡,提高系统的可用性和性能。 3. 事务:Redis支持事务...
4. **Redis 高级特性** - 事务:Redis支持原子性事务,可以一次性执行多个操作。 - 订阅/发布:提供发布(Publish)和订阅(Subscribe)功能,实现消息的实时传递。 - Lua脚本:允许在服务器端执行Lua脚本,增强数据...
8. **Redis 高级特性** Redis 还提供如事务(Transactions)、发布订阅(Pub/Sub)、地理空间索引(Geo)、Lua 脚本支持等功能,丰富了其应用场景。例如,Lua 脚本可以在服务器端执行,减少网络往返,提高效率。 9...