• springboot + redis


    1.添加依赖包

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

    2.配置redis属性

    spring.redis.database=0
    spring.redis.host=127.0.0.1
    spring.redis.port=6379
    spring.redis.password=
    spring.redis.pool.max-active=8
    spring.redis.pool.max-wait=-1
    spring.redis.pool.max-idle=8
    spring.redis.pool.min-idle=0
    spring.redis.timeout=0

    3.创建redis缓存类----》RedisCacheConfig.java

    @Configuration
    @EnableCaching
    public class RedisCacheConfig {
    @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;
    }
    }

    4.创建redis工具类----》RedisUtil.java

    @SuppressWarnings("unchecked")
    @Component
    public class RedisUtil {
    @SuppressWarnings("rawtypes")
    @Autowired
    private RedisTemplate redisTemplate;
    /**
    * 批量删除对应的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 String get(final String key) {
    Object result = null;
    redisTemplate.setValueSerializer(new StringRedisSerializer());
    ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
    result = operations.get(key);
    if(result==null){
    return null;
    }
    return result.toString();
    }
    /**
    * 写入缓存
    *
    * @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;
    }

    public boolean hmset(String key, Map<String, String> value) {
    boolean result = false;
    try {
    redisTemplate.opsForHash().putAll(key, value);
    result = true;
    } catch (Exception e) {
    e.printStackTrace();
    }
    return result;
    }

    public Map<String,String> hmget(String key) {
    Map<String,String> result =null;
    try {
    result= redisTemplate.opsForHash().entries(key);
    } catch (Exception e) {
    e.printStackTrace();
    }
    return result;
    }
    }

    5.编写测试代码(以统计用户个数为例,将用户个数写入缓存,然后读取)

    1.通过定时任务获取用户个数,并写入缓存

    @Scheduled(cron = "*/10 * * * * ?")
    public void runJobA(){
    Long userCount = 0l;
    List<SysUser> list = sysUserService.getUserList(null, null, null);
    if(list != null){
    userCount = (long) list.size();
    }
    System.out.println(userCount);
    redisUtil.set("userCount", userCount.toString(), 100l);
    }

    2.从缓存获取用户个数

    在SysUserController.java中添加以下代码

    @RequestMapping(value="/getUserCount")

    @ResponseBody
    public String getUserCount(){
    return sysUserService.getUserCount();
    }

    在SysUserService.java添加以下代码

    public String getUserCount(){
    return redisUtil.get("userCount");
    }

    6.测试

  • 相关阅读:
    计算机硬件
    队列、堆、栈、堆栈的区别
    操作系统与应用程序的关系
    DNS与HTTPDNS
    配置静态路由传送网络包
    django的nginx配置
    视频流和文件传输相关协议
    HTTPS 对称加密和非对称加密
    HTTP1.1/2.0与QUIC协议
    mysql join联表 + id自增
  • 原文地址:https://www.cnblogs.com/chao555/p/9037291.html
Copyright © 2020-2023  润新知