在ssm项目中使用redisTemplate
来源:互联网 发布:javascript简单游戏 编辑:程序博客网 时间:2024/05/20 02:54
- 第一步,导入相关的jar包:需要注意jedis和data-redis的版本,否则容易出现报错
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.4.1</version> </dependency> <dependency> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>1.6</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.3.4.RELEASE</version> </dependency>
- 在spring写相关的配置,由于笔者使用的spring版本略低,导致需要自己单独配置jedispoolConfig,首先就是 redisCopnfig.propertities文件
redis.host=localhostredis.port=6379redis.maxIdle=300redis.maxActive=600 redis.maxWait=1000redis.testOnBorrow=true
- 使用springMVC来统一载入配置文件
spring-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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <context:property-placeholder location="classpath:redisConfig.properties" ignore-unresolvable="true" /> <bean id="MyjedisPoolConfig" class="com.xxx.MyjedisPoolConfig" > </bean> <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:host-name="${redis.host}" p:port="${redis.port}" p:pool-config-ref="MyjedisPoolConfig"/> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="connectionFactory" /> </bean> </beans>
4.其中所写的 com.xxx.MyjedisPoolConfig是重写了redis.clients.jedis.JedisPoolConfi中的JedisPoolConfig,
@Componentpublic class MyjedisPoolConfig extends JedisPoolConfig{ @Value("${redis.maxIdle}") private int maxIdle; @Value("${redis.maxActive}") private int maxTotal; @Value("${redis.testOnBorrow}") private boolean testOnBorrow;或者是使用以下写死的 /* private int maxIdle=300; private int maxTotal=600; private boolean testOnBorrow=true;*/ public MyjedisPoolConfig(){} public MyjedisPoolConfig(int maxIdle, int maxTotal, boolean testOnBorrow) { this.maxIdle = maxIdle; this.maxTotal = maxTotal; this.testOnBorrow = testOnBorrow; } @Override public int getMaxIdle() { return maxIdle; } @Override public void setMaxIdle(int maxIdle) { this.maxIdle = maxIdle; } @Override public int getMaxTotal() { return maxTotal; } @Override public void setMaxTotal(int maxTotal) { this.maxTotal = maxTotal; } @Override public boolean getTestOnBorrow() { return testOnBorrow; } public void setTestOnBorrow(boolean testOnBorrow) { this.testOnBorrow = testOnBorrow; }}
- 配置了spring的容器之后,就需要编写工具类了,spring-data-redis提供的redisTemplate类提供了对redis操作的简单封装,先写一个抽象类,然后写一个接口,然后实现之,
*抽象类,用于注入redisTemplate*public abstract class AbstractBaseRedisDao<K,V> { public AbstractBaseRedisDao(){ } @Autowired protected RedisTemplate<K, V> redisTemplate; /** * 设置redisTemplate * @param redisTemplate the redisTemplate to set */ public void setRedisTemplate(RedisTemplate<K, V> redisTemplate){ this.redisTemplate=redisTemplate; } /** * 获取 RedisSerializer * <br>------------------------------<br> */ protected RedisSerializer<String> getRedisSerializer() { return redisTemplate.getStringSerializer(); }}*接口*public interface RedisSaveManageService { /** * 新增 * @return */ boolean add(String key, String value); /** * 批量新增 使用pipeline方式 * @return */ boolean add(List<String> key, List<String> values); /** * 删除 * @param key */ void delete(String key); /** * 删除多个 * @param keys */ void delete(List<String> keys); /** * 修改 * @return */ boolean update(String key, String value); /** * 通过key获取 * @return */ String get(String key); }*接口实现类:*@Servicepublic class RedisSaveManagerServiceImpl extends AbstractBaseRedisDao<String, String> implements RedisSaveManageService { /** * 新增 * @return */ @Override public boolean add( final String key,final String value) { // TODO Auto-generated method stub boolean result=redisTemplate.execute(new RedisCallback<Boolean>() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { // TODO Auto-generated method stub RedisSerializer<String> serializer=getRedisSerializer(); //序列化 byte[] key2=serializer.serialize(key); byte[] value2=serializer.serialize(value); return connection.setNX(key2, value2); } }); return result; } /** * 批量新增 使用pipeline方式 *@return */ @Override public boolean add(final List<String> key, final List<String> values) { boolean result=redisTemplate.execute(new RedisCallback<Boolean>() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer=getRedisSerializer(); for (int i = 0; i < values.size(); i++) { byte[] key2=serializer.serialize(key.get(i)); byte[] value2=serializer.serialize(values.get(i)); connection.setNX(key2, value2); } return true; } },false,true); return result; } @Override public void delete(String key) { List<String> list = new ArrayList<>(); list.add(key); delete(list); } @Override public void delete(final List<String> keys) { redisTemplate.execute(new RedisCallback<Boolean>() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { // TODO Auto-generated method stub RedisSerializer<String> serializer=getRedisSerializer(); //序列化 for(String k:keys){ byte[] key = serializer.serialize(k); connection.del(key); } return true; } }); } @Override public boolean update(final String key,final String value) { // TODO Auto-generated method stub if (get(key) == null) { throw new NullPointerException("数据行不存在, key = " + key); } boolean result = redisTemplate.execute(new RedisCallback<Boolean>() { public Boolean doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] key2 = serializer.serialize(key); byte[] value2 = serializer.serialize(value); connection.set(key2, value2); return true; } }); return result; } @Override public String get(final String key) { String result = redisTemplate.execute(new RedisCallback<String>() { public String doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] key2 = serializer.serialize(key); byte[] value = connection.get(key2); if (value == null) { return null; } String value2 = serializer.deserialize(value); return value2; } }); return result; }}
- 简单的使用,在controller中涉及到查询的部分,都可以先在redis中进行一次判断,如果没有,那就进入DB进行查询,查询到了就存储在redis中,为下一次查询使用,从而提高效率
阅读全文
0 0
- 在ssm项目中使用redisTemplate
- Redis配置ssm+redisTemplate
- 在ssm项目中引入shiro
- ssm项目中使用注解配置事物
- SSM项目中使用Redis缓存
- SSM项目中使用Log4J日志
- RedisTemplate使用
- spring boot中使用resid-RedisTemplate
- 在已有的ssm项目中添加xfire
- ssm项目中使用mybatis配置连表查询
- 关于spring中使用redis中文乱码问题(redistemplate)
- SSM(七)在JavaWeb应用中使用Redis
- 在idea中使用SSM实例(eclipse大致一样)
- 关于在SSM中使用注解的方式进行事务管理
- SSM(七)在JavaWeb应用中使用Redis
- 在 SSM 中使用 Ajax 进行数据传递
- RedisTemplate的简单使用
- SSM框架——Spring+SpringMVC+Mybatis的搭建教程 一:概述 SSM框架在项目开发中经常使用到,相比于SSH框架,它在仅几年的开发中运用的更加广泛。 Spring作为一个轻量级
- rsa+aes非对称加密实例(两对公私钥)
- 《DeepWalk: Online Learning of Social Representations》学习笔记
- RBAC总结
- SSD源码解读1~~~~~~~~~~ssd_pascal.py
- 适配器模式
- 在ssm项目中使用redisTemplate
- 一名 40 岁“老”程序员的反思
- tr
- 转换字符串格式为字符+连续出现的次数
- 极简单片机开发
- ftp(vsftp) 在Cortex-A9 ARM CPU s5p4418上的移植
- 枚举类和常量
- install php7 mysql5.6 apache2.4 in centos 6 or 7
- 图片按指定比例缩放并压缩至指定大小,解决保存图片文件体积过大bug。