博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot系列十 Spring-Data-Redis
阅读量:5751 次
发布时间:2019-06-18

本文共 4438 字,大约阅读时间需要 14 分钟。

hot3.png

基本使用

依赖和配置

依赖

org.springframework.boot
spring-boot-starter-data-redis

配置

spring:  redis:    database: 0    host: localhost    port: 6379    password:    jedis:      pool:        max-active: 8 #=最大连接数(使用负值表示没有限制)        max-wait: -1s #最大阻塞时间(使用负值表示没有限制)        max-idle: 8 #最大空闲连接        min-idle: 0 #最小空闲连接    timeout: 10s

使用

@RestController@RequestMapping("/redis")public class RedisResource {    @Autowired    private StringRedisTemplate stringRedisTemplate;    @PostMapping("/test")    public String test(@RequestParam(defaultValue = "key") String key, @RequestParam(defaultValue = "val") String val) {        stringRedisTemplate.opsForValue().set(key, val);        return "key:" + key + ", val=" + stringRedisTemplate.opsForValue().get(key);    }}

测试

写个启动类,启动后访问

查看redis

$ telnet localhost 6379Trying ::1...Connected to localhost.Escape character is '^]'.$ get aabc

CacheManager缓存管理

使用cacheManager,结合spring可以使用@Cacheable@CachePut@CacheEvict添加到方法上面,来基于方法参数和返回值看来操作缓存

RedisConfig配置

@Configuration@EnableCachingpublic class RedisCachingConfigurer extends CachingConfigurerSupport {    private static final Duration timeToLive = Duration.ZERO;    @Bean    public CacheManager cacheManager(RedisConnectionFactory factory) {        RedisSerializer
redisSerializer = new StringRedisSerializer(); 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); // 配置序列化(解决乱码的问题) RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(timeToLive) .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)) .disableCachingNullValues(); RedisCacheManager cacheManager = RedisCacheManager.builder(factory) .cacheDefaults(config) .build(); return cacheManager; }}

注解操作缓存

@Service@Slf4jpublic class UserService {    private Map
data = new ConcurrentHashMap<>(10); //添加缓存 @Cacheable(value = "userCache", key = "#id", unless = "#result==null") public User get(int id){ log.info("不走redis缓存,查询用户,id={}", id); return data.get(id); } //修改缓存 @CachePut(value = "userCache", key = "#id") public User save(int id, String name){ data.put(id, new User(id, name)); return data.get(id); } //删除缓存 @CacheEvict(value = "userCache", key = "#p0") public void del(int id){ data.remove(id); } @Data @AllArgsConstructor @NoArgsConstructor public static class User implements Serializable{ private int id; private String name; }}

接口测试

@RestController@RequestMapping("/redis")public class RedisResource {    @Autowired private StringRedisTemplate stringRedisTemplate;    @Autowired private UserService userService;    @PostMapping("/test")    public String test(@RequestParam(defaultValue = "key") String key, @RequestParam(defaultValue = "val")String val){        stringRedisTemplate.opsForValue().set(key, val);        return "key:" + key + ", val=" + stringRedisTemplate.opsForValue().get(key);    }    /**--------------cacheManager测试--------------*/    @GetMapping("/user")    public UserService.User get(int id){        return userService.get(id);    }    @PostMapping("/user")    public UserService.User save(int id, String name){        return userService.save(id, name);    }    @DeleteMapping("/user")    public String del(int id){        userService.del(id);        return "delete success.";    }}

启动项目后,测试。第一次redis没有任何缓存值

GET http://localhost:8080/redis/user?id=1

控制台打印:

[nio-8080-exec-4] c.yimingkeji.redis.service.UserService   : 不走redis缓存,查询用户,id=1

然后调用post方法来添加缓存

POST http://localhost:8080/redis/user?id=1&name=哈哈哈
{    "id": 1,    "name": "哈哈哈"}

再次查询

GET http://localhost:8080/redis/user?id=1
{    "id": 1,    "name": "哈哈哈"}

查看redis

然后再调用delete方法删除缓存

DELETE http://localhost:8080/redis/user?id=1

再次查看redis

项目源码

转载于:https://my.oschina.net/yimingkeji/blog/2967267

你可能感兴趣的文章
【许晓笛】从零开始运行EOS系统
查看>>
【跃迁之路】【460天】程序员高效学习方法论探索系列(实验阶段217-2018.05.11)...
查看>>
C++入门读物推荐
查看>>
TiDB 源码阅读系列文章(七)基于规则的优化
查看>>
Spring之旅第八站:Spring MVC Spittr舞台的搭建、基本的控制器、请求的输入、表单验证、测试(重点)...
查看>>
数据结构与算法——常用排序算法及其Java实现
查看>>
你所不知的Webpack-多种配置方法
查看>>
webpack+typescript+threejs+vscode开发
查看>>
python读excel写入mysql小工具
查看>>
如何学习区块链
查看>>
搜索问题的办法
查看>>
微信分销系统商城营销5大重点
查看>>
求职准备 - 收藏集 - 掘金
查看>>
Linux-Centos启动流程
查看>>
php 设计模式
查看>>
后端技术精选 - 收藏集 - 掘金
查看>>
Laravel 服务容器
查看>>
mac安装kubernetes并运行echoserver
查看>>
多页架构的前后端分离方案(webpack+express)
查看>>
算法(第4版) Chapter 1
查看>>