【JavaWeb后端学习笔记】Redis常用命令以及Java客户端操作Redis

news2024/12/17 4:42:55

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 环境准备

  1. 引入Redis依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  1. 在配置文件中配置Redis数据源
    host:主机地址;port:Redis端口号;password:Redis密码;database:数据库0-15
spring:
  redis:
    host: localhost
    port: 6379
    password: 123456
    database: 0
  1. 编写配置类
@Configuration
@Slf4j
public class RedisConfiguration {

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { // 注入Redis连接工厂对象
        log.info("开始创建RedisTemplate对象...");
        RedisTemplate redisTemplate = new RedisTemplate();
        // 设置redis的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        // 设置redis key的序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }
}
  1. 通过注入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的值设为valueput(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=1range(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 key

Long 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)
有序集合中对指定成员的分数加上增量incrementincrementScore(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 member

zSetOperations.remove("zset1", "a", "b");  		// ZREM key member1 [member2]

4.7 Java实现Redis常用命令

通用操作直接使用redisTemplate对象。

说明方法
查找所有符合给定模式(pattern)的keykeys(“给定的模式”)
检查给定key是否存在hasKey(key)
返回key所储存的值的类型type(key)
该命令用于在key存在时删除keydelete(key)

Java代码范例:

// 通用操作直接使用redisTemplate对象
Set keys = redisTemplate.keys("*");  // KEYS pattern
System.out.println(keys);

Boolean name = redisTemplate.hasKey("name");  // EXISTS key

for(Object key : keys){
    DataType type = redisTemplate.type(key);  // TYPE key
    System.out.println(type.name());
}

redisTemplate.delete("mylist");  // DEL key

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2260859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

洛谷题解P1219 [USACO1.5] 八皇后 Checker Challenge

本题是一道dfs的题目&#xff08;&#xff09;&#xff08;&#xff09;感觉主要的困惑点在于对角线的判断&#xff08;我刚开始还想遍历&#xff09; 题目&#xff1a; 题目很简短&#xff0c;清晰易懂&#xff0c;就是要找到全部的能使n个棋子在不同行不同列并且也不会在同一…

伺服电机控制驱动器选择

伺服电机控制驱动器选择 根据具体使用场景和需求&#xff0c;可以选择 Modbus RTU、Modbus TCP 或 CAN 通信方式。这些协议在伺服电机的驱动和固件中起到核心作用。以下是详细说明及推荐。 1. 驱动器的作用 接收控制器指令&#xff08;如位置、速度或扭矩命令&#xff09;。将…

嵌入式跨平台工具链终极方案

嵌入式跨平台工具链终极方案 1. 解决烦人的编译&#xff0c;从编译器开始2. T0级别的代码编辑器IDE3. git linus之父开发神奇的分布式代码管理工具 我们从8051开始学习嵌入式&#xff0c;用过了不少IDE&#xff0c;比如经典的keil和IAR&#xff0c;但是这些IDE都不便宜&#xf…

Ubuntu安装Gitlab详细图文教程

1、环境准备 1.1、Ubuntu环境 Ubuntu24.04Sever版安装教程 1.2、更新系统 sudo apt update -y sudo apt-get update sudo apt-get upgrade 2、安装Nginx 2.1 安装nginx # 安装 apt install nginx -y 2.2 修改nginx配置⽂件 # 修改nginx配置 vim /etc/nginx/si…

redis集群安装部署 redis三主三从集群

redis集群安装部署 redis三主三从集群 1、下载redis2、安装redis集群 三主三从3、配置redis开机自启动3.1、建立启动脚本3.2、复制多份redis启动脚本给集群使用3.3、添加可执行权限3.4、配置开机自启动 1、下载redis 本次redis安装部署选择当前最新的稳定版本7.4.1 下载链接: …

泊松编辑 possion editing图像合成笔记

开源地址&#xff1a; GitHub - kono-dada/Reproduction-of-possion-image-editing 掩码必须是矩形框

【Linux系列】Linux 系统中查看目录权限

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

6.2 MapReduce工作原理

MapReduce工作原理涉及将大数据集分割成小块并行处理。Map任务读取数据块并输出中间键值对&#xff0c;而Reduce任务则处理这些排序后的数据以生成最终结果。MapTask工作包括读取数据、应用Map函数、收集输出、内存溢出时写入磁盘以及可选的Combiner局部聚合。ReduceTask工作则…

9. 高效利用Excel设置归档Tag

高效利用Excel设置归档Tag 1. Excle批量新建/修改归档Tag2. 趋势记录模型批量导入归档Tag(Method1)2. 趋势记录模型批量导入归档Tag(Method2)3. 趋势记录控件1. Excle批量新建/修改归档Tag Fcatory Talk常常需要归档模拟量,对于比较大的项目工程会有成千上万个重要数据需…

docker 部署 redis

docker 部署 redis 1. 下载 redis 镜像 # docker images | grep redis bitnami/redis 7.2.4-debian-11-r5 45de196aef7e 10 months ago 95.2MB2. docker-compose 部署 version: "3" services:redis:image: bitnami/redis:7.2.4-debian-11-…

基于python绘制数据表(上)

利用python绘制各种数据图表 绘制柱形图-源码 from openpyxl import Workbook from openpyxl.chart import BarChart, Reference# 创建工作薄 wb Workbook(write_onlyTrue) # 创建工作表 ws wb.create_sheet(月收入)# 准备数据 rows [(月份, 销售额),(1, 23),(2, 43),(3, …

使用skywalking,grafana实现从请求跟踪、 指标收集和日志记录的完整信息记录

Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的开源项目&#xff0c; 2017年12月SkyWalking成为Apache国内首个个人孵化项目&#xff0c; 2019年4月17日SkyWalking从Apache基金会的孵化器毕业成为顶级项目&#xff0c; 目前SkyWalking支持Java、 .Net、 Node.js、…

ViG:图像分类领域前沿

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;传知代码 欢迎大家点赞收藏评论&#x1f60a; 目录 图片分类任务方法概述卷积神经网络&#xff08;CNN&#xff09;视觉Transformer&#xff08;ViT&#xff09;视觉图神经网络&#xff08;ViG&a…

系列2:基于Centos-8.6Kubernetes 集成GPU资源信息

每日禅语 自省&#xff0c;就是自我反省、自我检查&#xff0c;自知己短&#xff0c;从而弥补短处、纠正过失。佛陀强调自觉觉他&#xff0c;强调以达到觉行圆满为修行的最高境界。要改正错误&#xff0c;除了虚心接受他人意见之外&#xff0c;还要不忘时时观照己身。自省自悟之…

03篇--二值化与自适应二值化

二值化 定义 何为二值化&#xff1f;顾名思义&#xff0c;就是将图像中的像素值改为只有两种值&#xff0c;黑与白。此为二值化。 二值化操作的图像只能是灰度图&#xff0c;意思就是二值化也是一个二维数组&#xff0c;它与灰度图都属于单信道&#xff0c;仅能表示一种色调…

发现一个对话框中的按钮,全部失效,点击都没有任何反应,已经解决

前端问题&#xff0c;技术vue2&#xff0c;ts。 发现一个对话框中的按钮&#xff0c;全部失效&#xff0c;点击都没有任何反应。 因为我只在template标签中加入下面这个代码&#xff0c;并没有注册。 只要有一个子组件没有注册&#xff0c;就会影响所有的按钮&#xff0c;使当前…

RT系列机器人详细介绍(BC-Z、RT-1、OMM、RT-Trajectory、Q-Transformer、RT-2、RT-X、RT-H)

目录 一、BC-Z二、RT-1三、MOO四、RT-Trajectory五、Q-Transformer六、RT-2七、RT-X八、RT-H参考文献 一、BC-Z BC-Z通过结合大规模的交互式模仿学习系统、灵活的任务嵌入和多样化的数据&#xff0c;实现了在未见任务上的零样本泛化&#xff0c;为机器人学习领域提供了一种新的…

鸿蒙系统-前端0帧起手

鸿蒙系统-前端0帧起手 先search 一番 找到对应的入门文档1. 运行项目遇到问题 如下 &#xff08;手动设计npm 的 registry 运行 npm config set registry https://registry.npmjs.org/&#xff09;2.运行后不支持一些模拟器 配置一下&#xff08;如下图&#xff0c;运行成功&am…

Redis是什么?Redis和MongoDB的区别在那里?

Redis介绍 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、基于内存的数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中间件。以下是关于Redis的详细介绍&#xff1a; 一、数据结构支持 字符串&#xff08;String&#xff09; 这是Redis最…

【问题记录】07 MAC电脑,使用FileZilla(SFTP)连接堡垒机不成功

项目场景&#xff1a; 使用MAC电脑&#xff0c;以子账号&#xff08;非root&#xff09;的形式登录&#xff0c;连接堡垒机CLB&#xff08;传统型负载均衡&#xff09;&#xff0c;使用FileZilla&#xff08;SFTP&#xff09;进行FTP文件传输。 问题描述&#xff1a; MAC电脑…