高同時オブジェクトレベルキャッシュ


同時性を向上させるために、データベース内の変更が頻繁でないデータをredisに保存し、有効期間を永続的に設定できます.
ただし、このデータを変更する場合は、キャッシュを更新しても原子として操作します.
たとえば、ユーザー情報をキャッシュします.
    @Autowired
    private RedisService redisService;

    public User findById(String id) {
        if (StringUtils.isEmpty(id)) {
            return null;
        }
        User user = redisService.get(MiaoshaUserKey.userId, "id", User.class);
        if (user!=null){
            return user;
        }
        user=userMapper.selectByPrimaryKey(Long.parseLong(id));
        redisService.set(MiaoshaUserKey.userId, "id",user);
        return user;
    }

    public boolean updateUserPassword(String token,String id,String password){
        User user = findById(id);
        if (user==null){
            throw new GlobalException(CodeMsg.MOBILE_NOT_EXIST);
        }
        User newUser = new User();
        newUser.setId(Long.parseLong(id));
        newUser.setPassword(MD5Util.md5AndSalt(password));
        boolean result = userMapper.updatePassword(newUser);
        if (result){
            redisService.delete(MiaoshaUserKey.userId,id);
            user.setPassword(newUser.getPassword());
            redisService.set(MiaoshaUserKey.userId,id,user);
        }
        return true;
    }

MiaoshaUserKeyクラス
package com.example.miaosha_xdp.redis;

public class MiaoshaUserKey extends BasePrefix {
    public static final int TOKEN_EXPIRE = 3600*24 * 2;

    public MiaoshaUserKey(int expireTime, String prefix) {
        super(expireTime, prefix);
    }

    public static MiaoshaUserKey token=new MiaoshaUserKey(TOKEN_EXPIRE,"token");
    public static MiaoshaUserKey userId=new MiaoshaUserKey(0,"id");

}


RedisServiceの削除方法の追加
 public boolean delete(KeyPrefix keyPrefix, String key) {
        Jedis jedis=null;
        try {
            jedis=jedisPool.getResource();
            String realKey = keyPrefix.getPrefix() + key;
            Long del = jedis.del(realKey);
            return del>0;
        }finally {
            jedisClose(jedis);
        }
    }

マッピングファイルの追加
    
        update miaosha_user
        set password=#{password}
        where id = #{id}