首页 > 编程语言 > 详细

SpringBoot基于redis的缓存

时间:2020-12-28 10:39:44      阅读:23      评论:0      收藏:0      [点我收藏+]

SpringBoot基于redis的缓存

缓存是非常重要的,对于那些经常使用却又不经常改变的数据非常适合做缓存,这样可以极大的缓解数据库的压力,提升运行的效率,

为什么选用redis做缓存呢,因为redis支持五种数据类型string hash list set zset 数据类型很丰富,而且redis是运行在内存中的,IO速度很快。

那么如何做缓存呢,springboot中有个springdataredis,通过它可以很方便的进行redis的读取

redistemplate中有很多方法可以操作,以String为例

@Component
public class RedisUtils {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    /**
     * 读取缓存
     *
     * @param key
     * @return
     */
    public String get(final String key) {
        return redisTemplate.opsForValue().get(key);
    }

    /**
     * 写入缓存
     */
    public boolean set(final String key, String value) {
        boolean result = false;
        try {
            redisTemplate.opsForValue().set(key, value);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 更新缓存
     */
    public boolean getAndSet(final String key, String value) {
        boolean result = false;
        try {
            redisTemplate.opsForValue().getAndSet(key, value);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 普通缓存放入并设置时间
     *
     * @param key   键
     * @param value 值
     * @param expire  时间(秒) time要大于0 如果time小于等于0 将设置无限期
     * @return true成功 false 失败
     */

    public boolean set(final String key, String value, long expire) {
        boolean result = false;
        try {
            redisTemplate.opsForValue().set(key, value, expire, TimeUnit.SECONDS);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 删除缓存
     */
    public boolean delete(final String key) {
        boolean result = false;
        try {
            redisTemplate.delete(key);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
}

通过fastjson,将对象转成json字符串存储到redis中,具体如下

public User selectByPrimaryKey(Integer id) {
    String s = redisUtils.get(REDIS_USER_PREFIX + id);
    if (!StringUtils.hasLength(s)) {
        log.info("缓存穿透");
        //没有查到就查询后加入缓存
        User user = userMapper.selectByPrimaryKey(id);
        s = JSONObject.toJSONString(user);
        redisUtils.set(REDIS_USER_PREFIX + id, s);
    }
    //存在的话就直接返回
    JSONObject jsonObject = JSONObject.parseObject(s);
    return JSONObject.toJavaObject(jsonObject, User.class);
}

至此,完成

SpringBoot基于redis的缓存

原文:https://www.cnblogs.com/clion/p/14199645.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!