当前位置: 首页 > news >正文

Springboot中使用Redis

Redis 是一个基于内存的key-value的结构数据库
适合存储热点数据

Macos安装Redis

https://redis.io/docs/getting-started/installation/install-redis-on-mac-os/
安装redis

brew install redis

查看安装信息:

brew info redis

前台启动redis:

redis-server

后台启动redis:

brew services start redis

查看信息:

brew services info redis

停止:

brew services stop redis

配置

打开/opt/homebrew/etc/redis.conf配置文件
修改密码

requirepass 123456

登录redis

redis-cli -h localhost -p 6379 -a 123456

数据结构

字符串

SET key value #设置
GET key #获取
SETEX key seconds value #设置指定key过期时间,单位s
SETNX key vvalue 只有在key不存在时才设置

哈希

HSET key fiele value  将key设置为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 number1 [number2] 插入一个成员
SMEMBERS key 返回集合中所有成员
SCARD key 获取成员数
SINTER key1[key2] 返回定义所哟集合的交集
SUNION key1 [key2] 返回所有集合的并集
SREM key number1[numer2] 删除集合中成员

有序集合

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

通用命令

KEYS pattern 查找所有符合给定模式的key
EXISTS key 检查给定key是否存在
TYPE key 返回key 所存储的值的类型
DEL key 在key存在时删除key

SpringBoot中使用Redis

导入依赖

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

配置Redis

spring:redis:host: localhostport: 6379password: 123456database: 0

编写配置类

@Slf4j
@Configuration
public class RedisConfiguration {@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate redisTemplate = new RedisTemplate<>();// 设置redis连接工厂redisTemplate.setConnectionFactory(redisConnectionFactory);// 设置redis的String/Value的默认序列化方式redisTemplate.setKeySerializer(new StringRedisSerializer());log.info("RedisTemplate注入成功");return redisTemplate;}
}

使用Redis

