Day05 店鋪營業狀態設置 Redis

Redis 入門

Redis 簡介

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

·基于內存存儲,讀寫性能高

·適合存儲熱點數據(熱點商品,資訊,新聞)

企業應用廣泛

redis 中文網:Redis中文網

Redis 下載與安裝

Redis 的 Windows版屬于綠色軟件,直接解壓即可使用,解壓后目錄結構如下:

Redis 服務啟動與停止

?啟動:在解壓目錄下進入命令行窗口,輸入以下命令即可啟動

結束:直接 Ctrl + C 即可

客戶端連接服務器:

注意服務端不能關,否則連接不上

客戶端斷開:輸入 exit 即可

補充如果我們要連接外部的服務器:

-h 后面寫域名,-p 后面寫端口名

密碼修改:在 conf 文件里找到 443 行這一行,

requirepass 后面跟的就是你需要的密碼

這時我們重啟 Redis,并重新連接客戶端,會發現一個 error 告訴我們未認證

我們要想連接,在之前的命令下加一個 -a yourPassWord 即可

當然我們可以直接下載圖形化工具進行連接

服務端記得不要關

Redis 數據類型

5種常用數據類型介紹

各種數據類型的特點

Redis 常用命令

字符串操作命令

????????

哈希操作命令

列表操作命令

集合操作命令

有序集合操作命令

通用命令

在 Java 中操作 Redis

Redis 的 Java 客戶端

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

· Lettuce

· Spring Data Redis

Spring Data Redis 是 Spring 的一部分,對 Redis 底層開發包進行了高度封裝。在 Spring 項目中,可以使用 Spring Data Redis 來簡化操作

Spring Data Redis 使用方式

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){RedisTemplate redisTemplate = new RedisTemplate();//設置 redis 的連接工廠對象redisTemplate.setConnectionFactory(redisConnectionFactory);//設置 redis key 的序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}
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.*;@SpringBootTest
public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void testRedisTemplate(){System.out.println(redisTemplate);ValueOperations valueOperations = redisTemplate.opsForValue();HashOperations hashOperations = redisTemplate.opsForHash();ListOperations listOperations = redisTemplate.opsForList();SetOperations setOperations = redisTemplate.opsForSet();ZSetOperations zSetOperations = redisTemplate.opsForZSet();}
}

