Redis随项目启动或CRUD进行缓存数据
【摘要】
1.首先介绍项目启动时缓存数据库数据到redis(以缓存用户表数据为例)
1.1.创建UserCache类
/**
*@Description 用户缓存
*@param
*@return
*@...
1.首先介绍项目启动时缓存数据库数据到redis(以缓存用户表数据为例)
1.1.创建UserCache类
/**
*@Description 用户缓存
*@param
*@return
*@author wang hq
*/
@Component
public class UserCache {
@Autowired
private RedisService redisService;
@Autowired
private UserDao userDao;
private static UserCache userCache;
@PostConstruct
public void init() {
userCache = this;
userCache.redisService = this.redisService;
userCache.userDao = this.userDao;
}
/**
* @param userDtos
* @return
* @将数据库查询出来的数据 进行格式化 并存入 map和redis
*/
public static void init(List<UserDto> userDtos) {
userCache.redisService.del(Constant.REDIS_USER);
for (UserDto userDto : userDtos) {
userCache.redisService.hSet(Constant.REDIS_USER, String.valueOf(userDto.getId()), userDto);
}
}
/**
* @param id
* @param value
* @修改缓存中的数据
*/
public static void modify(Integer id, UserDto value) {
if (value == null && id == null) {
new Throwable("id and value is not null!");
}
//修改
userCache.redisService.hSet(Constant.REDIS_USER, String.valueOf(id), value);
}
/**
* @param id
* @删除缓存中的数据
*/
public static void delete(Integer id) {
if (id == null) {
new Throwable("id is not null!");
}
userCache.redisService.hDel(Constant.REDIS_USER, String.valueOf(id));
}
/**
* @param users
* @删除缓存中的数据
*/
public static void deleteList(List<Integer> users) {
if (users == null) {
new Throwable("id is not null!");
}
for (Integer id : users) {
userCache.redisService.hDel(Constant.REDIS_USER, String.valueOf(id));
}
}
/**
* @param id
* @return
* @从缓存中获取appid对应的value
*/
public static UserDto userDto(Integer id) {
if (id != null) {
new Throwable("id is not null!");
}
if (userCache.redisService.hGet(Constant.REDIS_USER, String.valueOf(id)) != null) {
return JSONObject.parseObject(JSONObject.toJSONString(userCache.redisService.hGet(Constant.REDIS_USER, String.valueOf(id))), UserDto.class);
}
UserDto userDto = new UserDto();
userDto.setId(id);
userDto = userCache.userDao.findOne(userDto, null);
modify(id, userDto);
return userDto;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
1.2.创建DemoRunner
@Order(3)
@Component
public class DemoRunner implements ApplicationRunner {
@Autowired
private UserDao userDao;
@Override
public void run(ApplicationArguments applicationArguments) throws Exception {
UserCache.init(userDao.findAll(new User(), null));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
到这里后启动项目会发现用户数据已缓存到Redis表中
若是做了上面操作后报RedisService注入错误的问题时 可参考https://blog.csdn.net/weixin_45735355/article/details/118308909?spm=1001.2014.3001.5501即可解决
2.CRUD操作时同步到Redis缓存
2.1 插入
Integer flag = userDao.save(user);
if (flag > 0) {
UserCache.modify(user.getId(), JSONObject.parseObject(JSONObject.toJSONString(user), UserDto.class));
}
- 1
- 2
- 3
- 4
2.2 删除
Integer flag = userDao.delete(user);
if (flag > 0) {
UserCache.delete(user.getId());
}
return flag;
- 1
- 2
- 3
- 4
- 5
更新
Integer flag = userDao.update(user);
if (flag > 0) {
TypeDictCache.modify(user.getId(), JSONObject.parseObject(JSONObject.toJSONString(user), UserDto.class));
}
return flag;
- 1
- 2
- 3
- 4
- 5
文章来源: baidaguo.blog.csdn.net,作者:白大锅,版权归原作者所有,如需转载,请联系作者。
原文链接:baidaguo.blog.csdn.net/article/details/118416674
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)