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;为什么选微信小程序…