项目记录:利用Redis实现缓存以提升查询效率

一、概述

当我们查询所有数据时,如果缓存中没有,则去数据库查询,如果有,直接查缓存的数据就行。注意定期更新缓存数据。

二、主体代码

java 复制代码
    private static final String ROOM_SCHEDULES_HASH = "RoomSchedules";

    @Override
    public List<RoomSchedule> getAllRoomSchedules()  {
        BoundHashOperations<String, String, String> hashOps = stringRedisTemplate.boundHashOps(ROOM_SCHEDULES_HASH);
        if (hashOps.size() == 0) {
            List<RoomSchedule> roomSchedules = roomScheduleMapper.getAllRoomSchedules();
            for (RoomSchedule roomSchedule : roomSchedules) {
                ObjectMapper objectMapper = new ObjectMapper();
                try {
                    String json = objectMapper.writeValueAsString(roomSchedule);
                    hashOps.put(roomSchedule.getId().toString(), json);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            stringRedisTemplate.expire(ROOM_SCHEDULES_HASH, 3, TimeUnit.MINUTES);  // 设置有效期为三分钟
            return roomSchedules;
        } else {
            Map<String, String> entries = hashOps.entries();

            List<RoomSchedule> roomSchedules = new ArrayList<>();
            for (String json : entries.values()) {
                try {
                    ObjectMapper objectMapper = new ObjectMapper();
                    RoomSchedule roomSchedule = objectMapper.readValue(json, RoomSchedule.class);
                    roomSchedules.add(roomSchedule);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return roomSchedules;
        }

       
    }

BoundHashOperations是绑定键值的方法,意味着之后的操作都是对此键进行操作。

ObjectMapper类提供了一系列json序列化和反序列化的操作。

缓存更新操作是通过设置TTL有效期来实现的。

三、效果实现

可以看到引入Redis缓存后,查询效率明显提升。

相关推荐
ma_king2 小时前
入门 java 和 数据库
java·数据库·后端
jiayou645 小时前
KingbaseES 实战:审计追踪配置与运维实践
数据库
NineData17 小时前
NineData 迁移评估功能正式上线
数据库·dba
雨中飘荡的记忆21 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
NineData1 天前
数据库迁移总踩坑?用 NineData 迁移评估,提前识别所有兼容性风险
数据库·程序员·云计算
赵渝强老师1 天前
【赵渝强老师】PostgreSQL中表的碎片
数据库·postgresql
全栈老石1 天前
拆解低代码引擎核心:元数据驱动的"万能表"架构
数据库·低代码
曲幽1 天前
FastAPI分布式系统实战:拆解分布式系统中常见问题及解决方案
redis·python·fastapi·web·httpx·lock·asyncio
倔强的石头_2 天前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou643 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库