redis 数据缓存工具类及使用示例

package cn.itrip.util;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;

/**
 * redis 数据缓存工具
 */
@Component
public class RedisUtil {

    @Resource
    private StringRedisTemplate stringRedisTemplate;
    @Resource(name = "stringRedisTemplate")
    private ValueOperations<String, String> valOpsStr;
    @Resource
    private RedisTemplate<Object, Object> redisTemplate;
    @Resource(name = "redisTemplate")
    private ValueOperations<Object, Object> valOpsObj;

    /**
     * 设置字符串数据
     * @param key
     * @param val
     */
    public void setString(String key, String val){
        valOpsStr.set(key, val);
    }

    /**
     * 设置字符串数据
     * @param key 键
     * @param val 值
     * @param expire 有效时间
     */
    public void setString(String key, String val, long expire){
        valOpsStr.set(key, val, expire, TimeUnit.SECONDS);
    }

    /**
     * 读取字符串数据
     * @param key
     * @return
     */
    public String getString(String key){
        return valOpsStr.get(key);
    }

    /**
     * 判断token是否存在
     * @param key
     * @return
     */
    public boolean exists(String key){

        String value = getString(key);

        if (value == null) return false;

        return true;
    }

 /**
     * 删除指定key
     * @param key
     */
    public void del(String key){
        stringRedisTemplate.delete(key);
    }

    /**
     * 根据指定o获取Object
     * @param o
     * @return
     */
    public Object getObj(Object o){
        return valOpsObj.get(o);
    }

    /**
     * 设置obj缓存
     * @param o1
     * @param o2
     */
    public void setObj(Object o1, Object o2){
        valOpsObj.set(o1, o2);
    }

    /**
     * 删除Obj缓存
     * @param o
     */
    public void delObj(Object o){
        redisTemplate.delete(o);
    }

    /***
     * 加锁的方法
     * @return
     */
    public boolean lock(String key,Long expire){
       RedisConnection redisConnection = redisTemplate.getConnectionFactory().getConnection();
       //设置序列化方法
       redisTemplate.setKeySerializer(new StringRedisSerializer());
       redisTemplate.setValueSerializer(new StringRedisSerializer());
       if(redisConnection.setNX(key.getBytes(),new byte[]{1})){
           redisTemplate.expire(key,expire,TimeUnit.SECONDS);
           redisConnection.close();
           return true;
       }else{
           redisConnection.close();
           return false;
       }
    }

    /***
     * 解锁的方法
     * @param key
     */
    public void unLock(String key){
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        redisTemplate.delete(key);
    }
}
@RestController
@RequestMapping("api")
public class AuthController {
    @Resource
    private RedisUtil redisUtil;    //缓存工具

    //注册用户缓存前缀
    private String user_prefix = "user:";
    //注册账号未激活缓存有效时间
    private int expireAccount = 60 * 60 * 2 ;    //2小时

 @PostMapping("registerbyphone")
 public Dto registerByPhone(@RequestBody ItripUser user){

     //判断, 旧token是否有效
     if (!redisUtil.exists(token))
            throw new Exception("登录已过期!");

     //获取登录信息
     ItripUser loginInfo = JSONObject.parseObject(redisUtil.getString(token),ItripUser.class);

    //将注册信息保存到redis 缓存,2小时有效期
     redisUtil.setString(user_prefix+user.getUserCode(),JSONObject.toJSONString(user),expireAccount);
    
    //格式化缓存中的日期格式
    redisUtil.setString(user_prefix+user.getUserCode(),JSONObject.toJSONStringWithDateFormat(user,"yyyy-MM-dd",expireAccount);
    
}

            

}

注: 在修改数据库数据时, 需要操作缓存中的数据, 一般将原来的内容清空, 设置有效时间为1

redisUtil.setString(user_prefix+user.getUserCode(), "" ,1);

在查询时, 重新将修改后的数据保存到缓存中

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论

打赏作者

亦昕跑的码

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值