【JavaWeb后端学习笔记】Redis常用命令以及Java客户端操作Redis
redis
- 1、redis安装与启动服务
- 2、redis数据类型
- 3、redis常用命令
- 3.1 字符串String
- 3.2 哈希Hash
- 3.3 列表List
- 3.4 集合Set(无序)
- 3.5 有序集合zset
- 3.6 通用命令
- 4、使用Java操作Redis
- 4.1 环境准备
- 4.2 Java操作字符串String
- 4.3 Java操作哈希Hash
- 4.4 Java操作列表List
- 4.5 Java操作集合Set(无序)
- 4.6 Java操作有序集合zset
- 4.7 Java实现Redis常用命令
redis是基于内存的key-value结构的数据库。
1、redis安装与启动服务
安装redis主需要将下载好的redis压缩包解压到无中文的目录中即可。
启动服务打开命令行窗口,通过cd命令进入redis安装目录。或者在资源管理器中先进入redis安装目录,然后再该目录中打开命令行窗口。输入如下命令启动redis服务:
redis-server.exe redis.windows.conf
关闭服务按Ctrl + C
通过客户端连接redis服务。在安装目录中重新打开一个命令行窗口。由于redis默认是没有密码的,所以可以直接输入如下命令:
redis-cli.exe
设置redis密码。打开redis配置文件redis.windows.conf,找到配置密码命令,大概在443行。取消注释,将foobared替换成自己的密码,保存文件,重新启动服务即可。
requirepass foobared
设置密码之后重新通过客户端连接redis服务需要加上密码,完整命令为:
// -h 指定主机地址 -p 指定端口 -a redis密码
redis-cli.exe -h localhost -p 6379 -a 123456
可以通过redis客户端可视化软件连接redis服务,简化redis操作。
2、redis数据类型
redis有5种常用数据类型。
数据类型 | 特点 |
---|---|
字符串(String) | 普通字符串,Redis中最简单的数据类型 |
哈希(hash) | 也叫散列,类似于Java中的HashMap结构 |
列表(list) | 按照插入顺序排列,可以有重复元素,类似于Java中的LinkedList |
集合(set) | 无序集合,没有重复元素,类似于Java中的HashSet |
有序集合(sorted set / zset) | 集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素 |
3、redis常用命令
3.1 字符串String
命令 | 说明 |
---|---|
SET key value | 设置指定key的值 |
GET key | 获取指定key的值 |
SETEX key seconds value | 设置指定key的值,并将key的过期时间设为seconds秒 |
SETNX key value | 只有在key不存在时设置key的值 |
3.2 哈希Hash
Redis hash是一个 String 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
命令 | 说明 |
---|---|
HSET key field value | 将哈希表key中的字段field的值设为value |
HGET key field | 获取存储在哈希表中指定字段的值 |
HDEL key field | 删除存储在哈希表中的指定字段 |
HKEYS key | 获取哈希表中的所有字段 |
HVALS key | 获取哈希表中的所有值 |
3.3 列表List
命令 | 说明 |
---|---|
LPUSH key value1 [value2] | 将一个或多个值插入到列表头部 |
LRANGE key start stop | 获取列表指定范围内的元素,查询所有元素start=0,stop=1 |
RPOP key | 移除并获取列表最后一个元素 |
LLEN key | 获取列表长度 |
3.4 集合Set(无序)
命令 | 说明 |
---|---|
SADD key member1 [member2] | 向集合添加一个或多个成员 |
SMEMBERS key | 返回集合中的所有成员 |
SCARD key | 获取集合的成员数 |
SINTER key1 [key2] | 返回给定所有集合的交集 |
SUNION key1 [key2] | 返回所有给定集合的并集 |
SREM key member1 [member2] | 删除集合中一个或多个成员 |
3.5 有序集合zset
命令 | 说明 |
---|---|
ZADD key score1 member1 [score2 member2] | 向有序集合添加成员 |
ZRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合中指定区间内的成员 |
ZINCRBY key increment member | 有序集合中对指定成员的分数加上增量increment |
ZREM key member [member…] | 移除有序集合中的一个或多个成员 |
3.6 通用命令
命令 | 说明 |
---|---|
KEYS pattern | 查找所有符合给定模式(pattern)的key |
EXISTS key | 检查给定key是否存在 |
TYPE key | 返回key所储存的值的类型 |
DEL key | 该命令用于在key存在时删除key |
4、使用Java操作Redis
Redis的Java客户端有很多种,这里介绍Spring Data Redis。
Spring Data Redis是Spring的一部分,对Redis底层开发包进行了高度封装。在Spring项目中,可以使用Spring Data Redis来简化操作。
4.1 环境准备
- 引入Redis依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 在配置文件中配置Redis数据源
host:主机地址;port:Redis端口号;password:Redis密码;database:数据库0-15
spring:redis:host: localhostport: 6379password: 123456database: 0
- 编写配置类
@Configuration
@Slf4j
public class RedisConfiguration {@Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { // 注入Redis连接工厂对象log.info("开始创建RedisTemplate对象...");RedisTemplate redisTemplate = new RedisTemplate();// 设置redis的连接工厂对象redisTemplate.setConnectionFactory(redisConnectionFactory);// 设置redis key的序列化器redisTemplate.setKeySerializer(new StringRedisSerializer());return redisTemplate;}
}
- 通过注入RedisTemplate 对象操作Redis。
// 注入RedisTemplate 对象
@Autowired
private RedisTemplate redisTemplate;
4.2 Java操作字符串String
说明 | 方法 |
---|---|
获取操作 String 的对象 | opsForValue() |
设置指定key的值 | set(key, value) |
获取指定key的值 | get() |
设置指定key的值,并设置key的过期时间 | set(key, value, 时间, 单位) |
只有在key不存在时设置key的值 | setIfAbsent(key, value) |
Java代码示例:
ValueOperations valueOperations = redisTemplate.opsForValue(); // 获取操作 String 的对象
valueOperations.set("city", "beijing"); // SET key value
String city = (String) valueOperations.get("city"); // GET key
System.out.println(city);valueOperations.set("code", "123456", 60, TimeUnit.SECONDS); // SETEX key seconds value
valueOperations.setIfAbsent("lock", 1); // SETNX key value
valueOperations.setIfAbsent("lock", 2);
4.3 Java操作哈希Hash
说明 | 方法 |
---|---|
获取操作 hash 的对象 | opsForHash() |
将哈希表key中的字段field的值设为value | put(key, field, value) |
获取存储在哈希表中指定字段的值 | get(key, field) |
删除存储在哈希表中的指定字段 | delete(key, field) |
获取哈希表中的所有字段 | keys(key) |
获取哈希表中的所有值 | values(key) |
Java代码示例:
HashOperations hashOperations = redisTemplate.opsForHash(); // 获取操作 hash 的对象
hashOperations.put("100", "name", "Tom"); // HSET key field value
hashOperations.put("100", "age", "20");
String name = (String) hashOperations.get("100", "name"); // HGET key field
System.out.println(name);Set keys = hashOperations.keys("100"); // HKEYS key
System.out.println(keys);
List values = hashOperations.values("100"); // HVALS key
System.out.println(values);
hashOperations.delete("100", "name"); // HDEL key field
4.4 Java操作列表List
说明 | 方法 |
---|---|
获取操作 list 的对象 | opsForList() |
将一个或多个值插入到列表头部 | leftPushAll(key, value1, value2) |
插入单个值 | leftPush(key, value) |
获取列表指定范围内的元素,查询所有元素start=0,stop=1 | range(key, start, stop) |
移除并获取列表最后一个元素 | rightPop(key) |
获取列表长度 | size(key) |
Java代码范例:
ListOperations listOperations = redisTemplate.opsForList(); // 获取操作 list 的对象
listOperations.leftPushAll("mylist", "a", "b", "c"); // LPUSH key value1 [value2] 插入多个值
listOperations.leftPush("mylist", "d"); // LPUSH key value1 插入单个值List mylist = listOperations.range("mylist", 0, -1); // LRANGE key start stop
System.out.println(mylist);listOperations.rightPop("mylist"); // RPOP keyLong size = listOperations.size("mylist"); // LLEN key
System.out.println(size);
4.5 Java操作集合Set(无序)
说明 | 方法 |
---|---|
获取操作 set 的对象 | opsForSet() |
向集合添加一个或多个成员 | add(setKey, member1, member2) |
返回集合中的所有成员 | members(setKey) |
获取集合的成员数 | size(setKey) |
返回给定所有集合的交集 | intersect(setKey1, setKey2) |
返回所有给定集合的并集 | union(setKey1, setKey2) |
删除集合中一个或多个成员 | remove(setKey, member1, member2) |
Java代码范例:
SetOperations setOperations = redisTemplate.opsForSet(); // 获取操作 set 的对象
setOperations.add("set1", "a", "b", "c", "d"); // SADD key member1 [member2]
setOperations.add("set2", "a", "b", "x", "y");Set set1Members = setOperations.members("set1"); // SMEMBERS key
System.out.println(set1Members);Long set1Size = setOperations.size("set1"); // SCARD key
System.out.println(set1Size);Set intersect = setOperations.intersect("set1", "set2"); // SINTER key1 key2 [key3]
System.out.println(intersect);Set union = setOperations.union("set1", "set2"); // SUNION key1 key2 [key3]
System.out.println(union);setOperations.remove("set1", "a"); // SREM key member1 [member2]
4.6 Java操作有序集合zset
命令/说明 | 方法 |
---|---|
获取操作 zset 的对象 | opsForZSet() |
向有序集合添加成员 | add(zsetKey, member, score) |
通过索引区间返回有序集合中指定区间内的成员 | range(zsetKey, start, stop) |
有序集合中对指定成员的分数加上增量increment | incrementScore(zsetKey, member, increment) |
移除有序集合中的一个或多个成员 | remove(zsetKey, member1, member2) |
Java代码范例:
ZSetOperations zSetOperations = redisTemplate.opsForZSet(); // 获取操作 zset 的对象
zSetOperations.add("zset1", "a", 10); // ZADD key score member1
zSetOperations.add("zset1", "b", 12);
zSetOperations.add("zset1", "c", 9);Set zset1 = zSetOperations.range("zset1", 0, -1); // ZRANGE key start stop
System.out.println(zset1);zSetOperations.incrementScore("zset1", "c", 10); // ZINCRBY key increment memberzSetOperations.remove("zset1", "a", "b"); // ZREM key member1 [member2]
4.7 Java实现Redis常用命令
通用操作直接使用redisTemplate对象。
说明 | 方法 |
---|---|
查找所有符合给定模式(pattern)的key | keys(“给定的模式”) |
检查给定key是否存在 | hasKey(key) |
返回key所储存的值的类型 | type(key) |
该命令用于在key存在时删除key | delete(key) |
Java代码范例:
// 通用操作直接使用redisTemplate对象
Set keys = redisTemplate.keys("*"); // KEYS pattern
System.out.println(keys);Boolean name = redisTemplate.hasKey("name"); // EXISTS keyfor(Object key : keys){DataType type = redisTemplate.type(key); // TYPE keySystem.out.println(type.name());
}redisTemplate.delete("mylist"); // DEL key
相关文章:

