`
TableMiao
  • 浏览: 73837 次
  • 性别: 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面试题50道(含答案)_.pdf

    36、Redis 持久化数据和缓存怎么做扩容? 37、分布式 Redis 是前期做还是后期规模上来了再做好?为 什么? 38、Twemproxy 是什么? 39、支持一致性哈希的客户端有哪些? 40、Redis 与其他 key-value 存储有什么不同...

    redis入门指南2

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

    redis入门指南

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

    Redis入门指南 JB51 NET

    队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的方式介绍了 PHP、Ruby、Python和Node.js这4种语言的Redis客户端库的使用方法。 本书的目标读者不仅包括Redis的新手,还包括那些己经掌握...

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

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

    Redis入门指南(第2版)

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

    Redis入门指南

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

    redis基础资料

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

    Redis入门指南(第2版)

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

    Redis入门指南_第2版_高清版

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

    ChinaDBA.net出品《Redis实战》

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

    Redis与MongoDB

    与此同时,Redis也提供了持久化机制,能够将内存中的数据保存到硬盘上,在发生意外状况时数据也不会丢掉。此外,Redis还支持键过期、地理信息运算、发布订阅、事务、管道、Lua脚本扩展等功能, 三、MongoDB概述 ...

Global site tag (gtag.js) - Google Analytics