思路:既然使用redis就要添加redis依赖,redis是<key.value>的存储方式,支持字符串存储。有了jar包,就要把我们的数据存进去,读出来。redis不支持存储对象,比如User,所以需要把我们的对象User转换为字符串,再存进去。读取的时候再把json字符串转换为对象User.删除直接使用key就删除了。
1.添加依赖pom.xm;
<!--缓存支持 start--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency>
<!-- gson用于处理redis和实体的转换 --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.4</version> </dependency>
2.Springboot配置redis,包括配置文件和javaBean配置(都要配置)
1.修改springboot的application.properties 加上下面配置(修改为自己的)
#Redis缓存配置 #Redis数据库名称 spring.redis.database=0 # 主机 spring.redis.host=127.0.0.1 #密码 默认为空 #spring.redis.password= #端口 spring.redis.port=6379 # 最大空闲链接 spring.redis.pool.max-idle=8 # 最小空闲链接 spring.redis.pool.min-idle=0 #连接池最大连接数(使用负值表示没有限制) spring.redis.pool.max-active=8 #连接池最小连接数(使用负值表示没有限制) spring.redis.pool.max-wait=-1 # 连接超时时间(毫秒) spring.redis.timeout=02.javaBean 配置
@Configuration public class RedisCacheConfig {
/**
缓存管理器.
@param redisTemplate * @return */ @Bean public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) { CacheManager cacheManager = new RedisCacheManager(redisTemplate); return cacheManager; }@Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>(); redisTemplate.setConnectionFactory(factory); //key序列化方式;(不然会出现乱码;),但是如果方法上有Long等非String类型的话,会报类型转换错误; //所以在没有自己定义key生成策略的时候,以下这个代码建议不要这么写,可以不配置或者自己实现ObjectRedisSerializer //或者JdkSerializationRedisSerializer序列化方式; RedisSerializer<String> redisSerializer = new StringRedisSerializer();//Long类型不可以会出现异常信息; redisTemplate.setKeySerializer(redisSerializer); redisTemplate.setHashKeySerializer(redisSerializer); return redisTemplate; }
配置到这里就结束了,这时候可以测试存,读,删了。(记得打开redis)
3.利用RedisTemplate封装一个基本的工具类UserRedis,方便使用
@Repository public class UserRedis { @Autowired RedisTemplate<String, String> redisTemplate;
/**
加入缓存,设定有效期
@param key * @param time * @param object */ public void add(String key, Long time, Object object) { Gson gson = new Gson(); redisTemplate.opsForValue().set(key, gson.toJson(object), time, TimeUnit.MINUTES); System.out.println("添加到缓存成功---Key:" + key + "---Value:" + object.toString()); }/**
从缓存中获取值
@param key
@return */ public Object get(String key) { Gson gson = new Gson(); Object object = null; String objjson = redisTemplate.opsForValue().get(key); if (!StringUtils.isEmpty(objjson)) { object = gson.fromJson(objjson, Object.class); } System.out.println("从缓存中获取:---Key:" + key + "---value:" + object.toString()); return object; }/**
从缓存中删除
@param key */ public void delete(String key) { redisTemplate.opsForValue().getOperations().delete(key); System.out.println("从缓存中删除完毕--key:" + key); }/**
从缓存中获取List
@param key * @return */ public List<Object> getList(String key) { Gson gson = new Gson(); List<Object> ts = null; String listuser = redisTemplate.opsForValue().get(key); if (!StringUtils.isEmpty(listuser)) { ts = gson.fromJson(listuser, new TypeToken<List>() { //存的是list集合,获取的时候需要指定其类型 }.getType()); } System.out.println("从缓存中获取list---key:" + key); return ts; }
4.现在已经封装好了,bean 名称是UserRedis,下面是在一个Controller中测试使用这个bean存,读数据
//添加到缓存 @RequestMapping(value = "/redis/add/{name}") @ResponseBody public String redistestadd(@PathVariable String name) { User user = userServiceImpl.findByUsername(name);//根据用户名查询到用户 userRedis.add(name, 10L, user); return JSON.toJSONString(user);//alibaba.fastjson 也可以把对象数组转为json }//从缓存中读取数据@RequestMapping(value = "/redis/get/{name}") @ResponseBody public String redistestget(@PathVariable String name) { Object user = userRedis.get(name);//根据用户名查询到用户 System.out.println("从缓存中拿到的User:" + user.toString()); return JSON.toJSONString(user);//alibaba.fastjson 也可以把对象数组转为json }//删除数据@RequestMapping(value = "/redis/delete/{name}") @ResponseBody public void redistestdelete(@PathVariable String name) { System.out.println("name:" + name); //根据用户名查询到用户 userRedis.delete(name); }//从缓存读取List对象@RequestMapping(value = "/redis/listget/{name}") @ResponseBody public String redistestlistget(@PathVariable String name) { System.out.println("name:" + name); List<Object> users = userRedis.getList(name); return JSON.toJSONString(users); }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)