【蒼穹外賣項目】Day05

📘博客主頁:程序員葵安

🫶感謝大家點贊👍🏻收藏?評論?🏻

一、Redis入門

Redis簡介

Redis是一個基于內存的 key-value 結構數據庫

  • 基于內存存儲,讀寫性能高
  • 適合存儲熱點數據(熱點商品、咨詢、新聞)
  • 企業應用廣泛

二、Redis數據類型

5種常用數據類型

Redis存儲的是key-value結構的數據,其中key是字符串類型,value有5種常用的數據類型:

  • 字符串 String :普通字符串,Redis中最簡單的數據類型
  • 哈希 hash :也叫散列,類似于Java中的HashMap結構
  • 列表 list :按照插入順序排序,可以有重復元素,類似于Java中的LinkedList
  • 集合 set :無序集合,沒有重復元素,類似于Java中的HashSet
  • 有序集合 sorted set / zset :集合中每個元素關聯一個double類型的分數score,根據分數升序排序,沒有重復元素

三、Redis常用命令

字符串操作命令

  • SET key value? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 設置指定key的值
  • GET key? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?獲取指定key的值
  • SETEX key seconds value? ? ? ? ? ??設置指定key的值,并將key的過期時間設為seconds秒
  • SETNX key value? ? ? ? ? ? ? ? ? ? ? ? ? 只有在key不存在時設置key的值

哈希操作命令

Redis hash 是一個string類型的field和value的映射表,hash特別適合用于存儲對象,常用命令:

  • HSET key field value? ? ? ? ? ? ? ? ? ? 將哈希表key中的字段filed的值設為value
  • HGET key field? ? ? ? ? ? ? ? ? ? ? ? ? ? ?獲取存儲在哈希表中指定字段的值
  • HDEL key field? ? ? ? ? ? ? ? ? ? ? ? ? ? ?刪除存儲在哈希表中的指定字段
  • HKEYS key? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 獲取哈希表中所有字段
  • HVALS key? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 獲取哈希表中所有值

列表操作命令

  • LPUSH key value1 [value2]? ? ? ? ? 將一個或多個值插入到列表頭部
  • LRANGE key start stop? ? ? ? ? ? ? ? 獲取列表指定范圍內的元素
  • RPOP key? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 移除并獲取列表最后一個元素
  • LLEN key? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?獲取列表長度

集合操作命令

  • SADD key member1 [member2]? ? ? ? 向集合添加一個或多個成員
  • SMEMBERS key? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 返回集合中的所有成員
  • SCARD key? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 獲取集合的成員數? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
  • SINTER key1 [key2]? ? ? ? ? ? ? ? ? ? ? ? ? ?返回給定所有集合的交集
  • SUNION key1 [key2]? ? ? ? ? ? ? ? ? ? ? ? ? 返回所有給定集合的并集
  • SREM key member1 [member2]? ? ? ? 刪除集合中一個或多個成員

有序集合操作命令

  • ZADD key score1 member1 [score2 member2]? ? ? ? 向有序集合添加一個或多個成員
  • ZRANGE key start stop [WITHSCORES]? ? ? ? ? ? ? ? ?通過索引區間返回有序集合中指定區間內的成員
  • ZINCRBY key increment member? ? ? ? ? ? ? ? ? ? ? ? ? ? 有序集合中對指定成員分數加上增量increment
  • ZREM key member [member ...]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 移除有序集合中的一個或多個成員

通用命令

  • KEYS pattern? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 查找所有符合給定模式(pattern)的key
  • EXISTS key? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 檢查給定key是否存在
  • TYPE key? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?返回key所儲存的值的類型
  • DEL key? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? 該命令用于在key存在時刪除key

四、Java中操作Redis

Redis的Java客戶端

Redis的Java客戶端很多,常用的幾種:

  • Jedis
  • Lettuce
  • Spring Data Redis

Spring Data Redis 是 Springs 的一部分,對 Redis 底層開發包進行了高度封裝。

在 Spring 項目中,可以使用Spring Data Redis簡化操作

Spring Data Redis使用方式

