Java项目——苍穹外卖(二)

Redis

简介

Redis是一个基于内存的key-value结构数据库

  • 基于内存存储,读写性能高
  • 适合存储热点数据(热点商品、资讯、新闻)
  • 企业应用广泛

基础操作

启动

在redis安装目录中打开cmd,输入如上图指令即可启动,按下crtl+c停止

连接

保证服务端启动时,在cmd命令行中输入redis-cli.exe -h 用户名 -p 端口号 -a 密码

数据类型

常用命令

字符串操作命令

  • SET key value 设置指定key的值
  • GET key 获取指定key的值
  • SETEX key seconds value 设置指定key的值,并将key的过期时间设为seconds秒
  • SETNX key value 只有key不存在时设置key的值(key已存在则无法设置)

哈希操作命令(Hash Map)

Redis hash 是一个String类型的field和value的映射表,hash特别适合用于存储对象,常用命令:

这些命令中的key是哈希表名,field是字段名,value是值

  • HSET key field value 将哈希表key中的字段field的值设为value
  • HGET key field value 获取存储在哈希表中的指定字段
  • HDEL key field 删除存储在哈希表中的指定字段
  • HKEYS key 获取哈希表中所有字段
  • HVALS key 获取哈希表中所有值

列表操作命令(Linked List)

Redis列表是简单的String列表,按照插入顺序排序,常用命令:

  • LPUSH key value1 [value2] 将一个或多个值插入到列表头部
  • LRANGE key start stop 获取列表指定范围内的元素
  • RPOP key 移除并获取列表最后一个元素
  • LLEN key 获取列表长度

集合操作命令(Set)

Reids set 是String类型的无序集合。集合成员是唯一的,集合中不能出现重复的数据,常用命令:

  • SADD key member1 [member2] 向集合添加一个或多个成员
  • SMEMBERS key 返回集合中的所有成员
  • SCARD key 获取集合的成员数
  • SINTER key1 [key2] 返回给定所有集合的交集
  • SUNION key1 [key2] 返回所有给定集合的并集
  • SREM key member1 [member2] 删除集合中一个或多个成员

有序集合操作命令

Redis有序集合是String类型元素的集合,且不允许有重复成员(集合中的元素是string类型,每个元素有一个double类型的分数,会自动根据分数进行排序)。每个元素都会关联一个double类型的分数,常用命令:member 是元素,score 是分数

  • ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员
  • ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合中指定区间内的成员
  • ZINCRBY key increment member 有序集合中对指定成员的分数加上增量increment
  • ZREM key member [member…] 移除有序集合中的一个或多个成员

通用命令

Reids的通用命令是不分数据类型的,都可以使用的命令:

  • KEYS pattern 查找所有符合给定模式(pattern)的key
  • EXISTS key 检查给定key是否存在
  • TYPE key 返回key所储存的数据类型
  • DEL key 该命令用于在key存在时删除key

 Java操作Redis

在Java项目中。可以使用Spring Data Redis来简化操作

步骤:

1.导入Spring Data Redis的maven坐标

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2、配置Redis数据源

spring:redis:host: ${sky.redis.host}port: ${sky.redis.port}auth: ${sky.redis.auth}database: ${sky.redis.database}
sky:redis:host: localhostport: 6379auth: 325523 #密码database: 0 #指定使用0号数据源

3、编写配置类,创建RedisTemplate对象

