`
youyu4
  • 浏览: 441878 次
社区版块
存档分类
最新评论

Redis高级特性

 
阅读更多

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#

  • 大小: 40.3 KB
  • 大小: 5 KB
  • 大小: 19.8 KB
  • 大小: 16.9 KB
  • 大小: 33 KB
分享到:
评论

相关推荐

    【中间件篇-Redis缓存数据库】Redis高级特性和应用(慢查询、Pipeline、事务、Lua)

    本文将深入探讨Redis的高级特性,包括慢查询、Pipeline、事务和Lua脚本,帮助你更好地理解和利用这些特性提升系统性能。 ### 1. 慢查询 Redis的慢查询日志(Slow Log)是用于追踪执行时间过长的操作,有助于定位和...

    Redis 宝典 _ 基础、高级特性与性能调优

    在《Redis 宝典:基础、高级特性与性能调优》中,你可以深入学习以下几个方面的知识: 1. **Redis 基础**:了解 Redis 的安装、配置和启动过程,掌握客户端连接与命令交互方式。基础命令包括设置、获取和删除键值对...

    Redis高级特性解析:持久化、主从复制与哨兵机制全面探讨

    其高级特性包括持久化、主从复制和哨兵机制,这三大特性是保障 Redis 高可用性和数据安全的关键。 **持久化**: Redis 提供了两种持久化方式:RDB(Redis Database)和 AOF(Append Only File)。RDB 模式通过定时...

    [] - 2023-01-13 看谁还不会 Redis 高级特性 !(万字总结).pdf

    互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术...

    redis高级命令实践.zip

    以上只是Redis高级特性和命令的一部分,实际的"redis高级命令实践.md"文件可能会涵盖更多细节,包括命令的用法示例、最佳实践以及优化技巧等。对于使用Redis的企业和个人来说,理解和掌握这些高级特性至关重要,能够...

    Lettuce-Redis高级客户端详解1

    【Lettuce-Redis高级客户端详解1】 ...以上就是关于Lettuce作为Redis高级客户端的基本介绍,包括其核心特性、连接方式和基本使用方法。Lettuce的灵活性和高性能使得它成为Java开发者在处理Redis时的理想选择。

    Redis学习指南 Redis学习手册

    二、Redis高级特性 1. 消息队列:Redis的发布/订阅(Pub/Sub)功能使其可用作简单的消息队列服务,允许生产者发布消息到频道,消费者订阅并接收这些消息。 2. 距离度量:有序集合结合`GEOADD`等命令,可以实现地理...

    redis utils 工具类

    除了基本操作,RedisUtils还可能提供对Redis高级特性的支持,比如哈希操作(`hSet(String key, String field, String value)`、`hGet(String key, String field)`等)、列表操作(`lPush(String key, String value)...

    StackExchange.Redis-1.2.6

    4. **Redis高级特性**: - **持久化**:通过RDB和AOF两种方式保存数据到磁盘,确保数据安全。 - **主从复制**:支持多个从节点复制主节点数据,提供高可用性和读负载均衡。 - **事务**:保证一系列命令的原子性...

    redis的win版

    四、Redis高级特性 1. 持久化:Redis提供了RDB(快照)和AOF(Append Only File)两种持久化方式,确保数据在系统崩溃后能恢复。 2. 主从复制:通过复制功能,可以实现数据的备份和负载均衡,提高系统的可用性和...

    redis.zip(redis6.2.4)

    **五、Redis高级特性** 1. **事务(Transactions)**:通过`MULTI`、`EXEC`命令实现原子操作。 2. **发布/订阅(Pub/Sub)**:简单的消息订阅和发布机制,实现解耦通信。 3. **lua脚本(Scripting)**:在服务器端...

    Spring boot 和 Redis集成例子.zip

    除此之外,Spring Data Redis还提供了对Redis高级特性的支持,如哈希、列表、集合、有序集合等数据结构的操作。例如,我们可以通过`opsForHash()`方法操作哈希: ```java @Autowired private RedisTemplate, Object...

    redis-redis.zip

    5. **Redis高级特性**: - **发布/订阅(Publish/Subscribe)**:实现消息传递,允许不同客户端之间通信。 - **主从复制**:提高读取性能,通过复制数据到多个从节点。 - **分片/Sharding**:通过一致性哈希等策略...

    Redis使用实例

    3. **Redis高级特性**: - **事务**:Redis支持简单的事务,通过`MULTI`、`EXEC`命令包裹多条操作,保证原子性。 - **发布订阅(Pub/Sub)**:实现消息传递,客户端可以订阅特定频道,服务器向频道发布消息时,...

    redis入门到精通.txt

    ### Redis高级特性 #### 1. 持久化机制 - **RDB快照**:定期将内存中的数据以快照的形式保存到磁盘上。 - **AOF(Append Only File)**:每次执行写操作时,都会将命令追加到AOF文件中,当Redis重启时,可以通过重放...

    关于 phpredis2.2.5-5.5 ts-vc11-x64 的分享版本

    8. **Redis 高级特性** - 事务(Transactions):保证一组操作的原子性。 - 背压(Backpressure):防止数据过快流入 Redis 导致内存溢出。 - 持久化(Persistence):通过 RDB 或 AOF 方式保存数据到磁盘,以防...

    redis Linux版本

    五、Redis高级特性 1. 持久化:Redis提供了RDB和AOF两种持久化方式,确保数据在服务器崩溃后能够恢复。 2. 主从复制:通过复制功能,可以实现数据备份和负载均衡,提高系统的可用性和性能。 3. 事务:Redis支持事务...

    redis-windows-x64各个版本以及安装使用教程及redis-desktop-manager安装包可视化管理

    4. **Redis 高级特性** - 事务:Redis支持原子性事务,可以一次性执行多个操作。 - 订阅/发布:提供发布(Publish)和订阅(Subscribe)功能,实现消息的实时传递。 - Lua脚本:允许在服务器端执行Lua脚本,增强数据...

    redis 集群文档

    8. **Redis 高级特性** Redis 还提供如事务(Transactions)、发布订阅(Pub/Sub)、地理空间索引(Geo)、Lua 脚本支持等功能,丰富了其应用场景。例如,Lua 脚本可以在服务器端执行,减少网络往返,提高效率。 9...

Global site tag (gtag.js) - Google Analytics