Redis(四) 管道的使用、持久化数据
一、pipeline管道的使用
1.通俗来说就是批量一次请求、一次批量返回,从而节省开销、提高效率。
2.使用方式:
2.1不集成spring,直接利用jedis客户端直接操作。
调用方法即可,如下:
拿到连接,直接调用pipelined()方法。
2.2集成spring,利用spring-data-redis下的redisTemplate去操作
redisTempalate有4个方法executePipelined() 参数不一样,查看源码发现,底层实现是通过RedisConnection来进行操作,通过使用方法会发现,Redis底层连接操作数据都是基于String,参数都是字节数组,基于逻辑层编辑或展现,我们需要把它进行数据格式的转化,比如转成实体bean\list等等,字节数组去转、自然需要引入序列化、反序列化,在集成的Redis中同样封装了一个RedisSerializer接口,我们使用即可。
代码如下:
public boolean pipelineInsert(final String key){ try{ final RedisSerializer<String> serializer = redisTemplate.getStringSerializer(); super.redisTemplate.executePipelined(new RedisCallback<String>() { @Override public String doInRedis(RedisConnection conn) throws DataAccessException { byte[] listName = serializer.serialize(key); for(int i =0; i<10000; i++){ conn.incr(listName); } return null; } }, serializer); }catch(Exception e){ logger.info("使用管道操作出错:{}",e.getMessage()); return false; } return true; }
测试如下:
在test类中加入即可,注释的方法为普通方式循环1000次
long startTime = System.nanoTime(); p.pipelineInsert("pipeline_key"); //c.incrString("pipeline_key", 1000); long endTime = System.nanoTime(); logger.info("查询redis--pipeline操作的值:{}",c.select("pipeline_key")); logger.info("查询redis--pipeline操作耗时:{}",(endTime-startTime)/1000.0);
使用管道操作、循环递增10000次 耗时
未使用管道操作、循环递增1000次 耗时
详见代码的cc-redis-tow下package为pipelining和test类
二、数据持久化
方式:RDB、AOF
1.RDB方式:(通过快照的方式来完成、默认方式),
大致原理:
执行快照时会产生快照文件dump.rdb(可以在redis.conf中的dbfilename、dir下设置)把内存中的数据放进去,且rdb文件是压缩处理过的二进制文件比较小,便于传输;当启动redis时会自动读取数据备份的rdb文件。速率大致为 1万个字符型的key 大小为1g左右的文件载入到内存需要20-30秒。
大致流程:
执行快照时,Redis会fork一个子进程,子进程进行快照处理吧内存中的数据写到临时的rdb文件中,原有的父进程继续处理客户端请求,当子进程写完之后,用该临时的rdb文件覆盖旧的文件,一次快照完成。
触发条件:
1.1 根据配置规则自动进行
在redis的安装文件夹下有一个redi.conf文件,在SNAPSHOTTING板块下
三个条件,自动满足一个即自动进行快照。
1.2 执行save、bgsave命令时
save会阻塞客户端的请求,直到快照完成,bgsave不会
1.3 执行flushall 命令、或设置了主从复制
2. AOF方式(全量保存,可将每一条redis命令追加写到磁盘文件中,效率略低)
默认没有开启,在redis.conf配置文件中修改appendonly 参数为yes即可、同样它也会生成一个默认文件appendonly.aof 可以通过appendfilename 参数值修改。
2.1 AOF方式会记录每一条命令,所以有些无效的命令也会记录,所以设置aof的重写操作 redis.conf中有默认配置
1 |
auto-aof-rewrite-percentage 100 |
第一行的意思是,目前的AOF文件的大小超过上一次重写时的AOF文件的百分之多少时再次进行重写,如果之前没有重写过,则以启动时AOF文件大小为依据。
第二行的意思是,当AOF文件的大小大于64MB时才进行重写,因为如果AOF文件本来就很小时,有几个无效的命令也是无伤大雅的事情。
这两个配置项通常一起使用
2.2同步数据到磁盘
虽然每次执行更改数据库的内容时,AOF都会记录执行的命令,但是由于操作系统本身的硬盘缓 存的缘故,AOF文件的内容并没有真正地写入硬盘,在默认情况下,操作系统会每隔30s将硬盘缓存中的数据同步到硬盘,但是为了防止系统异常退出而导致丢 数据的情况发生,我们还可以在Redis的配置文件中配置这个同步的频率:
1 |
# appendfsync always |
第一行表示每次AOF写入一个命令都会执行同步操作,这是最安全也是最慢的方式;
第二行表示每秒钟进行一次同步操作,一般来说使用这种方式已经足够;
第三行表示不主动进行同步操作,这是最不安全的方式。
参考:
http://qifuguang.me/2015/10/13/Redis%E6%8C%81%E4%B9%85%E5%8C%96/
相关推荐
4. **Redis持久化**:为了防止数据丢失,Redis提供了两种持久化方式:RDB(快照)和AOF(Append Only File)。这两种方式的原理、优缺点和应用场景会在书中进行深入解析。 5. **Redis复制**:通过主从复制,可以...
四、持久化 Redis提供了两种持久化方式:RDB(快照)和AOF(追加日志)。RDB会在特定时间点创建数据库的快照,而AOF记录每次写操作的日志。这两种方式各有优缺点,手册会指导如何根据业务需求选择合适的持久化策略。...
以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史与特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的...
* 持久化(persistence):Redis 支持数据的持久化,你可以每隔一段时间将数据集转存到磁盘上(snapshot),或者在日志尾部追加每一条操作命令(append only file,aof)。 * 主从复制(master-slave replication)...
以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史与特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的...
12. **持久化配置**:配置Redis的RDB或AOF持久化策略,确保数据在服务器重启后仍能恢复。 在使用RedisUtils时,开发者需要注意合理配置Redis连接参数,如连接超时、重试次数等,以保证系统的稳定性和性能。此外,还...
以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史与特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的...
其次,Redis的设计原理包括内存管理、持久化机制和复制技术。内存管理方面,Redis使用的是简单动态字符串(SDS)来高效地处理字符串,并通过内存分配器优化内存使用。持久化机制包括RDB(快照)和AOF(追加日志)两...
本书是一本Redis入门指导书籍,以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储...
Redis还支持事务、发布/订阅模式、持久化和复制等功能,确保数据安全和高可用性。 接下来是JRedis。JRedis是一个简单的、轻量级的Redis客户端,它提供了一个直观的API来操作Redis服务器。用户可以通过JRedis连接到...
Redis以其速度快、数据结构丰富、支持网络、可持久化等特性,深受开发者喜爱。本资源包含Redis缓存的安装包以及相关学习教程,特别是关于Redis持久化方式的教案,对于想要深入理解和应用Redis的开发者来说,是一份...
以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史与特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的...
3. 持久化:讲解如何将内存中的数据保存到磁盘,以防止服务器重启造成数据丢失。常见的持久化方式有RDB(快照)和AOF(Append Only File)。 4. 主从复制:介绍如何设置Redis主从复制,实现数据备份和负载均衡。 5...
数据持久化 内存回收策略 单线程高性能原理 在Redis中使用Lua脚本 原子性问题 效率问题 Lua Redis与Lua Redis集群 主从复制 主从复制原理 哨兵机制 Redis-Cluster Redis Java API 操作方法及原理分析 Jedis-sentinel...
Redis的数据持久化和主从复制功能使其在生产环境中广泛应用。 2. **安装与启动** Redis的安装过程通常包括下载源码、编译和启动服务。在Linux环境下,可以通过编译安装并使用`redis-server`命令启动服务。Windows...
`info`命令是用于查看Redis服务器状态的重要工具,提供了服务器环境、客户端、内存、持久化、统计、复制、CPU使用、集群和键空间等九大类信息,帮助管理员监控和诊断Redis实例的健康状况。 了解了这些基础知识,...
1. 配置文件:根据需求修改`redis.conf`,例如设置数据持久化策略、端口号、内存限制等。 2. 安全性:为避免未授权访问,可以设置访问密码,使用`requirepass`配置项。同时,通过`bind`指定只允许特定IP连接。 3. ...
在启动前,建议先修改配置文件`redis.conf`,根据实际需求设置端口、数据持久化策略、内存限制等参数。例如,你可以设置`bind 127.0.0.1`来限制只接受本地连接,以增加安全性。 Redis支持多种数据类型,包括字符串...