高同時オブジェクトレベルキャッシュ
2355 ワード
同時性を向上させるために、データベース内の変更が頻繁でないデータをredisに保存し、有効期間を永続的に設定できます.
ただし、このデータを変更する場合は、キャッシュを更新しても原子として操作します.
たとえば、ユーザー情報をキャッシュします.
MiaoshaUserKeyクラス
RedisServiceの削除方法の追加
マッピングファイルの追加
ただし、このデータを変更する場合は、キャッシュを更新しても原子として操作します.
たとえば、ユーザー情報をキャッシュします.
@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}