带上我自己初步整合的架构Demo供大家参考:点击下载
Redis,能高速读取缓存数据,常用于PV较大的系统或业务。例如秒杀业务。
这里,整合了一下SpringMVC+Redis,希望对大家有帮助,说明一下,
这里用的是spirng-4.3.5,Jedis-2.6.1, Spring-data-redis-1.4.1.RELEASE.jar版本
application.properties:
# redis setting
redis.host=127.0.0.1
redis.port=6379
redis.pass=hzj123456
redis.maxIdle=20
redis.maxTotal=500
redis.maxWaitMillis=1000
redis.testOnBorrow=true
这里解释一下testOnBorrow:在获取连接时检测连接是否有效
当然还有其他配置,这里就不一一说明,而且我本人可能配置不是很完善,还有很多属性要看具体的系统情况选择,这里紧紧是测试使用
redis-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="
http://www.springframework.org/schema/beans"
xmlns:p="
http://www.springframework.org/schema/p"
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="
http://www.springframework.org/schema/context"
xmlns:jee="
http://www.springframework.org/schema/jee" xmlns:tx="
http://www.springframework.org/schema/tx"
xmlns:aop="
http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<!-- redis的配置 -->
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxIdle" value="${redis.maxIdle}"/>
<property name="maxTotal" value="${redis.maxTotal}"/>
<property name="maxWaitMillis" value="${redis.maxWaitMillis}"/>
<property name="testOnBorrow" value="${redis.testOnBorrow}"/>
</bean>
<bean id="connectionFactory" 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.StringRedisTemplate"
p:connection-factory-ref="connectionFactory"/>
</beans>
Spring-MVC的配置文件
applicationContext-init.xml 里面引入redis
。。。
<!-- 引入redis -->
<import resource="redis-config.xml"/>
。。。
从上面的redis配置中可以看到,我设置了密码,redis默认安装时没有密码的,这里我们需要对当前地址和端口进行密码授权操作
如下:
Redis 默认安装时没有密码的,我们可以按照下列方式设置一个密码
设置密码后如何登陆:
redis.host=127.0.0.1 #Redis服务器地址
redis.port=6379 #服务端口
redis.timeout=3000 #超时时间:单位ms
redis.password=hzj123456 #授权密码
redis.pool.maxActive=200 #最大连接数:能够同时建立的“最大链接个数” //高版本改为maxTotal
redis.pool.maxIdle=20 #最大空闲数:空闲链接数大于maxIdle时,将进行回收
redis.pool.minIdle=5 #最小空闲数:低于minIdle时,将创建新的链接
redis.pool.maxWait=3000 #最大等待时间:单位ms //高版本改为maxWaitMillis
redis.pool.testOnBorrow=true #使用连接时,检测连接是否成功
redis.pool.testOnReturn=true #返回连接时,检测连接是否成功
否则访问的过程中会出现:
JedisDataException: ERR Client sent AUTH, but no password is set 这个错误
基本代码编写:
注入redisTemplate:(
注入的地方自己决定)
测试Redis
controller:···········································································
@ResponseBody
@RequestMapping("/count")
public String count(){
int count = sqlUserService.count();
System.out.println("count: "+count);
return ""+count;
}
service:·························································
/**
* 返回记录总数
* @return 返回记录总数
*/
public int count(){
return dao.count();
}
dao:····················································
这里,我只带上一个使用了redis保存数据的方法count,大家参考使用
/**
* 返回记录总数
* @return 返回记录总数
*/
@Override
public int count(){
int count = (int) redisTemplate.execute(new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection paramRedisConnection)
throws DataAccessException {
byte[] c = redisTemplate.getStringSerializer().serialize("count");
if(paramRedisConnection.exists(c)){
System.out.println("存在");
return Integer.parseInt(redisTemplate.getStringSerializer().deserialize(paramRedisConnection.get(c)));
}else{
System.out.println("不存在");
int nowCount = mapper.count();
paramRedisConnection.set(
redisTemplate.getStringSerializer().serialize("count"),
redisTemplate.getStringSerializer().serialize(""+nowCount));
return nowCount;
}
}
});
return count;
}
第一次访问:
第二次访问:
说明redis可用,
完美