【JavaWeb后端学习笔记】Redis常用命令以及Java客户端操作Redis
redis 1、redis安装与启动服务2、redis数据类型3、redis常用命令3.1 字符串String3.2 哈希Hash3.3 列表List3.4 集合Set(无序)3.5 有序集合zset3.6 通用命令 4、使用Java操作Redis4.1 环境准备4.2 Java操作字符串String4.3 Java操作哈希Hash4.4 Java操作…...

pdb调试器详解
文章目录 1. 启动 pdb 调试器1.1 在代码中插入断点1.2 使用命令行直接调试脚本 2. 常用调试命令2.1 基本命令2.2 高级命令2.3 断点操作 3. 调试过程示例4. 调试技巧4.1 条件断点4.2 自动启用调试4.2.1 运行程序时指定 -m pdb4.2.2在代码中启用 pdb.post_mortem4.2.3 使用 sys.e…...

项目15:简易扫雷--- 《跟着小王学Python·新手》
项目15:简易扫雷 — 《跟着小王学Python新手》 《跟着小王学Python》 是一套精心设计的Python学习教程,适合各个层次的学习者。本教程从基础语法入手,逐步深入到高级应用,以实例驱动的方式,帮助学习者逐步掌握Python的…...

Flink CDC实时同步mysql数据
官方参考资料: https://nightlies.apache.org/flink/flink-cdc-docs-master/zh/docs/connectors/flink-sources/mysql-cdc/ Apache Flink 的 Change Data Capture (CDC) 是一种用于捕获数据库变化(如插入、更新和删除操作)的技术。Flink CDC…...
题解 - 自然数无序拆分
题目描述 美羊羊给喜羊羊和沸羊羊出了一道难题,说谁能先做出来,我就奖励给他我自己做的一样礼物。沸羊羊这下可乐了,于是马上答应立刻做出来,喜羊羊见状,当然也不甘示弱,向沸羊羊发起了挑战。 可是这道题目…...
dfs_bool_void 两种写法感悟
dfs 的两种写法 在看之前实现图的遍历 dfs 和拓扑排序 dfs 实现的代码的时候的感悟 图的遍历 dfs 和拓扑排序 dfs 的区别 0 → 1 ↓ ↓ 2 → 3图的邻接表表示: adjList[0] {1, 2}; adjList[1] {3}; adjList[2] {3}; adjList[3] {};正常的 DFS 遍历&#x…...
MySQL 主从复制与 Binlog 深度解析
目录 1. Binlog的工作原理与配置2. 主从复制的设置与故障排除3. 数据一致性与同步延迟的处理 小结 MySQL的binlog(二进制日志)和主从复制是实现数据备份、容灾、负载均衡以及数据同步的重要机制。在高可用性架构和分布式数据库设计中,binlog同…...

