Redis作为缓存技术之一,已经被大量使用。现对Redis的代码做一次总结。
1、分布式架构为什么要用缓存?以sesson处理为例,如果一个项目部署了多个节点,部署在多个服务器上。如何做session共享,很显然,大家会想到有数据库存储session会话信息,数据库存在性能瓶颈,所以引入缓存。无论是memcached也好,redis也好均能实现。在微服务架构中,各中心独立,解耦合,如果作为一个管理后台,或者实现单点登录,使用缓存处理会话信息是优先的方案(zookepper也有解决机制)。原理:浏览器发起请求访问,服务器接受,产生seesion信息,如sessionID,将会话信息存储到缓存中,然后返回给浏览器,浏览器用cookie存储sessionID等会话信息。那么同一个域下的请求,都将用同一个seesionID去请求服务器,服务器接收后去缓存中查询是否有相应的会话信息,这样就实现了浏览器-服务器-sesion-redis的一个机制。
具体实现代码参考:http://blog.csdn.net/u013623705/article/details/77187930
2、高并发状态下为什么要用缓存cache?原因在于传统的关系系数据库效率有限,高并发状态下,服务器无法提供良好的数据库服务,存在性能瓶颈。将项目中会出现并发瓶颈的每个点,在原有数据库操作的基础上,增加缓存操作。例如 一个查询操作,先从缓存中取,取到则返回,取不到则去数据库查,数据库的查询结果再入缓存。这样保证了,在数据库中与缓存中都有一份目标数据。提升查询效率,从而提升业务处理效率,提高系统性能,提升用户体验。
3、Jedis 基于 redis.clients pom包,缓存操作过程 即从JedisPool拉取一个连接实例,执行数据存取,使用后归还及释放。 Jedis 是以往开发人员使用的缓存实现方式。
具体实现代码参考:http://blog.csdn.net/u013623705/article/details/77184637
4、RedisTemplate出现后,不再使用Jedis,基于spring-data-redis、redis.clients pom包。缓存操作过程即 从 RedisConnectionFactory 拉取连接,执行数据存取,使用后的归还释放 底层均有实现 无须手动加代码,因而优化了缓存连接引发的性能。
具体实现代码参考:http://blog.csdn.net/u013623705/article/details/77184675
redis事务测试:
/*****Redis事务**********/ //由 MULTI 开始一个事务,将多个命令入队到事务中。 String key = "redis-tra" + "nsactional"; redisTemplate.multi(); //redis命令1 redisTemplate.opsForValue().set("redis-transactional","test"); //由 EXEC 命令触发事务,一并执行事务中的所有命令。 redisTemplate.exec(); System.out.println(redisTemplate.opsForValue().get(key)); //取消事务,放弃执行事务块内的所有命令。 // redisTemplate.discard(); // System.out.println(redisTemplate.opsForValue().get(key)); /*****Redis事务**********/
关于 Redis 、Memcached能缓存技术性能对比 ,可参阅这篇文章,该博主有做相关测试 并作出报告:
http://blog.sina.com.cn/s/blog_6145ed810102vefe.html