redis缓存
分布式项目的常见问题:对于首页每天有大量的人访问,对数据库造成很大的访问压力,甚至是瘫痪。那如何解决呢?我们通常的做法有两种:一种是数据缓存、一种是网页静态化。
redis是一款开源的key-value数据库,运行在内存中,由ansic编写。企业开发通常采用redis来实现缓存。同类的产品有memcache、mongodb等
jedis是redis官方推出的一卷面向java的客户端,提供了很多接口供java语言调用。可以在redis官网下载,当然还有一些开源爱好者提供的客户端,如jredis、srp等等,推荐使用jedis
springdataredis是spring大家族的一部分,提供了在spring应用中通过简单的配置访问redis服务,对redis底层开发包
(jedis, jredis, and rjc)进行了高度封装,redistemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。
spring-data-redis针对jedis提供了如下功能:
1.连接池自动管理,提供了一个高度封装的“redistemplate”类
2.针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口
valueoperations:简单k-v操作
setoperations:set类型数据操作
zsetoperations:zset类型数据操作
hashoperations:针对map类型的数据操作
listoperations:针对list类型的数据操作
spring data redis入门小demo:
1. 创建maven工程
2. 引入spring、redis依赖
<!--spring依赖--> <dependencies> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>4.9</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-context</artifactid> <version>4.2.4.release</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-beans</artifactid> <version>4.2.4.release</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-context-support</artifactid> <version>4.2.4.release</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-test</artifactid> <version>4.2.4.release</version> </dependency> <!--springdataredis依赖--> <dependency> <groupid>redis.clients</groupid> <artifactid>jedis</artifactid> <version>2.8.1</version> </dependency> <dependency> <groupid>org.springframework.data</groupid> <artifactid>spring-data-redis</artifactid> <version>1.7.2.release</version> </dependency> </dependencies>
3. 在src/main/resources下创建properties文件夹,建立redis-config.properties
redis.host=127.0.0.1 redis.port=6379 redis.pass= redis.database=0 redis.maxidle=300 redis.maxwait=3000 redis.testonborrow=true
maxidle :最大空闲数
maxwaitmillis:连接时的最大等待毫秒数
testonborrow:在提取一个jedis实例时,是否提前进行验证操作;如果为true,则得到的jedis实例均是可用的
4. 在src/main/resources下创建spring文件夹 ,创建applicationcontext-redis.xml
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:property-placeholder location="classpath*:*.properties" /> <!-- redis 相关配置 --> <bean id="poolconfig" class="redis.clients.jedis.jedispoolconfig"> <property name="maxidle" value="${redis.maxidle}" /> <property name="maxwaitmillis" value="${redis.maxwait}" /> <property name="testonborrow" value="${redis.testonborrow}" /> </bean> <bean id="jedisconnectionfactory" class="org.springframework.data.redis.connection.jedis.jedisconnectionfactory" p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}" p:pool-config-ref="poolconfig"/> <bean id="redistemplate" class="org.springframework.data.redis.core.redistemplate"> <property name="connectionfactory" ref="jedisconnectionfactory" /> </bean> </beans>
注意:
在数据发生变化时,需要将缓存数据清空,这样再次查询时才能获取最新的数据