package com.sky.config;import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration
@Slf4j
public class RedisConfiguration {@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){log.info("开始创建Reids模版对象...");RedisTemplate redisTemplate = new RedisTemplate();//设置reids的连接工厂对象redisTemplate.setConnectionFactory(redisConnectionFactory);//设置redis key序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}

4、通过ReidsTemplate对象操作Redis

package com.sky.test;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.*;import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;@SpringBootTest
public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void testRedisATemplate(){System.out.println(redisTemplate);ValueOperations valueOperations = redisTemplate.opsForValue();HashOperations hashOperations = redisTemplate.opsForHash();ListOperations listOperations = redisTemplate.opsForList();SetOperations setOperations = redisTemplate.opsForSet();ZSetOperations zSetOperations = redisTemplate.opsForZSet();}/*** 操作字符串数据类型*/@Testpublic void testString(){redisTemplate.opsForValue().set("city","北京");String city = (String) redisTemplate.opsForValue().get("city");System.out.println(city);redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);//设置3分钟后过期redisTemplate.opsForValue().setIfAbsent("lock","1");//如果不存在才能设置redisTemplate.opsForValue().setIfAbsent("lock","2");}@Testpublic void testHash(){HashOperations hashOperations = redisTemplate.opsForHash();hashOperations.put("100","name","tom");//向哈希中插入键值对hashOperations.put("100","age","20");String name = (String)hashOperations.get("100", "name");//根据键获取值System.out.println(name);Set keys = hashOperations.keys("100");//返回哈希中的所有键System.out.println(keys);List values = hashOperations.values("100");//返回哈希中的所有值System.out.println(values);hashOperations.delete("100","age");//根据键删除键值对}
}

Spring Cache

简介

Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能

Spring Cache提供了一层抽象,底层可以切换不同的缓存实现,例如:

  • EHCache
  • Caffeine
  • Redis

在pom.xml中配置相关坐标即可使用Spring Cache框架

常用注解

@EnableCaching开启注解缓存功能,通常加在启动类上
@Cacheable在方法执行前先查询缓存中是否有数据,如果有数据,则世界返回缓存数据;如果没有缓存数据,调用方法并将方法返回值放到缓存中
@CachePut将方法的返回值放到缓存中
@CacheEvict将一条或多条数据从缓存中删除

这些注解本质是通过代理对象执行的

项目应用

思路

  • 导入Spring Cache 和Redis的相关maven坐标
  • 在启动类上加入@EnableCaching注解,开启缓存注解功能
  • 在用户端接口SetmealController的list方法上加入@Cacheable注解
  • 在管理端接口SetmealController的save、delete、update等方法上加入@CacheEvict注解

新增操作需要精确清理缓存(新增哪个就清理哪个)

删、改操作需要清空全部缓存

查询操作先在缓存中查,缓存中没有再去数据库中查,并把查询结果放入缓存中

代码实现

用户端接口SetmealController

/*** 条件查询* @param categoryId* @return*/@GetMapping("/list")@ApiOperation("根据分类id查询套餐")@Cacheable(cacheNames = "setmealCache",key ="#categoryId")//key:setmealCache::categoryIdpublic Result<List<Setmeal>> list(Long categoryId) {Setmeal setmeal = new Setmeal();setmeal.setCategoryId(categoryId);setmeal.setStatus(StatusConstant.ENABLE);List<Setmeal> list = setMealService.list(setmeal);return Result.success(list);}

管理端接口SetmealController

/*** 新增套餐* @param setmealDTO* @return*/@PostMapping@ApiOperation("新增套餐")@CacheEvict(cacheNames = "setmealCache",key = "#setmealDTO.categoryId")public Result save(@RequestBody SetmealDTO setmealDTO){log.info("新增套餐:{}",setmealDTO);setMealService.saveWithDish(setmealDTO);return Result.success();}/*** 批量删除套餐* @param ids* @return*/@DeleteMapping@ApiOperation("批量删除套餐")@CacheEvict(cacheNames = "setmealCache",allEntries = true)//清空所有缓存public Result delete (@RequestParam List<Long> ids){log.info("批量删除套餐:{}",ids);setMealService.delete(ids);return Result.success();}/*** 修改套餐* @param setmealDTO* @return*/@PutMapping@ApiOperation("修改套餐")@CacheEvict(cacheNames = "setmealCache",allEntries = true)//清空所有缓存public Result update(@RequestBody SetmealDTO setmealDTO){setMealService.update(setmealDTO);return Result.success();}/*** 起售停售菜品* @param status* @param id* @return*/@PostMapping("/status/{status}")@ApiOperation("起售停售菜品")@CacheEvict(cacheNames = "setmealCache",allEntries = true)//清空所有缓存public Result updateStatus(@PathVariable Integer status,Long id){setMealService.updateStatus(status,id);return Result.success();}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【图像匹配】基于SIFT算法的图像匹配,matlab实现

