高并发之对象级缓存

为了提高并发能力,可以将数据库里面的一些不经常改变的数据缓存 在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}
    

 

你可能感兴趣的:(编码基本功,秒杀)