大连理工大学《2024年845自动控制原理真题》 (完整版)
本文内容,全部选自自动化考研联盟的:《大连理工大学845自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦 目录 2024年真题 Part1:2024年完整版真题 2024年真题...

Java性能调优 - 多线程性能调优
锁优化 Synchronized 在JDK1.6中引入了分级锁机制来优化Synchronized。当一个线程获取锁时 首先对象锁将成为一个偏向锁,这样做是为了优化同一线程重复获取锁,导致的用户态与内核态的切换问题;其次如果有多个线程竞争锁资源,锁…...
行为树详解(4)——节点参数配置化
【分析】 行为树是否足够灵活强大依赖于足够丰富的各类条件节点和动作节点,在实现这些节点时,不可避免的,节点本身需要有一些参数供配置。 这些参数可以分为静态的固定值的参数以及动态读取设置的参数。 静态参数直接设置为Public即可&…...
计算机网络中的三大交换技术详解与实现
目录 计算机网络中的三大交换技术详解与实现1. 计算机网络中的交换技术概述1.1 交换技术的意义1.2 三大交换技术简介 2. 电路交换技术2.1 理论介绍2.2 Python实现及代码详解2.3 案例分析 3. 分组交换技术3.1 理论介绍3.2 Python实现及代码详解3.3 案例分析 4. 报文交换技术4.1 …...
《杨辉三角》
题目描述 给出 n(1≤n≤20)n(1≤n≤20),输出杨辉三角的前 nn 行。 如果你不知道什么是杨辉三角,可以观察样例找找规律。 输入格式 无 输出格式 无 输入输出样例 输入 #1复制 6 输出 #1复制 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 C语言…...