博主简介&#xff1a;matlab图像代码项目合作&#xff08;扣扣&#xff1a;3249726188&#xff09; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于基于SIFT算法的图像匹配&#xff0c;用matlab实现。 一、案例背景和算法介绍 本…

es的封装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、类和接口介绍0.封装思想1.es的操作分类 二、创建索引1.成员变量2.构造函数2.添加字段3.发送请求4.创建索引总体代码 三.插入数据四.删除数据五.查询数据 前…

Linux下root用户共享conda环境给其他用户

首先可以先用命令查看环境存储位置 conda env list 比如我的root用户的base环境 # conda environments: # base * /usr/local/miniconda3 在root下先给环境添文件夹加普通用户的权限 chmod -R 755 /usr/local/miniconda3 接下来新建一个用户&#xff0…

Python 课程14-TensorFlow

前言 TensorFlow 是由 Google 开发的一个开源深度学习框架&#xff0c;广泛应用于机器学习和人工智能领域。它具有强大的计算能力&#xff0c;能够运行在 CPU、GPU 甚至 TPU 上&#xff0c;适用于从小型模型到大规模生产系统的各种应用场景。通过 TensorFlow&#xff0c;你可以…

Unity+LeapMotion2的使用

开始吧 导入步骤1.到官网下载软件并安装2.安装插件3.场景中添加检测管理器4.场景中添加手部模型 更多细节 导入步骤 1.到官网下载软件并安装 地址 重启电脑后连接设备 可以看到连接成功 2.安装插件 &#xff08;也可以看官方教程&#xff09; Project—>PackageManag…

从AI应用排行榜选择AI产品(9月)

2024年9月13日&#xff0c;OpenAI公司宣布推出其全新的AI模型&#xff1a;o1&#xff0c;在数学、编程和科学问题的解决处理能力上取得了显著进步。该模型通过自我对弈强化学习&#xff08;Self-play RL&#xff09;和思维链&#xff08;Chain of Thought, CoT&#xff09;技术…

openssl的使用

1、编译 Github下载&#xff1a;https://github.com/openssl/openssl 官网下载&#xff1a;https://openssl-library.org/source/index.html 官网历史版本&#xff1a;https://www.openssl.org/source/old/ 1.1 Windows下编译 我的文章&#xff1a;OPC UA使用 Openssl库编译…

0基础带你入门Linux之使用

1.Ubuntu软件管理 回顾一下&#xff0c;我们之前使用su root切换到root模式&#xff0c;使用who 发现为什么显示的还是bd用户呢&#xff1f;为什么呢&#xff1f; 这个who是主要来查看的是我们登录的时候是以什么用户登录的 所以即使我们使用who进行查看的时候显示的还是bd用…

【浅水模型MATLAB】尝试复刻SCI论文中的溃坝流算例

【浅水模型MATLAB】尝试复刻SCI论文中的溃坝流算例 前言问题描述控制方程及数值方法浅水方程及其数值计算方法边界条件的实现 代码框架与关键代码模拟结果 更新于2024年9月17日 前言 这篇博客算是学习浅水方程&#xff0c;并利用MATLAB复刻Liang (2004)1中溃坝流算例的一个记录…

SysML图例-重症输液泵

SysML图中词汇 infusion pump 输液泵。替代传统的重力式吊瓶输液&#xff0c;达到更加精准和更加安全给药的目的。 syringe pump 注射泵。也称作微量输液泵&#xff0c;主要目的是对容量式输液泵在微量给药方面的一个补充。

