Redis随项目启动或CRUD进行缓存数据

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis随项目启动或CRUD进行缓存数据

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.创建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));
  }
}

到这里后启动项目会发现用户数据已缓存到Redis表中

20210702152931932.png

若是做了上面操作后报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));
}

2.2 删除

Integer flag = userDao.delete(user);
        if (flag > 0) {
            UserCache.delete(user.getId());
        }
        return flag;

更新

Integer flag = userDao.update(user);
        if (flag > 0) {
            TypeDictCache.modify(user.getId(), JSONObject.parseObject(JSONObject.toJSONString(user), UserDto.class));
        }
        return flag;


目录
相关文章
|
5月前
|
Web App开发 存储 缓存
如何精准清除特定类型或标签的缓存数据?
如何精准清除特定类型或标签的缓存数据?
466 57
|
7月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
2月前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
|
3月前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
198 1
Redis专题-实战篇二-商户查询缓存
|
2月前
|
缓存 运维 监控
Redis 7.0 高性能缓存架构设计与优化
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Redis 7.0高性能缓存架构,探索函数化编程、多层缓存、集群优化与分片消息系统,用代码在二进制星河中谱写极客诗篇。
|
3月前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。
|
4月前
|
存储 缓存 监控
一次缓存引发的文件系统数据不一致问题排查与深度解析
本文详述了一次由自研分布式文件系统客户端 EFC 的缓存架构更新所引发的严重数据不一致问题的完整排查过程。
一次缓存引发的文件系统数据不一致问题排查与深度解析
|
5月前
|
存储 缓存 NoSQL
Redis 核心知识与项目实践解析
本文围绕 Redis 展开,涵盖其在项目中的应用(热点数据缓存、存储业务数据、实现分布式锁)、基础数据类型(string 等 5 种)、持久化策略(RDB、AOF 及混合持久化)、过期策略(惰性 + 定期删除)、淘汰策略(8 种分类)。 还介绍了集群方案(主从复制、哨兵、Cluster 分片)及主从同步机制,分片集群数据存储的哈希槽算法。对比了 Redis 与 Memcached 的区别,说明了内存用完的情况及与 MySQL 数据一致性的保证方案。 此外,详解了缓存穿透、击穿、雪崩的概念及解决办法,如何保证 Redis 中是热点数据,Redis 分布式锁的实现及问题解决,以及项目中分布式锁
141 1
|
6月前
|
存储 缓存 NoSQL
告别数据僵尸!Redis实现自动清理过期键值对
在数据激增的时代,Redis如同内存管理的智能管家,支持键值对的自动过期功能,实现“数据保鲜”。通过`EXPIRE`设定生命倒计时、`TTL`查询剩余时间,结合惰性删除与定期清理策略,Redis高效维护内存秩序。本文以Python实战演示其过期机制,并提供最佳实践指南,助你掌握数据生命周期管理的艺术,让数据优雅退场。
390 0
|
7月前
|
缓存 NoSQL Java
Redis+Caffeine构建高性能二级缓存
大家好,我是摘星。今天为大家带来的是Redis+Caffeine构建高性能二级缓存,废话不多说直接开始~
974 0