@SpringBootTest
class RedisConfigurationTest {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void testString() {ValueOperations valueOperations = redisTemplate.opsForValue();valueOperations.set("name", "cxk");String name = (String) valueOperations.get("name");System.out.println(name);valueOperations.set("code", "1234", 3, TimeUnit.HOURS); //3小时后过期valueOperations.setIfAbsent("code1", "1234"); //如果不存在则设置}@Testpublic void testHash() {HashOperations hashOperations = redisTemplate.opsForHash();hashOperations.put("user", "name", "cxk");hashOperations.put("user", "age", "18");String name = (String) hashOperations.get("user", "name");System.out.println(name);Set user = hashOperations.keys("user");System.out.println(user);List user1 = hashOperations.values("user");System.out.println(user1);hashOperations.delete("user", "name");}@Testpublic void testList() {ListOperations listOperations = redisTemplate.opsForList();listOperations.leftPushAll("list", "a", "b", "c");listOperations.leftPush("list", "d");List list = listOperations.range("list", 0, -1);System.out.println(list);listOperations.rightPop("list");Long size = listOperations.size("list");System.out.println(size);}@Testpublic void testSet() {SetOperations setOperations = redisTemplate.opsForSet();setOperations.add("set", "a", "b", "c", "d", "e");Set set = setOperations.members("set");System.out.println(set);setOperations.remove("set", "a", "b");set = setOperations.members("set");System.out.println(set);setOperations.add("set2", "a", "b", "c", "d", "e");Set union = setOperations.union("set", "set2");Set intersect = setOperations.intersect("set", "set2");Set difference = setOperations.difference("set", "set2");System.out.println(union);System.out.println(intersect);System.out.println(difference);}@Testpublic void testZset(){ZSetOperations zSetOperations = redisTemplate.opsForZSet();zSetOperations.add("zset", "a", 1);zSetOperations.add("zset", "b", 2);zSetOperations.add("zset", "c", 3);Set zset = zSetOperations.range("zset", 0, -1);System.out.println(zset);zSetOperations.incrementScore("zset", "a", 1);zSetOperations.remove("zset", "a");}@Testpublic void testCommon(){Set keys = redisTemplate.keys("*");System.out.println(keys);Boolean name = redisTemplate.hasKey("name");for (Object key : keys) {DataType type = redisTemplate.type(key);System.out.println(type.name());}redisTemplate.delete("name");}
}

相关文章:

Springboot中使用Redis

Redis 是一个基于内存的key-value的结构数据库适合存储热点数据 Macos安装Redis https://redis.io/docs/getting-started/installation/install-redis-on-mac-os/安装redis brew install redis查看安装信息&#xff1a; brew info redis前台启动redis: redis-server后台启…...

超声波波形生成电路设计

摘要 随着我国微型电子技术和嵌入式系统的发展&#xff0c;目前行业内相对比较传统的超声波技术无法满足客户的需求。为了改进传统超声波技术在被测设备上的短板问题&#xff0c;在本次毕业设计中&#xff0c;将使用相对先进、快捷、智能的控制机制。该超声波生成控制系统的控制…...

C#和JS交互之Microsoft.ClearScript.V8(V8引擎)

之前测试了很多JS引擎&#xff0c;都只支持es5语法&#xff0c;不支持执行es6&#xff0c;测试了下微软的V8反正能跑通&#xff0c;应该是支持的。还得是微软呀。 如图&#xff1a;安装相关包&#xff1a; 这是参考的官方V8代码 using Microsoft.ClearScript.JavaScript; us…...

9月活动回顾(免费领取PPT)|火山引擎DataLeap、ByteHouse多位专家带来DataOps、实时计算等前沿技术分享!

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 在上月举行的火山引擎开发者社区 Meetup 第12期暨超话数据专场《数智化转型背景下的火山引擎大数据技术揭秘》上&#xff0c;来自火山引擎DataLeap、EMR、DataSail、…...

salesforce的按钮执行js代码如何链接到apex代码

在Salesforce中&#xff0c;你可以通过自定义JavaScript按钮或链接来触发Apex代码的执行。这可以通过使用JavaScript Remoting或Visualforce页面来实现。以下是一些步骤来将JavaScript按钮与Apex代码链接起来&#xff1a; 使用JavaScript Remoting链接JavaScript按钮到Apex代码…...

C语言 —— 操作符

1. 操作符的分类 算术操作符: - * / % 移位操作符: << >> 位操作符: & | ^ 赋值操作符: - 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2. 算术操作符 - * / % 注意 /操作符: 对于整型的除法运算结果依然是整数…...

物联网AI MicroPython传感器学习 之 CCS811空气质量检测传感器

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 通过CCS811传感器模块可以测量环境中TVOC(总挥发性有机物质)浓度和eCO2(二氧化碳)浓度&#xff0c;作为衡量空气质量&#xff08;IAQ&#xff09;的指标。 引脚定义 VCC&#xff1a;3.3VGND&…...

TCP/IP(十五)拥塞控制

一 拥塞控制 ① 拥塞控制必要性 思考&#xff1a; 为什么要有拥塞控制呀,不是有流量控制了吗&#xff1f; ② 拥赛窗口 cwnd 什么是拥塞窗口? 和发送窗口有什么关系呢?明白&#xff1a; cwnd、swnd、rwnd 缩写 含义 ③ 如何知道当前网络是否出现了拥塞呢&#xff1f;…...

vue3 404解决方法

在 Vue 3 应用中解决 404 错误通常涉及到 Vue Router&#xff0c;因为 404 错误通常与路由无法匹配到的路径有关. 1. **检查路由配置**&#xff1a;首先确保你的路由配置正确。确保每个路由路径都与你的组件正确匹配&#xff0c;并且在需要时添加必要的路由守卫。 2. **通配符…...

Unity中使用Xlua调用lua相关

//引用命名空间 using XLua; public class L1 : MonoBehaviour {// Start is called before the first frame updatevoid Start(){//Lua解析器 让我们在Unity中使用luaLuaEnv env new LuaEnv();//执行env.DoString("print(OK)");//执行一个Lua脚本 在resource文件夹…...

基于http的protobuf服务实现

本文介绍在http协议中&#xff0c;使用protobuf格式进行二进制数据通信。双方需设置http的header中ContentType为application/x-protobuf。 1、springboot下实现protobuf&#xff1a; 1&#xff09;pom.xml <dependency><groupId>org.springframework.boot</g…...

基于uniapp的商城外卖小程序

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...

【CSS】Tailwind CSS

直接参考 Tailwind CSS 安装提供了四种方式。因为我常用构建工具搭建项目&#xff0c;所以选择 Using PostCSS 。 其中 tailwind.config.js 的配置可以改为&#xff1a; module.exports {content: [./index.html, ./src/**/*.{vue,js,ts,jsx,tsx}],theme: {extend: {},},pl…...

leetcode-电话号码组合(C CODE)

1. 题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits “23” 输出&#…...

Leetcode92. 反转链表 II

Every day a Leetcode 题目来源&#xff1a;92. 反转链表 II 解法1&#xff1a;模拟 注意 STL 的 reverse() 是左闭右开的。 代码&#xff1a; class Solution { public:ListNode *reverseBetween(ListNode *head, int left, int right){vector<int> nums getNums(…...

【算法作业记录】

插入排序 递归实现 直接插入 #将a[n]插入有序区间a[0,n-1]中 时间复杂度 O&#xff08;n&#xff09; def Insert(a,n):inwhile(i>0 and a[i-1]>a[i]):tmpa[i]a[i]a[i-1]a[i-1]tmpi-1return #直接插入排序 def Insertsort(a,n):for i in range(1,n):#【1&#xff0c;n-…...

回归预测、分类预测、时间序列预测 都有什么区别?

回归预测、分类预测和时间序列预测都是统计和机器学习领域中的预测任务&#xff0c;它们在问题设置和解决的方式上有一些关键区别&#xff1a; 回归预测&#xff1a; 回归预测用于预测连续数值的输出&#xff0c;通常是实数。例如&#xff0c;预测房价、气温、销售额等连续型输…...

关于网络协议的若干问题(三)

1、当发送的报文出问题的时候&#xff0c;会发送一个 ICMP 的差错报文来报告错误&#xff0c;但是如果 ICMP 的差错报文也出问题了呢&#xff1f; 答&#xff1a;不会导致产生 ICMP 差错报文的有&#xff1a; ICMP 差错报文&#xff08;ICMP 查询报文可能会产生 ICMP 差错报文…...

办公室人人在用的iTab桌面真的好用吗?

本人坐标北京&#xff0c;在一家中型互联网公司当社畜多年。最近发现一个奇怪的现象&#xff0c;我工位前后左右的同事都跟我在用一样的浏览器桌面——iTab新标签页。我表示莫非真的英雄所见略同&#xff1f; 我是去年1月份在刷B站时偶然刷到一条评论&#xff0c;有人分享自己…...

循环中的else语句

while 循环else结构: 循环可以和else配合使用&#xff0c;else下方缩进的代码指的是当循环正常结束之后要执行的代码. 需求&#xff1a;女朋友生气了&#xff0c;要惩罚&#xff1a;连续说5遍“老婆大人&#xff0c;我错了”&#xff0c;如果道歉正常完毕后女朋友就原谅我了:…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...