操作步驟:

  1. 導入Spring Data Redis的 maven坐標

  2. 配置Redis數據源

  3. 編寫配置類,創建RedisTemplate對象
    @Configuration
    @Slf4j
    public class RedisConfiguration {public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){log.info("開始創建Redis模板對象...");RedisTemplate redisTemplate = new RedisTemplate();// 設置redis的連接工廠對象redisTemplate.setConnectionFactory(redisConnectionFactory);// 設置redis key的序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
    }
  4. 通過RedisTemplate對象操作Redis
    @SpringBootTest
    public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void testRedisTemplate(){System.out.println(redisTemplate);//string數據操作ValueOperations valueOperations = redisTemplate.opsForValue();//hash類型的數據操作HashOperations hashOperations = redisTemplate.opsForHash();//list類型的數據操作ListOperations listOperations = redisTemplate.opsForList();//set類型數據操作SetOperations setOperations = redisTemplate.opsForSet();//zset類型數據操作ZSetOperations zSetOperations = redisTemplate.opsForZSet();}
    }

五、店鋪營業狀態設置

需求分析接口設計

接口設計:

  • 設置營業狀態

  • 管理端查詢營業狀態

  • 用戶端查詢營業狀態

注:從技術層面分析,其實管理端和用戶端查詢營業狀態時,可通過一個接口去實現即可。因為營業狀態是一致的。但是,本項目約定:

  • 管理端發出的請求,統一使用/admin作為前綴。

  • 用戶端發出的請求,統一使用/user作為前綴。

因為訪問路徑不一致,故分為兩個接口實現。

代碼開發

根據接口定義創建ShopController的setStatus設置營業狀態方法:

package com.sky.controller.admin;import com.sky.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController("adminShopController")
@RequestMapping("/admin/shop")
@Api(tags = "店鋪相關接口")
@Slf4j
public class ShopController {public static final String KEY = "SHOP_STATUS";@Autowiredprivate RedisTemplate redisTemplate;/*** 設置店鋪的營業狀態* @param status* @return*/@PutMapping("/{status}")@ApiOperation("設置店鋪的營業狀態")public Result setStatus(@PathVariable Integer status){log.info("設置店鋪的營業狀態為:{}",status == 1 ? "營業中" : "打烊中");redisTemplate.opsForValue().set(KEY,status);return Result.success();}
}

根據接口定義創建ShopController的getStatus查詢營業狀態方法:

	/*** 獲取店鋪的營業狀態* @return*/@GetMapping("/status")@ApiOperation("獲取店鋪的營業狀態")public Result<Integer> getStatus(){Integer status = (Integer) redisTemplate.opsForValue().get(KEY);log.info("獲取到店鋪的營業狀態為:{}",status == 1 ? "營業中" : "打烊中");return Result.success(status);}

根據接口定義創建ShopController的getStatus查詢營業狀態方法:

