springboot集成redis
来源:互联网 发布:tf卡测速软件 编辑:程序博客网 时间:2024/06/08 11:29
springboot集成redis,解决了手动实现从缓存获取,如果缓存不存在则从数据库获取这样的麻烦逻辑。,springboot通过注解以切面的方式实现从缓存中获取数据。 Springboot集成了多种缓存。他是根据下面的顺序进行判断缓存的提供者
Generic
JCache (JSR-107)
EhCache 2.x
Hazelcast
Infinispan
Redis
Guava
Simple
由于我这里只配置了redis,所以会以redis作为缓存的提供者。
pom中增加spring-boot-starter-cache.
在application.properties中增加redis 的配置
#redis spring.redis.host=192.168.1.105spring.redis.port=6379spring.redis.password=spring.redis.pool.maxActive=8spring.redis.pool.maxWait=5000spring.redis.pool.maxIdle=8spring.redis.pool.minIdle=0spring.redis.timeout=0
下面编写RedisConfig类。其中RedisConfig类和RedisService类是从网上找的。。。。 功能还是比较通用的。。。。非常感谢提供者
public class RedisConfig extends CachingConfigurerSupport { /** * 生成key的策略 * @return */ @Bean public KeyGenerator keyGenerator() { return new KeyGenerator() { @Override public Object generate(Object target, Method method, Object... params) { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()); sb.append(method.getName()); for (Object obj : params) { sb.append(obj.toString()); }// System.out.println(sb.toString()); return sb.toString(); } }; } /** * 管理缓存 */ @Bean public CacheManager cacheManager(RedisTemplate redisTemplate) { RedisCacheManager rcm = new RedisCacheManager(redisTemplate); return rcm; } /** * RedisTemplate配置 */ @Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) { StringRedisTemplate template = new StringRedisTemplate(factory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; }}
@Servicepublic class RedisService { @Autowired private RedisTemplate redisTemplate; /** * 写入缓存 * @param key * @param value * @return */ public boolean set(final String key, Object value) { boolean result = false; try { ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue(); operations.set(key, value); result = true; } catch (Exception e) { e.printStackTrace(); } return result; } /** * 写入缓存设置时效时间 * @param key * @param value * @return */ public boolean set(final String key, Object value, Long expireTime) { boolean result = false; try { ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue(); operations.set(key, value); redisTemplate.expire(key, expireTime, TimeUnit.SECONDS); result = true; } catch (Exception e) { e.printStackTrace(); } return result; } /** * 批量删除对应的value * @param keys */ public void remove(final String... keys) { for (String key : keys) { remove(key); } } /** * 批量删除key * @param pattern */ public void removePattern(final String pattern) { Set<Serializable> keys = redisTemplate.keys(pattern); if (keys.size() > 0) redisTemplate.delete(keys); } /** * 删除对应的value * @param key */ public void remove(final String key) { if (exists(key)) { redisTemplate.delete(key); } } /** * 判断缓存中是否有对应的value * @param key * @return */ public boolean exists(final String key) { return redisTemplate.hasKey(key); } /** * 读取缓存 * @param key * @return */ public Object get(final String key) { Object result = null; ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue(); result = operations.get(key); return result; } /** * 哈希 添加 * @param key * @param hashKey * @param value */ public void hmSet(String key, Object hashKey, Object value){ HashOperations<String, Object, Object> hash = redisTemplate.opsForHash(); hash.put(key,hashKey,value); } /** * 哈希获取数据 * @param key * @param hashKey * @return */ public Object hmGet(String key, Object hashKey){ HashOperations<String, Object, Object> hash = redisTemplate.opsForHash(); return hash.get(key,hashKey); } /** * 列表添加 * @param k * @param v */ public void lPush(String k,Object v){ ListOperations<String, Object> list = redisTemplate.opsForList(); list.rightPush(k,v); } /** * 列表获取 * @param k * @param l * @param l1 * @return */ public List<Object> lRange(String k, long l, long l1){ ListOperations<String, Object> list = redisTemplate.opsForList(); return list.range(k,l,l1); } /** * 集合添加 * @param key * @param value */ public void add(String key,Object value){ SetOperations<String, Object> set = redisTemplate.opsForSet(); set.add(key,value); } /** * 集合获取 * @param key * @return */ public Set<Object> setMembers(String key){ SetOperations<String, Object> set = redisTemplate.opsForSet(); return set.members(key); } /** * 有序集合添加 * @param key * @param value * @param scoure */ public void zAdd(String key,Object value,double scoure){ ZSetOperations<String, Object> zset = redisTemplate.opsForZSet(); zset.add(key,value,scoure); } /** * 有序集合获取 * @param key * @param scoure * @param scoure1 * @return */ public Set<Object> rangeByScore(String key,double scoure,double scoure1){ ZSetOperations<String, Object> zset = redisTemplate.opsForZSet(); return zset.rangeByScore(key, scoure, scoure1); }}
下面在TestDaoImpl的findByCondition方法上加上@Cacheable(value=”test_cache”)
在执行findByCondition之前会到相应的key中取值,如果能取到直接返回,否则执行方法体获取数据。避免了我们写很多业务逻辑。
在Application类上方加上@EnableCaching
启动。。 运行http://localhost:8089/spbt/getCondition?state=1
怎么验证数据写入到redis里呢。。。
通过RedisConfig类中的keyGenerator方法我们知道缓存中key 的生成方式。 可以通过System.out.println(sb.toString())得到。
编写测试类
//测试数据是否进入到redis中。。。。。。。。。。。。 List list = new ArrayList() ; Collection list1 = (Collection)redisService.get("com.cy.spbt.dao.impl.TestDaoImplfindByCondition1") ; System.out.println(list1.size());
打印:968
说明com.cy.spbt.dao.impl.TestDaoImplfindByCondition1这个key里有值。
- SpringBoot -- 集成Redis/CacheManager
- SpringBoot -- 集成Redis/CacheManager
- springboot集成redis
- springboot集成Redis
- springboot 集成redis 哨兵
- springboot集成Redis
- SpringBoot集成Redis
- springboot集成redis详解
- 关于SpringBoot 集成 Redis
- SpringBoot集成Redis
- springboot集成redis
- SpringBoot集成Redis
- SpringBoot集成Redis
- 在SpringBoot中集成Redis
- SpringBoot 入门教程:集成mybatis,redis
- SpringBoot 入门教程:集成mybatis,redis
- SpringBoot 入门教程:集成mybatis,redis
- SpringBoot 入门教程:集成mybatis,redis
- MYSQL权限
- [牛客网,剑指offer,python] 跳台阶
- 客户端的配置与应用
- gdb下的多进程多线程的调试
- 引用与指针
- springboot集成redis
- [LeetCode] LFU Cache
- Recurrent Convolutional Network for Video-based Person Re-Identification 学习笔记
- 进入一个APP时对手机网络判断(使用广播和不使用广播)
- 零屏框架总结
- 一年之期
- Navigator的教程
- sdl实现计时器
- 洛谷 P3818 小A和uim之大逃离 II