ARM学习(35)单元测试框架以及MinGW GCC覆盖率报告
单元测试框架以及MinGW GCC覆盖率报告 1、单元测试与覆盖率简介 随着代码越写越多,越来越需要注意自测的重要性,基本可以提前解决90%的问题,所以就来介绍一下单元测试,单元测试是否测试充分,需要进行评价,覆盖率就是单元测试是否充分的评估工具。 例如跑过单元测试后,…...

边缘计算+人工智能:让设备更聪明的秘密
引言:日常生活中的“智能”设备 你是否发现,身边的设备正变得越来越“聪明”? 早上醒来时,智能音箱已经根据你的日程播放舒缓音乐;走进厨房,智能冰箱提醒你今天的食材库存;而在城市道路上&…...
neo4j知识图谱AOPC的安装方法
AOPC下载链接:aopc全版本github下载 APOC,全称为Awesome Procedures On Cypher,是Neo4j图数据库的一个非常强大和流行的扩展库。它极大地丰富了Cypher查询语言的功能,提供了超过450个过程(procedures)和函数…...

图像分割数据集植物图像叶片健康状态分割数据集labelme格式180张3类别
数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):180 标注数量(json文件个数):180 标注类别数:3 标注类别名称:["Healthy","nitrogen deficiency"…...

Python学习(二)—— 基础语法(上)
目录 一,表达式和常量和变量 1.1 表达式 1.2 变量 1.3 动态类型特性 1.4 输入 二,运算符 2.1 算术运算符 2.2 关系运算符 2.3 逻辑运算符 2.4 赋值运算符 2.5 练习 三,语句 3.1 条件语句 3.2 while循环 3.3 for循环 四&#…...

Cesium-(Primitive)-(CircleOutlineGeometry)
CircleOutlineGeometry 效果: CircleOutlineGeometry 是 CesiumJS 中的一个类,它用来描述在椭球体上圆的轮廓。以下是 CircleOutlineGeometry 的构造函数属性,以表格形式展示: 属性名类型默认值描述centerCartesian3圆心点在固定坐标系中的坐标。radiusnumber圆的半径,…...
计算机网络技术基础:2.计算机网络的组成
计算机网络从逻辑上可以分为两个子网:资源子网和通信子网。 一、资源子网 资源子网主要负责全网的数据处理业务,为全网用户提供各种网络资源与网络服务。资源子网由主机、终端、各种软件资源与信息资源等组成。 1)主机 主机是资源子网的主要…...
EasyExcel使用管道流连接InputStream和OutputStream
前言 Java中的InputSteam 是程序从其中读取数据, OutputSteam是程序可以往里面写入数据。 如果我们有在项目中读取数据库的记录, 在转存成Excel文件, 再把文件转存到OSS中。 生成Excel使用的是阿里的EasyExcel 。 他支持Output的方式写出文件内容。 而…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...