苍穹外卖项目解读(三) redis、cache缓存解读

news2024/12/23 20:14:06

前言

HM新出springboot入门项目《苍穹外卖》,笔者打算写一个系列学习笔记,“苍穹外卖项目解读”,内容主要从HM课程,自己实践,以及踩坑填坑出发,以技术,经验为主,记录学习,也希望能给在学想学的小伙伴一个参考。

注:本文章是直接拿到项目的最终代码,然后从代码出发,快速逆向学习技术经验! 可能需要一些前置知识

觉得文章有用可以关注点赞收藏期待更新^^,期待您的评论留言

苍穹外卖项目解读(一) 完整代码本地部署运行
苍穹外卖项目解读(二) 管理端JWT令牌、AOP注解开发、分页
苍穹外卖项目解读(三) redis、cache缓存解读

在这里插入图片描述

Redis

摘自https://ac.nowcoder.com/discuss/1139639?type=0&channel=-1&source_id=discuss_terminal_discuss_hot_nctrack

Redis:(Remote Dictionary Server)是一个使用 C 语言编写的,高性能非关系型的键值对数据库。与传统数据库不同的是,Redis 的数据是存在内存中的,所以读写速度非常快,被广泛应用于缓存方向。Redis可以将数据写入磁盘中,保证了数据的安全不丢失,而且Redis的操作是原子性的。

基本数据类型
1、String:最常用的一种数据类型,String类型的值可以是字符串、数字或者二进制,但值最大不能超过512MB。
2、Hash:Hash 是一个键值对集合。
3、Set:无序去重的集合。Set 提供了交集、并集等方法,对于实现共同好友、共同关注等功能特别方便。
4、List:有序可重复的集合,底层是依赖双向链表实现的。
5、SortedSet:有序Set。内部维护了一个score的参数来实现。适用于排行榜和带权重的消息队列等场景。

优点
1、基于内存操作,内存读写速度快。
2、支持多种数据类型,包括String、Hash、List、Set、ZSet等。
3、支持持久化。Redis支持RDB和AOF两种持久化机制,持久化功能可以有效地避免数据丢失问题。
4、支持事务。Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。
5、支持主从复制。主节点会自动将数据同步到从节点,可以进行读写分离。
6、Redis命令的处理是单线程的。Redis6.0引入了多线程,需要注意的是,多线程用于处理网络数据的读写和协议解析,Redis命令执行还是单线程的。
缺点
1、对结构化查询的支持比较差。
2、数据库容量受到物理内存的限制,不适合用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的操作。
3、Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。

更详细的redis相关知识请大家自行搜罗学习

spring:
  redis:
	host: localhost //redis服务主机地址
	port: 6379  //主机port
	password: 123456  //redis服务密码
	database: 1  //redis服务使用那个库db01
--------springframework RedisTemplate子类  StringRedisTemplate-----
public class StringRedisTemplate extends RedisTemplate<String, String> {
    public StringRedisTemplate() {//设置序列化器 string
        this.setKeySerializer(RedisSerializer.string());
        this.setValueSerializer(RedisSerializer.string());
        this.setHashKeySerializer(RedisSerializer.string());
        this.setHashValueSerializer(RedisSerializer.string());
    }

    public StringRedisTemplate(RedisConnectionFactory connectionFactory) {
        this();
        this.setConnectionFactory(connectionFactory); //连接工厂
        this.afterPropertiesSet();
    }

    protected RedisConnection preProcessConnection(RedisConnection connection, boolean existingConnection) {
        return new DefaultStringRedisConnection(connection);
    }
}



-------------------项目的redisconfg------------------------------------
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置redis的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置redis key的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}


操作redis,在服务端我们根据我们需求需要的类型,并是用opsForxxx()调用相关数据结构的存储
此外,简单的redis操作就是存、取、更新、删(过期),建议读者深入了解、系统学习redis

cache

1、SpringCache是Spring提供的一个缓存框架,在Spring3.1版本开始支持将缓存添加到现有的spring应用程序中,在4.1开始,缓存已支持JSR-107注释和更多自定义的选项。

2、Spring Cache利用了AOP,实现了基于注解的缓存功能,并且进行了合理的抽象,业务代码不用关心底层是使用了什么缓存框架,只需要简单地加一个注解,就能实现缓存功能了,做到了对代码侵入性做小。

3、由于市面上的缓存工具实在太多,SpringCache框架还提供了CacheManager接口,可以实现降低对各种缓存框架的耦合。它不是具体的缓存实现,它只提供一整套的接口和代码规范、配置、注解等,用于整合各种缓存方案,比如Caffeine、Guava Cache、Ehcache。

缓存的实现底层技术支持是CGLib动态代理,在目标方法调用前、后分别追加相应的缓存操作,以达到添加缓存、更新缓存、删除缓存的操作。

