`
TableMiao
  • 浏览: 75397 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Redis(四) 管道的使用、持久化数据

阅读更多

Redis(四) 管道的使用、持久化数据

 

 一、pipeline管道的使用

   1.通俗来说就是批量一次请求、一次批量返回,从而节省开销、提高效率。

   2.使用方式:

      2.1不集成spring,直接利用jedis客户端直接操作。

        调用方法即可,如下:

拿到连接,直接调用pipelined()方法。

 

 2.2集成spring,利用spring-data-redis下的redisTemplate去操作

     redisTempalate4个方法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-towpackagepipeliningtest

 

 

二、数据持久化

  方式:RDBAOF

  1.RDB方式:(通过快照的方式来完成、默认方式),

 大致原理:

     执行快照时会产生快照文件dump.rdb(可以在redis.conf中的dbfilenamedir下设置)把内存中的数据放进去,且rdb文件是压缩处理过的二进制文件比较小,便于传输;当启动redis时会自动读取数据备份的rdb文件。速率大致为 1万个字符型的key 大小为1g左右的文件载入到内存需要20-30秒。

 大致流程:

     执行快照时,Redisfork一个子进程,子进程进行快照处理吧内存中的数据写到临时的rdb文件中,原有的父进程继续处理客户端请求,当子进程写完之后,用该临时的rdb文件覆盖旧的文件,一次快照完成。


 触发条件:

      1.1 根据配置规则自动进行

          redis的安装文件夹下有一个redi.conf文件,在SNAPSHOTTING板块下


 三个条件,自动满足一个即自动进行快照。

 

      1.2 执行savebgsave命令时

         save会阻塞客户端的请求,直到快照完成,bgsave不会

 

      1.3 执行flushall 命令、或设置了主从复制

    

  2.   AOF方式(全量保存,可将每一条redis命令追加写到磁盘文件中,效率略低)

     默认没有开启,在redis.conf配置文件中修改appendonly 参数为yes即可、同样它也会生成一个默认文件appendonly.aof 可以通过appendfilename 参数值修改。

    2.1 AOF方式会记录每一条命令,所以有些无效的命令也会记录,所以设置aof的重写操作 redis.conf中有默认配置

  

1
2

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

第一行的意思是,目前的AOF文件的大小超过上一次重写时的AOF文件的百分之多少时再次进行重写,如果之前没有重写过,则以启动时AOF文件大小为依据。
第二行的意思是,当AOF文件的大小大于64MB时才进行重写,因为如果AOF文件本来就很小时,有几个无效的命令也是无伤大雅的事情。
这两个配置项通常一起使用

 

2.2同步数据到磁盘

   虽然每次执行更改数据库的内容时,AOF都会记录执行的命令,但是由于操作系统本身的硬盘缓 存的缘故,AOF文件的内容并没有真正地写入硬盘,在默认情况下,操作系统会每隔30s将硬盘缓存中的数据同步到硬盘,但是为了防止系统异常退出而导致丢 数据的情况发生,我们还可以在Redis的配置文件中配置这个同步的频率:

1
2
3

# appendfsync always
appendfsync everysec
# appendfsync no

第一行表示每次AOF写入一个命令都会执行同步操作,这是最安全也是最慢的方式;
第二行表示每秒钟进行一次同步操作,一般来说使用这种方式已经足够;
第三行表示不主动进行同步操作,这是最不安全的方式。

 

  参考:

  http://qifuguang.me/2015/10/13/Redis%E6%8C%81%E4%B9%85%E5%8C%96/


 
 

 

 

 

  • 大小: 25.9 KB
  • 大小: 40 KB
  • 大小: 33.2 KB
  • 大小: 14.1 KB
分享到:
评论

相关推荐

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

    4. **Redis持久化**:为了防止数据丢失,Redis提供了两种持久化方式:RDB(快照)和AOF(Append Only File)。这两种方式的原理、优缺点和应用场景会在书中进行深入解析。 5. **Redis复制**:通过主从复制,可以...

    redis使用中文参考手册

    四、持久化 Redis提供了两种持久化方式:RDB(快照)和AOF(追加日志)。RDB会在特定时间点创建数据库的快照,而AOF记录每次写操作的日志。这两种方式各有优缺点,手册会指导如何根据业务需求选择合适的持久化策略。...

    Redis入门指南(第2版)电子书

    以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史与特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的...

    redis快速入门详解.ppt

    * 持久化(persistence):Redis 支持数据的持久化,你可以每隔一段时间将数据集转存到磁盘上(snapshot),或者在日志尾部追加每一条操作命令(append only file,aof)。 * 主从复制(master-slave replication)...

    redis入门指南2

    以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史与特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的...

    redisUtils工具类的使用

    12. **持久化配置**:配置Redis的RDB或AOF持久化策略,确保数据在服务器重启后仍能恢复。 在使用RedisUtils时,开发者需要注意合理配置Redis连接参数,如连接超时、重试次数等,以保证系统的稳定性和性能。此外,还...

    redis入门指南

    以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史与特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的...

    Redis设计与实战

    其次,Redis的设计原理包括内存管理、持久化机制和复制技术。内存管理方面,Redis使用的是简单动态字符串(SDS)来高效地处理字符串,并通过内存分配器优化内存使用。持久化机制包括RDB(快照)和AOF(追加日志)两...

    Redis入门指南(第2版)

    本书是一本Redis入门指导书籍,以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储...

    redis jredis jedis 使用

    Redis还支持事务、发布/订阅模式、持久化和复制等功能,确保数据安全和高可用性。 接下来是JRedis。JRedis是一个简单的、轻量级的Redis客户端,它提供了一个直观的API来操作Redis服务器。用户可以通过JRedis连接到...

    redis缓存安装包和教案

    Redis以其速度快、数据结构丰富、支持网络、可持久化等特性,深受开发者喜爱。本资源包含Redis缓存的安装包以及相关学习教程,特别是关于Redis持久化方式的教案,对于想要深入理解和应用Redis的开发者来说,是一份...

    Redis入门指南

    以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史与特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的...

    Redis缓存技术安装包文件.rar

    3. 持久化:讲解如何将内存中的数据保存到磁盘,以防止服务器重启造成数据丢失。常见的持久化方式有RDB(快照)和AOF(Append Only File)。 4. 主从复制:介绍如何设置Redis主从复制,实现数据备份和负载均衡。 5...

    Redis学习实践 - 超实用超详细

    数据持久化 内存回收策略 单线程高性能原理 在Redis中使用Lua脚本 原子性问题 效率问题 Lua Redis与Lua Redis集群 主从复制 主从复制原理 哨兵机制 Redis-Cluster Redis Java API 操作方法及原理分析 Jedis-sentinel...

    Redis基本使用.rar

    Redis的数据持久化和主从复制功能使其在生产环境中广泛应用。 2. **安装与启动** Redis的安装过程通常包括下载源码、编译和启动服务。在Linux环境下,可以通过编译安装并使用`redis-server`命令启动服务。Windows...

    掌握Redis:从安装到高效数据处理的核心原理与技巧

    `info`命令是用于查看Redis服务器状态的重要工具,提供了服务器环境、客户端、内存、持久化、统计、复制、CPU使用、集群和键空间等九大类信息,帮助管理员监控和诊断Redis实例的健康状况。 了解了这些基础知识,...

    redis-4.0.6.tar.gz

    在启动前,建议先修改配置文件`redis.conf`,根据实际需求设置端口、数据持久化策略、内存限制等参数。例如,你可以设置`bind 127.0.0.1`来限制只接受本地连接,以增加安全性。 Redis支持多种数据类型,包括字符串...

    redis的使用实战教程

    2. **持久化**:Redis 提供了多种持久化方式,如 RDB (Snapshotting) 和 AOF (Append Only File),确保即使在服务器重启后也能恢复数据。 3. **过期淘汰策略**:可以为键设置过期时间,当键过期时,Redis 可以自动...

Global site tag (gtag.js) - Google Analytics