实战day06(五)----向业务逻辑中添加缓存

本文详细介绍了在Java应用中如何实现查询内容列表时添加缓存,包括查询前先查缓存、缓存中无数据时查询数据库、将结果存入缓存以及缓存同步策略。在代码实现部分,提到了使用Hash对Key进行归类,并在数据库增删改时清除对应缓存记录,确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、功能分析

查询内容列表时添加缓存。

1、查询数据库之前先查询缓存。

2、查询到结果,直接响应结果。

3、查询不到,缓存中没有需要查询数据库。

4、把查询结果添加到缓存中。

5、返回结果。

向redis中添加缓存:

Key:cid

Value:内容列表。需要把java对象转换成json。

使用hash对key进行归类。


注意:添加缓存不能影响正常业务逻辑。

二、代码实现




三、测试

该install的install。zookeeper启动起来。

debug e3-content


run e3-manager

run e3-portal-web

四、缓存同步


添加一条数据


在更新页面,没有把刚加进去的数据展示出来。说明,更新了数据库,但是缓存没有同步。更新了数据库,要同步更新缓存。

思路:可以在对数据库进行增、删、改的时候清除缓存中的这个记录。这样,下次访问的时候,就直接从数据里里取完整数据。


源码

### 鸿蒙OS APP项目实战:课程表的设计与实现教程 #### 一、需求分析 为了满足用户对于课程管理的需求,在鸿蒙操作系统上的教育类应用程序应具备创建、编辑以及查看个人日程安排的功能。这不仅限于简单的展示,还应该支持按周视图显示不同时间段内的具体科目名称及其对应的时间地点等信息。 #### 二、技术选型 考虑到性能优化及用户体验等因素,建议采用Java作为主要编程语言来构建此应用;同时利用XML布局文件定义UI界面结构,并通过Data Binding机制简化数据绑定过程[^1]。 #### 三、架构设计 整个系统的架构可以分为三层: - **表现层(Presentation Layer)** 负责处理用户的输入输出操作,比如绘制图形化用户界面(GUI),响应触摸事件等。 - **业务逻辑(Business Logic Layer)** 用于封装具体的业务规则和服务接口调用等功能模块,如获取服务器端的数据并解析成适合前端使用的格式。 - **持久化存储层(Data Persistence Layer)** 提供本地数据库访问能力,保存重要配置参数或缓存网络请求的结果以便离线状态下也能正常工作。 #### 四、核心功能开发指南 ##### (一)创建课程实体类Course.java ```java public class Course { private String courseName; private int weekDay; // 星期几上课 private Time startTime; private Time endTime; private Location location; public Course(String name, int dayOfWeek, Time start, Time end, Location loc){ this.courseName = name; this.weekDay = dayOfWeek; this.startTime=start; this.endTime=end; this.location=loc; } } ``` ##### (二)设置RecyclerView适配器WeekViewAdapter.kt 使用`RecyclerView`组件配合自定义的ViewHolder模式渲染每周七天的日历格子,每个item内部再嵌套另一个水平方向滚动条用来承载当天所有的课程卡片。 ```kotlin class WeekViewAdapter(private val coursesList: List<Course>) : RecyclerView.Adapter<WeekViewAdapter.DayHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DayHolder { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_day, parent, false) return DayHolder(view) } inner class DayHolder(itemView: View) : RecyclerView.ViewHolder(itemView), ViewHolder<List<Course>>{ lateinit var adapter: HorizontalCoursesAdapter init { itemView.findViewById<Button>(R.id.add_course_button).setOnClickListener { showAddDialog() } setupHorizontalRecycler() } private fun setupHorizontalRecycler(){ val recyclerView = itemView.findViewById<RecyclerView>(R.id.horizontal_courses_recycler_view) recyclerView.layoutManager = LinearLayoutManager(context,LinearLayoutManager.HORIZONTAL,false) adapter = HorizontalCoursesAdapter(ArrayList()) recyclerView.adapter = adapter } override fun bind(item: List<Course>?) { item?.let{adapter.submitList(it)} } } } ``` ##### (三)集成Room Database完成CRUD操作 借助Android官方推出的轻量级ORM框架——Room来进行SQLite数据库的操作,从而达到高效便捷地增删改查目的。 ```kotlin @Entity(tableName="courses") data class DbCourse( @PrimaryKey(autoGenerate=true)val id:Int?=null, val title:String, val weekday:Int,//星期几 val fromHour:Int, val toHour:Int, val roomNumber:String? ) @Dao interface CoursesDAO{ @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertAll(vararg dbCourses:DbCourse) @Query("SELECT * FROM courses WHERE weekday=:day ORDER BY fromHour ASC ") suspend fun loadByDate(day:Int):LiveData<List<DbCourse>> } @Database(entities=[DbCourse::class],version=1,exportSchema=false) abstract class AppDatabase: RoomDatabase() { abstract fun getCoursesDAO():CoursesDAO companion object{ @Volatile private var INSTANCE:AppDatabase? = null fun getDatabase(context: Context)=INSTANCE?: synchronized(this){ val instance = Room.databaseBuilder( context.applicationContext, AppDatabase::class.java,"course_database" ).build() INSTANCE = instance instance } } } ``` #### 、测试验证 编写单元测试案例覆盖各个关键路径下的预期行为,确保新增加的功能不会破坏现有程序稳定性的同时也能够按照既定规格运行良好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值