最后是完整的測試代碼,數據庫里面的亂碼是正常的,因為序列化的問題沒有處理

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.connection.DataType;
import org.springframework.data.redis.core.*;import javax.xml.crypto.Data;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;@SpringBootTest
public class SpringDataRedisTest {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void testRedisTemplate(){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(){//set get setex setnxredisTemplate.opsForValue().set("city","北京");String city = (String) redisTemplate.opsForValue().get("city");System.out.println(city);redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES);redisTemplate.opsForValue().setIfAbsent("local", "1");redisTemplate.opsForValue().setIfAbsent("local", "2");}@Testpublic void testHash(){//hset hget hdel hkeys hvalsHashOperations 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", "name");}@Testpublic void testList(){//lpush lrange rpop llenListOperations listOperations= redisTemplate.opsForList();listOperations.leftPushAll("mylist","a","b","c");listOperations.leftPush("mylist", "d");List list = listOperations.range("mylist", 0, -1);System.out.println(list);listOperations.rightPop("mylist");Long size = listOperations.size("mylist");System.out.println(size);}@Testpublic void testSet(){//sadd smembers scard sinter sunion sremSetOperations setOperations = redisTemplate.opsForSet();setOperations.add("set1", "a","b","c","d");setOperations.add("set2", "a", "b", "x", "y");Set members = setOperations.members("set1");System.out.println(members);Long size = setOperations.size("set1");System.out.println(size);Set intersect = setOperations.intersect("set1", "set2");System.out.println(intersect);Set union = setOperations.union("set1", "set2");System.out.println(union);setOperations.remove("set1", "a", "b");}@Testpublic void testZset(){// zadd zrange zincrby zremZSetOperations zSetOperations = redisTemplate.opsForZSet();zSetOperations.add("zset1", "a", 10);zSetOperations.add("zset1", "b", 12);zSetOperations.add("zset1", "c", 9);Set zset1 = zSetOperations.range("zset1", 0, -1);System.out.println(zset1);zSetOperations.incrementScore("zset1", "c", 10);zSetOperations.remove("zset1", "a", "b");}@Testpublic void testCommon(){//keys exists type delSet keys = redisTemplate.keys("*");System.out.println(keys);Boolean name = redisTemplate.hasKey("name");Boolean set1 = redisTemplate.hasKey("set1");System.out.println(name);System.out.println(set1);for (Object key : keys) {DataType type = redisTemplate.type(key);System.out.println(type.name());}redisTemplate.delete("mylist");}
}

店鋪營業狀態設置

需求分析和設計

產品原型

接口設計

營業狀態數據存儲方式:基于 Redis 的字符串來進行存儲

代碼開發

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.*;@RestController("adminShopController")
@RequestMapping("/admin/shop")
@Slf4j
@Api(tags = "管理端店鋪營業狀態相關接口")
public class ShopController {@AutowiredRedisTemplate redisTemplate;public static final String  KEY = "SHOP_STATUS";@GetMapping("/status")@ApiOperation("營業狀態查詢")public Result<Integer> getByStatus(){Integer status = (Integer) redisTemplate.opsForValue().get(KEY);log.info("當前店鋪的營業狀態為:{}", status == 1 ? "營業中": "打樣中");return Result.success(status);}@PutMapping("/{status}")@ApiOperation("營業狀態設置")public Result SetStatus(@PathVariable Integer status){log.info("將當前店鋪的狀態設置為:{}", status);redisTemplate.opsForValue().set(KEY, status);return Result.success();}
}
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.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController("userShopController")
@RequestMapping("/user/shop")
@Slf4j
@Api(tags = "用戶端店鋪營業狀態相關接口")
public class ShopController {@AutowiredRedisTemplate redisTemplate;public static final String  KEY = "SHOP_STATUS";@GetMapping("/status")@ApiOperation("營業狀態查詢")public Result<Integer> result(){Integer status = (Integer) redisTemplate.opsForValue().get(KEY);log.info("當前店鋪的營業狀態為:{}", status == 1 ? "營業中": "打樣中");return Result.success(status);}}

功能測試

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

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

相關文章

Linux驅動開發probe字符設備的完整創建流程

一、 設備號分配1.靜態分配通過register_chrdev_region預先指定設備號&#xff08;需要確保未被占用&#xff09;2.動態分配通過alloc_chrdev_region由內核自動分配主設備號&#xff0c;一般都是動態分配以避免沖突。3316 xxxx_dev.major 0; 3317 3318 if (xx…

生產環境中Spring Cloud Sleuth與Zipkin分布式鏈路追蹤實戰經驗分享

生產環境中Spring Cloud Sleuth與Zipkin分布式鏈路追蹤實戰經驗分享 在復雜的微服務架構中&#xff0c;服務調用鏈路繁雜&#xff0c;單點故障或性能瓶頸往往難以定位。本文結合真實生產環境案例&#xff0c;分享如何基于Spring Cloud Sleuth與Zipkin構建高可用、低開銷的分布…

基于Python的《紅樓夢》文本分析與機器學習應用

本文將詳細介紹如何使用Python和機器學習技術對《紅樓夢》進行深入的文本分析和處理&#xff0c;包括文本分卷、分詞、停用詞處理、TF-IDF特征提取以及文本可視化等關鍵技術。一、項目概述本項目的目標是對中國古典文學名著《紅樓夢》進行全面的自動化處理和分析&#xff0c;主…

Bevy渲染引擎核心技術深度解析:架構、體積霧與Meshlet渲染

本文將深入探討Bevy游戲引擎的渲染架構&#xff0c;重點分析其體積霧實現原理、Meshlet渲染技術以及基于物理的渲染&#xff08;PBR&#xff09;系統。內容嚴格基于技術實現細節&#xff0c;覆蓋從底層渲染管線到高級特效的全套解決方案。一、Bevy渲染架構深度解析1.1 核心架構…

CASS11計算斜面面積

1.生成三角網2.工程應用--計算表面積--根據三角網

借助Rclone快速從阿里云OSS遷移到AWS S3

本文作者: 封磊 Eclicktech SA | AWS Community Builder DevTool | AWS UGL | 亞馬遜云科技云博主 阿里云&InfoQ&CSDN簽約作者 概述 隨著企業云戰略的調整和多云架構的普及&#xff0c;數據遷移成為了一個常見需求。本文將詳細介紹如何使用Rclone工具&#xff0c;高效…

【入門系列】圖像算法工程師如何入門計算機圖形學?

作為圖像算法工程師&#xff0c;入門計算機圖形學&#xff08;CG&#xff09;有天然優勢——你熟悉圖像處理的像素級操作、數學工具&#xff08;如矩陣運算&#xff09;和優化思維&#xff0c;而圖形學的核心目標&#xff08;從3D信息生成2D圖像&#xff09;與圖像處理有很強的…

淘寶API列表:高效獲取商品詳情圖主圖商品視頻參數item_get

淘寶商品詳情信息基本都是用圖片展示的&#xff0c;制作精美&#xff0c;能更好的展示商品信息。如何通過API實現批量獲取商品詳情信息呢&#xff1f;1、在API平臺注冊賬號&#xff0c;獲取調用API的key和密鑰。2、查看API文檔&#xff0c;了解相關請求參數和返回參數。item_ge…

第23章,景深:技術綜述

一&#xff0c;定義&#xff1a; 中景&#xff1a;物體聚焦的范圍&#xff08;即清晰成像的范圍&#xff09;。 景深&#xff1a;在中景之外&#xff0c;都會成像模糊&#xff0c;即景深。景深通常用來指示對場景的注意范圍&#xff0c;并提供場景深度的感覺。 背景&#xff1a…

飛算 JavaAI -智慧城市項目實踐:從交通協同到應急響應的全鏈路技術革新

免責聲明&#xff1a;此篇文章所有內容都是本人實驗&#xff0c;并非廣告推廣&#xff0c;并非抄襲&#xff0c;如有侵權&#xff0c;請聯系。 目錄 一、智慧城市核心場景的技術攻堅 1.1 交通信號智能優化系統的實時決策 1.1.1 實時車流數據處理與分析 1.1.2 動態信號配時…

GM3568JHF快速入門教程【二】FPGA+ARM異構開發板環境編譯教程

SDK 可通過搭建好的 Docker 鏡像環境進行編譯。 具體參可考該部分文檔內容。1 Docker鏡像環境編譯SDK1.1 SDK 自動編譯命令切換到 Docker 內需要編譯的 SDK 根目錄&#xff0c;全自動編譯默認是 Buildroot&#xff0c; 可以通過設置環境變量 RK_ROOTFS_SYSTEM 指定不同 rootfs.…

Vue3 整合高德地圖完成搜索、定位、選址功能,已封裝為組件開箱即用(最新)

Vue3 整合高德地圖完成搜索、定位、選址功能&#xff08;最新&#xff09;1、效果演示2、前端代碼2.1 .env.development2.2 GaodeMap.vue2.3使用示例1、效果演示 2、前端代碼 2.1 .env.development https://console.amap.com/dev/key/app# 地圖配置 VITE_AMAP_KEY "您的…

SpringBoot切換 Servlet 容器為Undertow

題目詳細答案Spring Boot 默認使用 Tomcat 作為嵌入式的 Servlet 容器&#xff0c;但你也可以切換到 Undertow。Undertow 是一個輕量級、高性能的 Web 服務器和 Servlet 容器。步驟 1&#xff1a;排除 Tomcat 依賴需要在pom.xml文件&#xff08;如果使用的是 Maven&#xff09;…

通過限制對象的內存分配位置來實現特定的設計目標

《More Effective C》中的條款27聚焦于如何通過語言特性強制或禁止對象在堆上分配&#xff0c;其核心目標是通過控制內存分配位置來提升代碼的安全性、可維護性和資源管理效率。 個人覺得&#xff0c;這個條款看看就可以了&#xff0c;可能在個別情況下需要考慮條款中說的情況。…

廣東省省考備考(第七十四天8.12)——資料分析、數量關系(40%-70%正確率的題目)

資料分析 錯題解析解析今日題目正確率&#xff1a;87% 數量關系&#xff1a;數學運算 錯題解析解析備注&#xff1a; ①本題所求保護罩的表面積不包含底面。因為通常所說的“罩子”是沒有底面的&#xff0c;即使罩子有底面&#xff0c;往往底面材質和罩子材質也不一樣&#xff…

Java多源AI接口融合框架:動態模型切換與智能路由實戰

> 在電商客服場景中,用戶的一句“這件衣服適合夏天穿嗎?”需要同時調用服飾知識庫、天氣API和風格推薦模型,但當GPT-4響應延遲時能否無縫降級到Claude?在預算有限時能否自動選擇成本更低的本地模型? **多源AI接口整合已成為企業智能化落地的新基建**。據Gartner 2025報…

Linux中Docker redis介紹以及應用

一、NoSQL 1.1 單機mysql的美好時代 在90年代&#xff0c;一個網站的訪問量一般都不大&#xff0c;用單個數據庫完全可以輕松應付。 那個時候&#xff0c;更多的是靜態網頁&#xff0c;動態交互類型的網站不多。 上述架構上&#xff0c;我們來看看數據存儲的瓶頸是什么&…

鍋氣:「現炒之魂·煙火人間」

《現炒之魂煙火人間》高清4K寫實攝影方案高清4K寫實攝影方案描述&#xff0c;可直接作為AI繪畫工具&#xff08;如MidJourney/DALLE&#xff09;的提示詞使用&#xff1a;&#x1f31f; 核心概念? 主題&#xff1a;中式爆炒瞬間的生命力爆發? 氛圍&#xff1a;熾烈煙火氣 神…

【力扣494】目標和

用子集法&#xff0c;選or不選變成了正or負&#xff0c;BFS執行所有情況&#xff0c;判斷恰好為目標和。 靈神&#xff1a; 設所有數的和為s&#xff0c;取正的和為p&#xff0c;則和為p-(s-p)&#xff1b; 有t p-(s-p) 2p-s&#xff0c;即p (st)/2&#xff1b;這里的s和t都…

零基礎AI編程開發微信小程序賺流量主廣告實戰

目錄 前言&#xff1a;為什么選微信小程序流量主&#xff1f;零基礎也能搞定的開發流程AI編程助手怎么幫忙&#xff1f;實戰案例&#xff1a;做個AI圖片識別小程序流量主廣告怎么接入和變現&#xff1f;常見問題與避坑指南經驗總結與互動1. 前言&#xff1a;為什么選微信小程序…