package com.sky.controller.user;import com.sky.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;@RestController("userShopController")
@RequestMapping("/user/shop")
@Api(tags = "店鋪相關接口")
@Slf4j
public class ShopController {public static final String KEY = "SHOP_STATUS";@Autowiredprivate RedisTemplate redisTemplate;/*** 獲取店鋪的營業狀態* @return*/@GetMapping("/status")@ApiOperation("獲取店鋪的營業狀態")public Result<Integer> getStatus(){Integer status = (Integer) redisTemplate.opsForValue().get(KEY);log.info("獲取到店鋪的營業狀態為:{}",status == 1 ? "營業中" : "打烊中");return Result.success(status);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91379.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91379.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91379.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

語音識別dolphin 學習筆記

目錄 Dolphin簡介 Dolphin 中共有 4 個模型&#xff0c;其中 2 個現在可用。 使用demo Dolphin簡介 Dolphin 是由 Dataocean AI 和清華大學合作開發的多語言、多任務語音識別模型。它支持東亞、南亞、東南亞和中東的 40 種東方語言&#xff0c;同時支持 22 種漢語方言。該模…

視頻生成中如何選擇GPU或NPU?

在視頻生成中選擇GPU還是NPU&#xff0c;核心是根據場景需求、技術約束和成本目標來匹配兩者的特性。以下是具體的決策框架和場景化建議&#xff1a; 核心決策依據&#xff1a;先明確你的“視頻生成需求” 選擇前需回答3個關鍵問題&#xff1a; 生成目標&#xff1a;視頻分辨率…

從豆瓣小組到深度洞察:一個基于Python的輿情分析爬蟲實踐

文章目錄 從豆瓣小組到深度洞察:一個基于Python的輿情分析爬蟲實踐 摘要 1. 背景 2. 需求分析 3. 技術選型與實現 3.1 總體架構 3.2 核心代碼解析 4. 難點分析與解決方案 5. 總結與展望 對爬蟲、逆向感興趣的同學可以查看文章,一對一小班教學:https://blog.csdn.net/weixin_…

RustDesk 使用教程

說明&#xff1a; 使用RustDesk 需要在不同的電腦安裝對應系統型號的客戶端&#xff0c;然后再去云服務器安裝一個服務端即可。 1、到網站下載客戶端&#xff1a;https://rustdesk.com/zh-cn/ 兩臺電腦安裝客戶端。 2、在云服務器安裝服務端 1&#xff09;官網教程&#xff1a;…

【C語言網絡編程基礎】TCP 服務器詳解

在網絡通信中&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff0c;傳輸控制協議&#xff09;是一種可靠、面向連接的協議。一個 TCP 服務器正是基于這種協議&#xff0c;為客戶端提供穩定的網絡服務。本文將詳細介紹 TCP 服務器的基本原理和工作流程。 一、什…

一篇就夠!Windows上Docker Desktop安裝 + 漢化完整指南(包含解決wsl更新失敗方案)

前言 在現代軟件開發和人工智能應用中&#xff0c;環境的穩定性和可移植性至關重要。Docker 作為一種輕量級的容器化技術&#xff0c;為開發者提供一致的運行環境&#xff0c;使得軟件可以在不同平臺上無縫運行&#xff0c;極大地提升了開發和部署的效率。無論是本地開發、測試…

設計模式(二十四)行為型:訪問者模式詳解

設計模式&#xff08;二十四&#xff09;行為型&#xff1a;訪問者模式詳解訪問者模式&#xff08;Visitor Pattern&#xff09;是 GoF 23 種設計模式中最具爭議性但也最強大的行為型模式之一&#xff0c;其核心價值在于將作用于某種數據結構中的各元素的操作分離出來&#xff…

USRP X440 和USRP X410 直接RF采樣架構的優勢

USRP X440 和USRP X410 直接RF采樣架構的優勢概述什么是直接RF采樣&#xff1f;如何實現直接采樣&#xff1f;什么情況下應考慮使用直接RF采樣架構&#xff1f;概述 轉換器技術每年都在發展。主要半導體公司的模數轉換器(ADC)和數模轉換器(DAC)的采樣速率比十年前的產品快了好…

P4568 [JLOI2011] 飛行路線

P4568 [JLOI2011] 飛行路線 題目描述 Alice 和 Bob 現在要乘飛機旅行&#xff0c;他們選擇了一家相對便宜的航空公司。該航空公司一共在 nnn 個城市設有業務&#xff0c;設這些城市分別標記為 000 到 n?1n-1n?1&#xff0c;一共有 mmm 種航線&#xff0c;每種航線連接兩個城市…

MySQL 中的聚簇索引和非聚簇索引的區別

MySQL 中的聚簇索引和非聚簇索引的區別 總結性回答 聚簇索引和非聚簇索引的主要區別在于索引的組織方式和數據存儲位置。聚簇索引決定了表中數據的物理存儲順序&#xff0c;一個表只能有一個聚簇索引&#xff1b;而非聚簇索引是獨立于數據存儲的額外結構&#xff0c;一個表可以…

全局異常處理,可以捕捉到過濾器中的異常嗎?

全局異常處理,可以捕捉到過濾器中的異常嗎? 全局異常處理器(如Spring的@ControllerAdvice+@ExceptionHandler)默認無法直接捕獲過濾器(Filter)中拋出的異常,這是由過濾器和Spring MVC的執行順序及職責邊界決定的。具體原因和解決方案如下: 一、為什么全局異常處理器默…

市政道路積水監測系統:守護城市雨天出行安全的 “智慧防線”

市政道路積水監測系統&#xff1a;守護城市雨天出行安全的 “智慧防線”柏峰【BF-DMJS】每逢汛期&#xff0c;強降雨引發的城市道路積水問題&#xff0c;不僅會造成交通擁堵&#xff0c;更可能危及行人和車輛安全&#xff0c;成為困擾城市管理的一大難題。傳統的積水監測主要依…

搭建HAProxy高可用負載均衡系統

一、HAProxy簡介Haproxy 是一個使用C語言編寫的自由及開放源代碼軟件&#xff0c;其提供高可用性、負載均衡&#xff0c;以及基于TCP和HTTP的應用程序代理。haproxy優點 1. Haproxy支持兩種代理模式 TCP&#xff08;四層&#xff09;和HTTP&#xff08;七層&#xff09;&#x…

GO語言 go get 下載 下來的包存放在哪里

在 Go 中&#xff0c;通過 go get&#xff08;或 Go Modules 下的自動下載&#xff09;獲取的第三方包&#xff0c;具體存儲位置取決于你是否啟用了 Go Modules&#xff08;推薦方式&#xff09;。? 1. 如果你使用了 Go Modules&#xff08;Go 1.11 默認開啟&#xff09;當前 …

PostgreSQL 14.4 ARM64 架構源碼編譯安裝指南

PostgreSQL 14.4 ARM64 架構源碼編譯安裝指南文章目錄PostgreSQL 14.4 ARM64 架構源碼編譯安裝指南說明環境要求操作系統1. 系統環境準備1.1 更新系統包1.2 創建 PostgreSQL 用戶2. 解壓 PostgreSQL 14.4 源碼包3. 配置編譯選項4. 編譯源代碼5. 安裝 PostgreSQL6. 初始化數據庫…

【科普】在STM32中有哪些定時器?

在 STM32 單片機中&#xff0c;定時器種類豐富&#xff0c;不同系列&#xff08;如 F1、F4、H7 等&#xff09;略有差異&#xff0c;以下是常見的定時器類型及核心特點&#xff1a;1. 基本定時器&#xff08;TIM6、TIM7&#xff09;功能&#xff1a;僅具備定時計數功能&#xf…

git使用秘訣(詳解0到1)

前言&#xff1a; 不知道大家有沒有使用git提交代碼或者拉取代碼的經歷&#xff0c;自從上一家公司實習結束以后&#xff0c;對git的使用歷歷在目&#xff0c;從一開始的add、commit到后來的pull都有著許多的疑惑。 自從有一次merge代碼以后&#xff0c;被師兄批了一頓以后(不小…

RHEL 9.5 離線安裝 Ansible 完整教程

文章目錄RHEL 9.5 離線安裝 Ansible 完整教程環境準備系統要求準備工作清單方法一&#xff1a;使用 RPM 包離線安裝步驟 1&#xff1a;在聯網機器上下載必要的 RPM 包步驟 2&#xff1a;創建本地倉庫元數據步驟 3&#xff1a;在離線服務器上安裝方法二&#xff1a;使用 Python …

44、鴻蒙HarmonyOS Next開發:視頻播放 (Video)組件和進度條 (Progress)組件的使用

目錄 視頻播放 (Video) 創建視頻組件 加載視頻資源 加載本地視頻 加載沙箱路徑視頻 加載網絡視頻 添加屬性 事件調用 Video控制器使用 其他說明 示例代碼 進度條 (Progress) 創建進度條 設置進度條樣式 場景示例 視頻播放 (Video) Video組件用于播放視頻文件并…

6、微服務架構常用十種設計模式

目錄 1、微服務架構 2、微服務架構的優點 3、微服務架構的缺點 4、何時使用微服務架構 5、微服務架構常用十種設計模式 ① 獨享數據庫&#xff08;Database per Microservice&#xff09; ② 事件源&#xff08;Event Sourcing&#xff09; ③ 命令和查詢職責分離&…