配置注解

(1)EnableCaching

标注于SpringBoot应用启动类上,添加此注解表示开启Spring Cache缓存;移除表示关闭缓存。如果在全局配置文件中添加如下配置,即使在启动类上标注EnableCaching注解,Spring Cache缓存然后是关闭状态。

spring:
cache:
type: none
如果应用中自定义独立于Spring容器的缓存,则不受此配置影响。

(2)CacheConfig

标注于类上,更具体的说是标注于业务服务类上。统一配置如下参数信息:在这里插入图片描述

在类上统一进行配置,类下的方法自动继承相应的配置。

缓存注解

(1)Cacheable

添加缓存的核心注解,分两种情况:一是对应key值未有缓存数据,先执行方法,然后根据condition和unless条件决定是否添加缓存;二是对应key值已有缓存,不执行方法体,直接返回数据。
在这里插入图片描述

(2)CachePut

更新缓存注解。不管对应key值是否有缓存数据,都执行。
在这里插入图片描述

(3)CacheEvict

主动清除缓存注解。
在这里插入图片描述

觉得文章有用可以关注点赞收藏期待更新^^期待您的评论留言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/821271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年智能优化算法---能量谷优化器 Energy valley optimizer(EVO),附MATLAB代码和文献...

简介 能量谷优化器(EVO)是一种新的元启发式算法&#xff0c;它的算法是受到了关于稳定性和不同粒子衰变模式的先进物理原理的启发。在文献中&#xff0c;作者与CEC函数中最先进的算法进行了比较&#xff0c;并且证明该算法确实很强劲。算法原理大家请参考文献。 01 结果展示 在…

算法通关村第三关——不简单的数组增删改查

线性表基础 线性表概念 线性表就是具有相同特征数据元素的一个有限序列&#xff0c;其中包含元素的个数称为线性表的长度 线性表类型 从不同的角度看&#xff0c;线性表有不同的分类 语言实现角度 顺序表有两种实现方式 一体式 分离式 一体式结构 一体式&#xff1a;存储信息…

Softing mobiLink——连接现场设备的优选方案

| 用于智能现场设备管理的移动配置工具 从技术人员的角度来看&#xff0c;过程自动化可能会成为一个主要的管理难题&#xff0c;因为其实际上有无限数量的可配置参数及各种通信协议和现场设备接口。由来自多个制造商生产的上千台现场设备组成的现代过程架构&#xff0c;使技术…

Chapter 10: Dictionaries | Python for Everybody 讲义笔记_En

文章目录 Python for Everybody课程简介DictionariesDictionariesDictionary as a set of countersDictionaries and filesLooping and dictionariesAdvanced text parsingDebuggingGlossary Python for Everybody Exploring Data Using Python 3 Dr. Charles R. Severance 课程…

《向量数据库指南》——腾讯云向量数据库Tencent Cloud VectorDB产品特性,架构和应用场景

腾讯云向量数据库(Tencent Cloud VectorDB)是一款全托管的自研企业级分布式数据库服务,专用于存储、检索、分析多维向量数据。该数据库支持多种索引类型和相似度计算方法,单索引支持 10 亿级向量规模,可支持百万级 QPS 及毫秒级查询延迟。腾讯云向量数据库不仅能为大模型提…

Window版本ES(ElasticSearch)的安装,使用,启动

首先我这里是根据小破站狂神说up主&#xff0c;而学习的&#xff0c;下面是笔记文档&#xff0c;文档可能比我更细&#xff0c;但我还是记录一下&#xff0c;嘿嘿嘿 ElasticSearch7.6入门学习笔记-KuangStudy-文章 下面直接开始&#xff0c;首先我们需要下载ELK三个安装包&…

spring boot合并 http请求(前后端实现)

为什么要合并http请求 页面加载时要初始化很多资源信息&#xff0c;会发送好多http请求&#xff0c;根据http的通信握手特点&#xff0c;多个http请求比较浪费资源。进而如果能将多个http请求合并为一个发送给服务器&#xff0c;由服务器获取对应的资源返回给客户端 奇思妙解 …

echarts实现正负轴柱状图

效果&#xff1a; data变量配置&#xff1a; // 正负柱状图zhengfuZhu: {},data1: [],data2: [],data3: [],data4: [],xAxisData1: [],//横轴刻度seriesLabel: { //柱子上的字体show: false,position: outside,color: #BEC3EB,},seriesEmphasis: { //itemStyle: {shadowBlur: …

【福建事业单位-语言理解】01中心理解

【福建事业单位-语言理解】01中心理解 一、中心理解题&#xff1a;关键词1.1 转折关系词总结 1.2因果关系词总结 1.3必要条件关系对策&#xff08;只有才的变体题型&#xff09;反面论证&#xff08;如果等词汇错误做法不好的结果&#xff09;对策特殊脉络总结 1.4 并列结构总结…