ECMAScript与JavaScript的区别

目录 一、什么是ECMAScript&#xff1f; 二、什么是JavaScript&#xff1f; 三、ECMAScript与JavaScript的关系 3.1 ECMAScript规范版本 3.2 JavaScript的实现 四、ECMAScript与JavaScript的主要区别 4.1 规范与实现的区别 4.2 版本更新 4.3 环境支持 4.4 语言特性 五…

中秋期间互联网产品故障事件(晋江、115盘、阿里云盘)盘点

24年中秋期间&#xff0c;除了肆掠的“贝碧嘉”台风外&#xff0c;互联网故障bug事件也不少&#xff0c;趁着有空盘点下&#xff0c;可作为员工信息安全培训案例。 一&#xff1a;晋江文学城访问异常&#xff08;基础环境故障类&#xff09; 9月14日&#xff0c;“晋江崩了”冲…

【python设计模式3】创建型模式2

目录 抽象工厂模式 建造者模式 单例模式 创建型模式概述 抽象工厂模式 抽象工厂模式&#xff1a;定义一个工厂类的接口让工厂子类来创建一系列相关或者相互依赖的对象。相比工厂方法模式&#xff0c;抽象工厂模式中的每一个具体工厂都生产一套产品。下面是生产厂商生产一部手…

VSCode扩展连接虚拟机MySQL数据库

在虚拟机安装MySQL vscode通过ssh远程登录Ubuntu 在vscode终端运行以下命令。 sudo apt-get install mysql-server-5.7 用以下命令确认MySQL是否安装完成。 sudo mysql MySQL安装成功。 在VSCode安装SQL扩展 扩展名&#xff1a;MySQL Shell for VS Code。 安装完成后&am…

【2025】智慧居家养老服务平台的设计与实现、基于AI的居家养老服务平台、居家养老服务平台开发、智慧养老服务平台设计

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

55.【C语言】字符函数和字符串函数(strstr函数)

11.strstr函数 *简单使用 strstr: string string cplusplus的介绍 点我跳转 翻译: 函数 strstr const char * strstr ( const char * str1, const char * str2 ); 或另一个版本char * strstr ( char * str1, const char * str2 ); 寻找子字符串 返回指向第一次出现在字…

从零开始学PostgreSQL (十四):高级功能

目录 1. 简介 2. 视图 3. 外键 4. 事务 5. 窗口函数 6. 继承 7. 结论 简介 PostgreSQL是一个强大且开源的关系型数据库管理系统&#xff0c;以其稳定性、功能丰富性和对SQL标准的广泛支持而闻名。它不仅提供了传统的关系型数据库功能&#xff0c;如事务处理、外键约束和视图&am…

CISP-PTE CMS sqlgun靶场

sql靶场有个搜索框先点一下go&#xff0c;有回显说明存在漏洞 有个xss 然后在这里尝试sql注入 输入 -1 union select 1,2,3# 有回显可以查看数据库 然后查询数据库&#xff0c;用户 查询数据库的表名 查询它的数据这里admin用户的密码是md5加密 去解密看看 然后扫描ip目录发…

Zookeeper 3.8.4 安装和参数解析

安装 zookeeper 之前必须先安装 JDK&#xff0c;有关Linux环境JDK可以参考我以前写的博文 1、关于Linux服务器配置java环境遇到的问题 2、Linux环境安装openJDK 3、Centos7.3云服务器上安装Nginx、MySQL、JDK、Tomcat环境 文章目录 1. zookeeper 安装2. 参数解析 1. zookeeper …

03-Mac系统PyCharm主题设置

目录 1. 打开PyCharm窗口 2. Mac左上角点击PyCharm&#xff0c;点击Settings 3. 点击第一项Appearance& Behavior 4. 点击Appearance 5. 找到Theme进行设置 1. 打开PyCharm窗口 2. Mac左上角点击PyCharm&#xff0c;点击Settings 3. 点击第一项Appearance& Behavi…