【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的方式写出文件内容。 而…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
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是一个异步的、基于事件驱动的网络应用框架,用于…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