怎么找小红书美食探店博主合作?

在小红书上有许多活跃的美食探店博主&#xff0c;他们通过分享自己的餐厅体验、特色美食以及口味评价&#xff0c;吸引了大量用户的关注。对于想要在小红书上进行美食推广的企业来说&#xff0c;与这些博主合作是一种非常直接的方式&#xff0c;接下来伯乐网络传媒来给大家分享…

【已解决】标签死活不响应单击事件

大家好&#xff0c;我是执念斩长河。今天在公司写代码的时候突然遇到一个问题&#xff0c;这个问题困扰了我不久&#xff0c;就是html中li标签不能响应我的单击事件。最后在仔细分析下&#xff0c;解决了这个问题。 文章目录 1、问题来源2、问题解决方案3、问题解决效果4、总结…

C语言假期作业 DAY 10

一、选择题 1、求函数返回值&#xff0c;传入 -1 &#xff0c;则在64位机器上函数返回&#xff08; &#xff09; int func(int x) { int count 0; while (x) { count; x x&(x - 1);//与运算 } r eturn count; } A: 死循环 B: 64 C: 32 D: 16 答案解析 正确答案&#xff…

Elasticsearch:如何将整个 Elasticsearch 索引导出到文件 - Python 8.x

在实际的使用中&#xff0c;我们有时希望把 Elasticsearch 的索引保存到 JSON 文件中。在之前&#xff0c;我写了一篇管如何备份 Elasticsearch 索引的文章 “Elasticsearch&#xff1a;索引备份及恢复”。在今天&#xff0c;我们使用一种 Python 的方法来做进一步的探讨。你可…

SpringBoot复习:(12)SpringApplicationRunListener和 SpringApplicationRunListeners

SpringApplicationRunListener接口定义如下&#xff1a; public interface SpringApplicationRunListener {default void starting() {}default void environmentPrepared(ConfigurableEnvironment environment) {}default void contextPrepared(ConfigurableApplicationConte…

2023年【零声教育】13代C/C++Linux服务器开发高级架构师课程体系分析

对于零声教育的C/CLinux服务器高级架构师的课程到2022目前已经迭代到13代了&#xff0c;像之前小编也总结过&#xff0c;但是课程每期都有做一定的更新&#xff0c;也是为了更好的完善课程跟上目前互联网大厂的岗位技术需求&#xff0c;之前课程里面也包含了一些小的分支&#…

【连通块染色,双指针维护区间map,整除分块】CF616 CDE

Dashboard - Educational Codeforces Round 5 - Codeforces C 题意&#xff1a; 思路&#xff1a; 经典的给格子染色&#xff0c;直接dfs染色就行&#xff0c;不要用并查集&#xff0c;虽然也能做但是不好写 然后对于每一个*&#xff0c;把周围的格子的颜色扔到set里去重统…

什么叫做阻塞队列的有界和无界

问题描述 什么叫做阻塞队列的有界和无界&#xff1a; 解决方案&#xff1a; 1. 阻塞队列&#xff08;如图&#xff09;&#xff0c;是一种特殊的队列&#xff0c;它在普通队列的基础上提供了两个附加功能 a. 当队列为空的时候&#xff0c;获取队列中元素的消费者线程会被阻塞…

ChinaJoy 2023微星雷鸟17游戏本震撼发布:搭载AMD锐龙9 7945HX首发8499元

ChinaJoy 2023展会中微星笔记本再次给大家带来惊喜&#xff0c;发布了搭载AMD移动端16大核的旗舰游戏本&#xff1a;雷鸟17&#xff0c;更重要的这样一款旗舰性能的游戏本&#xff0c;首发价8499元堪称当今游戏本市场中的“性价比爆款”&#xff01; 本着和玩家一同制霸游戏战场…

leetcode 712. Minimum ASCII Delete Sum for Two Strings(字符串删除字母的ASCII码之和)

两个字符串s1, s2, 删除其中的字母使s1和s2相等。 问删除字母的最小ASCII码之和是多少。 思路&#xff1a; DP 先考虑极端的情况&#xff0c;s1为空&#xff0c;那么要想达到s2和s1相等&#xff0c;就要把s2中的字母删完&#xff0c; ASCII码之和就是s2中所有字母的ASCII码之…

大型集团企业一体化运维监控方案

当前&#xff0c;云计算、大数据、人工智能等IT技术迅猛发展&#xff0c;企业的信息化步入了一个崭新的时代&#xff0c;企业规模不断壮大&#xff0c;业务不断拓展&#xff0c;企业信息化依赖的网络结构和IT技术越来越复杂。企业运维部门采用的运维工具和技术实力直接决定企业…