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查看安装信息: brew info redis前台启动redis: redis-server后台启…...
超声波波形生成电路设计
摘要 随着我国微型电子技术和嵌入式系统的发展,目前行业内相对比较传统的超声波技术无法满足客户的需求。为了改进传统超声波技术在被测设备上的短板问题,在本次毕业设计中,将使用相对先进、快捷、智能的控制机制。该超声波生成控制系统的控制…...
C#和JS交互之Microsoft.ClearScript.V8(V8引擎)
之前测试了很多JS引擎,都只支持es5语法,不支持执行es6,测试了下微软的V8反正能跑通,应该是支持的。还得是微软呀。 如图:安装相关包: 这是参考的官方V8代码 using Microsoft.ClearScript.JavaScript; us…...
9月活动回顾(免费领取PPT)|火山引擎DataLeap、ByteHouse多位专家带来DataOps、实时计算等前沿技术分享!
更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 在上月举行的火山引擎开发者社区 Meetup 第12期暨超话数据专场《数智化转型背景下的火山引擎大数据技术揭秘》上,来自火山引擎DataLeap、EMR、DataSail、…...
salesforce的按钮执行js代码如何链接到apex代码
在Salesforce中,你可以通过自定义JavaScript按钮或链接来触发Apex代码的执行。这可以通过使用JavaScript Remoting或Visualforce页面来实现。以下是一些步骤来将JavaScript按钮与Apex代码链接起来: 使用JavaScript Remoting链接JavaScript按钮到Apex代码…...
C语言 —— 操作符
1. 操作符的分类 算术操作符: - * / % 移位操作符: << >> 位操作符: & | ^ 赋值操作符: - 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2. 算术操作符 - * / % 注意 /操作符: 对于整型的除法运算结果依然是整数…...
物联网AI MicroPython传感器学习 之 CCS811空气质量检测传感器
学物联网,来万物简单IoT物联网!! 一、产品简介 通过CCS811传感器模块可以测量环境中TVOC(总挥发性有机物质)浓度和eCO2(二氧化碳)浓度,作为衡量空气质量(IAQ)的指标。 引脚定义 VCC:3.3VGND&…...
TCP/IP(十五)拥塞控制
一 拥塞控制 ① 拥塞控制必要性 思考: 为什么要有拥塞控制呀,不是有流量控制了吗? ② 拥赛窗口 cwnd 什么是拥塞窗口? 和发送窗口有什么关系呢?明白: cwnd、swnd、rwnd 缩写 含义 ③ 如何知道当前网络是否出现了拥塞呢?…...
vue3 404解决方法
在 Vue 3 应用中解决 404 错误通常涉及到 Vue Router,因为 404 错误通常与路由无法匹配到的路径有关. 1. **检查路由配置**:首先确保你的路由配置正确。确保每个路由路径都与你的组件正确匹配,并且在需要时添加必要的路由守卫。 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协议中,使用protobuf格式进行二进制数据通信。双方需设置http的header中ContentType为application/x-protobuf。 1、springboot下实现protobuf: 1)pom.xml <dependency><groupId>org.springframework.boot</g…...
基于uniapp的商城外卖小程序
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...
【CSS】Tailwind CSS
直接参考 Tailwind CSS 安装提供了四种方式。因为我常用构建工具搭建项目,所以选择 Using PostCSS 。 其中 tailwind.config.js 的配置可以改为: module.exports {content: [./index.html, ./src/**/*.{vue,js,ts,jsx,tsx}],theme: {extend: {},},pl…...
leetcode-电话号码组合(C CODE)
1. 题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits “23” 输出&#…...
Leetcode92. 反转链表 II
Every day a Leetcode 题目来源:92. 反转链表 II 解法1:模拟 注意 STL 的 reverse() 是左闭右开的。 代码: class Solution { public:ListNode *reverseBetween(ListNode *head, int left, int right){vector<int> nums getNums(…...
【算法作业记录】
插入排序 递归实现 直接插入 #将a[n]插入有序区间a[0,n-1]中 时间复杂度 O(n) 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,n-…...
回归预测、分类预测、时间序列预测 都有什么区别?
回归预测、分类预测和时间序列预测都是统计和机器学习领域中的预测任务,它们在问题设置和解决的方式上有一些关键区别: 回归预测: 回归预测用于预测连续数值的输出,通常是实数。例如,预测房价、气温、销售额等连续型输…...
关于网络协议的若干问题(三)
1、当发送的报文出问题的时候,会发送一个 ICMP 的差错报文来报告错误,但是如果 ICMP 的差错报文也出问题了呢? 答:不会导致产生 ICMP 差错报文的有: ICMP 差错报文(ICMP 查询报文可能会产生 ICMP 差错报文…...
办公室人人在用的iTab桌面真的好用吗?
本人坐标北京,在一家中型互联网公司当社畜多年。最近发现一个奇怪的现象,我工位前后左右的同事都跟我在用一样的浏览器桌面——iTab新标签页。我表示莫非真的英雄所见略同? 我是去年1月份在刷B站时偶然刷到一条评论,有人分享自己…...
循环中的else语句
while 循环else结构: 循环可以和else配合使用,else下方缩进的代码指的是当循环正常结束之后要执行的代码. 需求:女朋友生气了,要惩罚:连续说5遍“老婆大人,我错了”,如果道歉正常完毕后女朋友就原谅我了:…...
论文Review 3DGS | Deformable Beta Splatting | 用 Beta Kernel 替代 Gaussian Kernel 的实时辐射场渲染方法
基本信息 题目:Deformable Beta Splatting 作者:Rong Liu, Dylan Sun, Meida Chen, Yue Wang, Andrew Feng 单位:University of Southern California / Institute for Creative Technologies 时间:2025 年 5 月,ar…...
C#实战:利用NModbus4库高效读写西门子PLC浮点数据
1. 为什么选择NModbus4与西门子PLC通信? 在工业自动化领域,西门子PLC作为主流控制器,经常需要与上位机进行数据交换。而Modbus TCP协议因其跨平台性和简单易用的特点,成为连接不同厂商设备的通用方案。我在多个工业数据采集项目中…...
基于MCP协议构建AI工具集成服务器:从原理到实践
1. 项目概述:一个开源的MCP服务器实现最近在折腾AI应用开发,特别是想给本地的大语言模型(LLM)加点“外挂”,让它能直接操作我的文件系统、数据库,甚至调用一些外部API。这让我接触到了一个挺有意思的概念&a…...
基于SSE的轻量级实时通信库Hermes:Web应用实时消息推送实践
1. 项目概述:一个为Web应用量身打造的“信使”最近在折腾一个前后端分离的项目,后端服务部署在云端,前端应用则直接跑在用户的浏览器里。一个老生常谈的问题又摆在了面前:如何让前端能实时、可靠地获取后端的数据变更通知…...
Web无障碍性自动化检查:CLI工具集成与工程实践指南
1. 项目概述:一个为开发者赋能的Web无障碍性CLI工具 如果你是一名前端开发者、测试工程师,或者正在构建一个需要服务广泛用户群体的Web应用,那么“无障碍性”(Accessibility, 常缩写为 a11y)这个词对你来说…...
完美解决VS Code/Cursor远程连接报错:远程主机不满足运行 VS Code 服务器的先决条件(附AI编程最佳实践)
完美解决VS Code/Cursor远程连接报错:远程主机不满足运行 VS Code 服务器的先决条件(附AI编程最佳实践) 💡 背景与痛点 最近在接手维护一个老项目,服务器是腾讯云的轻量应用服务器,装了宝塔面板。在经历了一…...
使用git filter-repo删除已提交到git中的敏感信息,api key,配置文件等
使用git filter-repo删除已提交到git中的敏感信息,api key,配置文件等 前提条件 Python 3.5 git > 2.22.0通过 pip 安装:pip install git-filter-repo 注意事项 官方推荐在fresh clone上修改,即clone一份远程的再做修改 操作后…...
数据库角色管理(Role Management)
1.1、角色基础角色是权限的集合,是 Oracle 权限管理的核心机制。12c 增强了角色的安全特性。创建角色:CREATE ROLE app_developer;创建带密码的角色(需激活时提供密码):CREATE ROLE sensitive_role IDENTIFIED BY &quo…...
告别ifconfig!用systemd-networkd和networkctl命令管理Linux网络(Ubuntu 22.04+实战)
告别ifconfig!用systemd-networkd和networkctl命令管理Linux网络(Ubuntu 22.04实战) 在Linux网络管理的演进历程中,ifconfig和ip命令曾长期占据主导地位。然而随着systemd生态的成熟,systemd-networkd配合networkctl命…...
linux操作系统乱码:Malformed input or input contains unmappable characters:
目录 问题 解决问题 查看 手动生成 zh_CN.UTF-8 字符集 centos8 问题 java.nio.file.InvalidPathException: Malformed input or input contains unmappable characters: /home/dualven/wvp-server/static/kmz/段雄文的航线.kmz 解决问题 查看 java -XshowSettings:pr…...
