今天课不多,然后下午体育课直接润,待在寝室写代码,这一周的课都不多,所以这一周加上清明节,就准备完成苍穹外卖这个项目
今日收获
1.完成了菜品修改的接口
2.简单了解并学习了redis基本操作
首先我们要知道redis也是一个数据库,那它和我们所知道的MySQL数据库有什么区别呢?
1.数据模型
redis数据库:它是一个基于内存的key——value结构数据库。适合存储热点数据(热点商品,资讯,新闻)。
mysql数据库:它是一个关系型表结构的数据库。
2.存储机制
-
Redis
-
内存优先:数据默认存储在内存中,读写速度极快(微秒级响应)。
-
持久化可选:支持快照(RDB)和日志追加(AOF)两种持久化方式,但持久化是次要目标。
-
-
MySQL
-
磁盘存储:数据以文件形式持久化到磁盘,保证数据安全。
-
事务日志:通过 Redo Log、Undo Log 等机制确保数据一致性和持久性。
-
3.性能特点
-
Redis
-
超高吞吐量:适合高并发、低延迟场景(如缓存、计数器、实时排行榜)。
-
单线程模型:避免锁竞争,但复杂操作可能阻塞其他请求。
-
-
MySQL
-
适合复杂查询:支持 SQL 语法、多表 JOIN、聚合函数等,但复杂查询可能较慢(毫秒级响应)。
-
事务支持:通过 ACID 特性保证数据一致性,适合需要强一致性的场景(如支付、订单)。
-
简而言之:Redis的读写效率高,适合存储热点数据,而MySQL的读写效率低但是存储能力好,适合存储普遍数据。
4.Redis的数据类型和常用命令
1.五种常用数据类型
redis存储的是key——value结构的数据,其中key是字符串类型,value有五种常用数据类型
1. String(字符串)
-
存储结构:二进制安全的字符串,可存储文本、数字、二进制数据(如图片、序列化对象)。
-
常用命令:
-
SET key value
(设置值) -
GET key
(获取值) -
INCR key
(原子递增) -
APPEND key value
(追加字符串)
-
2. Hash(哈希表)
-
存储结构:键值对的集合,类似编程语言中的
Map
或字典
。 -
常用命令:
-
HSET key field value
(设置字段值) -
HGET key field
(获取字段值) -
HGETALL key
(获取所有字段和值) -
HDEL key field
(删除字段)
-
3. List(列表)
-
存储结构:双向链表,支持在头部或尾部快速插入/删除元素。
-
常用命令:
-
LPUSH key value
(头部插入) -
RPUSH key value
(尾部插入) -
LPOP key
(头部弹出) -
LRANGE key start end
(范围查询)
-
4. Set(集合)
-
存储结构:无序且元素唯一的集合,支持交并差运算。
-
常用命令:
-
SADD key member
(添加元素) -
SMEMBERS key
(获取所有元素) -
SINTER key1 key2
(求交集) -
SISMEMBER key member
(判断元素是否存在)
-
5. Sorted Set(有序集合)
-
存储结构:元素唯一且按
score
(分值)排序的集合,类似排行榜。 -
常用命令:
-
ZADD key score member
(添加元素及分值) -
ZRANGE key start end [WITHSCORES]
(按分值升序查询) -
ZREVRANGE key start end
(按分值降序查询) -
ZRANK key member
(获取排名)
-
在操作redis数据库的时候它和mysql一样不区分操作语句大小写
3.在java中操作redis数据库
Spring Data Redis
它是spring的一部分,对redis的底层开发包进行了高度封装,在spring项目中,可以使用它来简化操作。
操作步骤
1.导入maven坐标
2.配置Redis数据源
3.编写配置类
4.通过RedisTemplate操作数据库
连接工厂setConnectionFactory
-
连接 Redis 的基础设施
Redis 操作需要与 Redis 服务器建立网络连接,RedisConnectionFactory
是 Spring Data Redis 中创建和管理这些连接的核心组件。
如果不设置连接工厂,RedisTemplate
不知道如何连接到 Redis 服务器(如地址、端口、密码等)。
设置键序列化器setKeySerializer
Redis 本身只接受二进制数据,因此需要将 Java 对象序列化为字节流才能存储。
如果不设置序列化器,Spring 会使用默认的 JdkSerializationRedisSerializer
,但这种方式可能导致以下问题:
-
键的可读性差:默认序列化器会在键前添加类信息(如
\xac\xed\x00\x05t\x00\x04user
)。 -
兼容性问题:不同 JVM 环境可能导致反序列化失败。
-
存储冗余:默认序列化器生成的字节流较大。
4.完成了店铺状态的接口
5.随笔
我对我的要求就是每天都有收获就行,然后今天课上背了单词,明天就是四月份,然后买的题也快到了,就要开始刷题了,软考的话,就等四月份报名了在说,因为上学期我其实学过,但是没学完还剩了一点,虽然现在可能已经忘了,但是内容并不难,所以可以报名后在规划,我考软考就是因为下学期可以少修一门课,然后下学期大三了,我不准备呆在学校混日子了,还是要找个日常实习要是现在是大一就好了,哈哈哈我大一在玩的时候其实就对自己说过,以后要是感觉没时间了肯定会后悔,其实我也说不上后悔,就要是我大一每天学一点就好了,别纯玩,当然这些都是没意义的想法,种一棵树最好是十年前,其次就是现在,继续加油吧小菜!