【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的方式写出文件内容。 而…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
