Redis数据结构及项目应用和代码优化 - 课程笔记整理
Redis数据结构及项目应用
一、问题引入
同学们提出了关于Redis数据结构的问题,主要集中在项目中使用了哪些Redis数据结构,以及它们在项目中的具体应用场景。
二、项目中的Redis应用
在我们的项目中,尤其是在目录列表缓存部分,使用了Redis作为缓存工具。例如在category.ctrl
中,有一个目录列表缓存,使用了@Cacheable
注解,这里缓存的内容虽然在逻辑上是一个ArrayList
,但在Redis中它被存储为String
类型。
三、Redis数据结构介绍
Redis主要有五种数据结构:
- String:最基本的数据结构,以键值对的形式存储,常用于缓存、共享Session等场景。
- Hash:类似于Java中的HashMap,适合存储对象,例如班级学生家庭住址统计。
- List:类似于Java中的LinkedList,适用于需要频繁插入和删除操作的场景,如商品列表或用户列表。
- Set:类似于Java中的HashSet,存储无序且不重复的元素,可用于存储中奖用户ID等。
- ZSet(有序集合):在Set的基础上增加了排序功能,适用于排行榜等需要排序的场景。
四、为什么选择String类型存储
在项目中,尽管我们缓存的内容是一个列表,但Redis将其转换为String类型存储。这是因为Redis并不会根据我们传入的数据结构类型来决定存储类型,而是将内容转换后统一存储为String。这样做的好处是简单高效,尤其是在缓存场景中。
代码优化 - 上传功能的整理
一、问题引入
有同学提出,项目中上传功能的代码是否可以进行整理和优化,是否有必要建立一个与上传相关的服务。
二、优化思路
根据分层原理,控制层(ctrl)不应包含过多的业务逻辑。因此,像创建文件这样的操作应该抽取到服务层(service)中。
三、代码改造步骤
-
创建UploadService接口及实现类:
- 新建
UploadService
接口和UploadServiceImpl
实现类。 - 将原本在控制层中的
createFile
方法移动到服务层。
- 新建
-
改造相关方法:
- 在控制层中,将原本直接调用的方法改为通过
UploadService
调用。 - 使用IDEA的重构功能,将上传相关的代码抽取到服务层的方法中。
- 在控制层中,将原本直接调用的方法改为通过
-
处理依赖和注解:
- 在服务层类上添加
@Service
注解,确保Spring能够管理该bean。 - 在控制层中注入
UploadService
,替换原有的方法调用。
- 在服务层类上添加
四、具体改造示例
-
抽取
createFile
方法:- 将
createFile
方法从控制层移动到UploadServiceImpl
中,并在接口中声明该方法。 - 在控制层中通过
UploadService
调用该方法。
- 将
-
改造
uploadProduct
方法:- 将
uploadProduct
方法中的业务逻辑抽取到UploadServiceImpl
中,通过UploadService
调用。
- 将
-
处理图片上传相关代码:
- 将图片上传、处理等逻辑抽取到服务层,使控制层代码更加简洁。
五、总结
通过将上传相关的功能抽取到服务层,我们不仅使代码结构更加清晰,而且提高了代码的复用性和可维护性。这样,在项目中添加新的上传功能或修改现有功能时,都可以更加方便地进行操作。
以上就是本小节的主要内容,我们解答了关于Redis数据结构的问题,并对项目中的上传功能进行了代码优化。希望这些内容能帮助大家更好地理解和使用项目中的相关功能。下一小节再见!