Redis之相关拓展(事务、监控、Jedis)

news2025/1/19 2:33:10

Redis之相关拓展

  • 一、事务
    • 1、介绍
    • 2、流程
    • 3、shell命令
      • 3.1 开启事务
      • 3.2 放弃事务
      • 3.3 编译型异常(代码有问题,命令有错)
      • 3.4 运行时异常
  • 二、监控(watch)
    • 1、锁
      • 1.1 悲观锁
      • 1.2 乐观锁
    • 2、注意
      • 2.1 原理
      • 2.2 流程
  • 三、Jedis
    • 1、简介
    • 2、依赖
      • 2.1 主要依赖
      • 2.2 其次依赖
    • 2、样例
    • 3、基础操作相关命令
    • 4、事务相关操作

一、事务

1、介绍

Redis事务本质:一组命令的集合,一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行。一次性、顺序性、排他性执行一些列的命令
Redis事务没有隔离级的概念
所有的命令在事务中,并没有直接被执行,只有发起执行命令的时候才会执行,
Redis单条命令式保存原子性的,但是事务不保证原子性。

2、流程

开启事务(multi)
命令入队(…)
执行事务(exec)

3、shell命令

3.1 开启事务

# 开启事务
127.0.0.1:6379> multi
OK
# 命令入队
127.0.0.1:6379(TX)> set k1 v1
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> get k2
QUEUED
127.0.0.1:6379(TX)> set k3 v3
QUEUED
# 执行事务
127.0.0.1:6379(TX)> exec
1) OK
2) OK
3) "v2"
4) OK

3.2 放弃事务

事务队列中命令都不会被执行

# 开启事务
127.0.0.1:6379> multi
OK
# 命令入队
127.0.0.1:6379(TX)> set k1 v1
QUEUED
127.0.0.1:6379(TX)> set k2 v2
QUEUED
127.0.0.1:6379(TX)> get k2
QUEUED
127.0.0.1:6379(TX)> set k3 v3
QUEUED
# 放弃事务
127.0.0.1:6379(TX)> discard
ok

3.3 编译型异常(代码有问题,命令有错)

事务中所有的命令都不会被执行

3.4 运行时异常

如果事务队列中存在语法性错误,那么执行命令的时候,其他命令是可以正常执行,错误命令抛出异常。

二、监控(watch)

1、锁

1.1 悲观锁

很悲观,认为什么时候都会出问题,对于任何事都会加锁。

1.2 乐观锁

很乐观,认为什么时候都不会出问题,所以不会上锁,更新数据的时候去判断一下,在此期间是否有人修改过这个数据。
获取version
更新的时候比较version

127.0.0.1:6379> set money 100
OK
127.0.0.1:6379> set out 0
OK
# 监视money对象(加乐观锁)
127.0.0.1:6379> watch money
OK
# 事务正常结束,数据期间没有发生变动,这个时候就正常执行成功
127.0.0.1:6379> multi
OK
127.0.0.1:6379(TX)> decrby money 20
QUEUED
127.0.0.1:6379(TX)> incrby out 20
QUEUED
127.0.0.1:6379(TX)> exec
1) (integer) 80
2) (integer) 20

2、注意

2.1 原理

使用多线程修改值时,使用watch可以当做redis的乐观锁操作
也就是执行这个线程(A)之前,另外一个线程(B),修改了被监视的对象(C)的值,这个时候,如果这个线程(A)继续执行一些操作,就会导致事务执行失败。除非这个线程(A)先放弃监视这个对象(C),然后再重新监视这个对象(C),执行一些操作后,事务才能执行成功。

2.2 流程

(1)如果发现事务执行失败,就先解锁

unwatch

(2)然后获取新的值,再次监视

watch money

(3)比对监视的值是否发生了变化,如果没有变化,那么可以执行成功,如果变化就执行失败。

exec

三、Jedis

1、简介

jedis基于java语言的redis客户端,集成了redis的命令操作,提供了连接池管理。

2、依赖

2.1 主要依赖

用来进行redis连接

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<!-- jedis库 -->
<dependency>
   <groupId>redis.clients</groupId>
   <artifactId>jedis</artifactId>
   <version>4.2.3</version>
</dependency>

2.2 其次依赖

用来进行json操作

<!--HUTool工具-->
<dependency>
   <groupId>cn.hutool</groupId>
   <artifactId>hutool-all</artifactId>
   <version>5.8.9</version>
</dependency>

2、样例

@Test
void contextLoads() {
    // 1、new jedis对象
    Jedis jedis = new Jedis("127.0.0.1",6379);
    System.out.println(jedis.ping());
}

结果
在这里插入图片描述

3、基础操作相关命令

由于之前博客写了非常完整的命令,Redis之2022最全五大基本数据类型相关知识及shell命令
所以下面关于jedis的操作大致写一下,仅作理解使用

@Test
void testAll(){
    // 1、new jedis对象
    Jedis jedis = new Jedis("127.0.0.1",6379);
    System.out.println("清空数据:" + jedis.flushDB());
    System.out.println("新增键值对:" + jedis.set("name", "zhangsan"));
    System.out.println("判断某个数据是否存在:" + jedis.exists("name"));
    System.out.println("查看系统中所有的键:");
    Set<String> keys = jedis.keys("*");
    System.out.println(keys);
    System.out.println("删除键:" + jedis.del("name"));
}

结果
在这里插入图片描述

4、事务相关操作

@Test
void test2(){
    // 1、new jedis对象
    Jedis jedis = new Jedis("124.223.218.196",6379);
    jedis.flushDB();
    JSONObject jsonObject = new JSONObject();
    jsonObject.set("hello", "world");
    jsonObject.set("name", "zhangsan");

    // 开启事务
    Transaction multi = jedis.multi();
    String result = jsonObject.toString();

    try{
        multi.set("user1", result);
        multi.set("user2", result);
        // 执行事务
        multi.exec();
    }catch (Exception e) {
        // 放弃事务
        multi.discard();
        e.printStackTrace();
    }finally {
        System.out.println(jedis.get("user1"));
        System.out.println(jedis.get("user2"));
        // 关闭连接
        jedis.close();
    }
}

结果
在这里插入图片描述

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

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

相关文章

学习Opencv不得不掌握的操作

OpenCV基本操作 1 图像的IO操作 这里我们会给大家介绍如何读取图像&#xff0c;如何显示图像和如何保存图像。 1.1 读取图像 API cv.imread() 参数&#xff1a; 要读取的图像读取方式的标志cv.IMREAD*COLOR&#xff1a;以彩色模式加载图像&#xff0c;任何图像的透明度都将…

C++ Primer笔记——explicit、string流、vector比较、emplace

目录 一.P265 抑制构造函数定义的隐式转换 二.P287 string流 三.P304 vector的比较 四.P307 在容器中特定位置添加元素 一.P265 抑制构造函数定义的隐式转换 举个例子&#xff0c;如果构造函数参数是string类型&#xff0c;那么当使用赋值符号进行初始化操作时&#xff0c…

leetcode -- ⽤最少数量的箭引爆⽓球(452)

有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一…

数据模型篇之阿里巴巴数据整合及管理体系

第9章 阿里巴巴整合及管理体系 OneData的设计是为了建设统一的、规范化的数据接人层&#xff08; ODS &#xff09;和数据中间层&#xff08; DWD和DWS &#xff09;&#xff0c;通过数据服务和数据产品&#xff0c;完成服务于阿里巴巴的大数据系统建设 &#xff0c;即数据公共…

2022 年 11 月区块链操作系统的开发回顾

查看 Cartesi Machine、Cartesi Rollups 和 Noether 的更新正在寻找区块链操作系统组件的最新进展&#xff1f;你找对地方了&#xff01;正如在我们的路线图文章中所描述的那样&#xff0c;我们一直在朝着定期且频繁的更新方向发展着&#xff0c;以便让我们的社区能够及时的了解…

微服务框架 SpringCloud微服务架构 多级缓存 46 JVM 进程缓存 46.1 导入商品案例【MySQL环境准备】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 多级缓存 文章目录微服务框架多级缓存46 JVM 进程缓存46.1 导入商品案例【MySQL环境准备】46.1.1 导入商品管理案例46 JVM 进程缓存 用于在T…

新冠疫情下免疫的重要性以及肠道菌群在其中的作用

今年是新冠病毒影响的第三年了&#xff0c;在病毒的影响下&#xff0c;我们的生活方式发生了很大的变化。近日&#xff0c;多地政府颁布了疫情防控的新政策&#xff0c;除了一些特殊场所&#xff0c;出入其他场所不用扫场所码了。 从一方面说&#xff0c;这样的情况方便了我们日…

DAP数据分析平台可视化组件开发

企业信息化建设会越来越完善&#xff0c;越来越体系化&#xff0c;当今数据时代背景下更加强调、重视数据的价值&#xff0c;以数据说话&#xff0c;通过数据为企业提升渠道转化率、改善企业产品、实现精准运营、有效运营&#xff0c;用数据来指引企业的发展。 组件使用是在DA…

第一章:Pytorch简介和其三大核心概念

文章目录一&#xff1a;什么是Pytorch二&#xff1a;Pytorch优势三&#xff1a;Pytorch三大核心概念&#xff08;1&#xff09;tensor&#xff08;张量&#xff09;&#xff08;2&#xff09;autograd&#xff08;自动微分-变量&#xff09;&#xff08;3&#xff09;nn.Module…

java计算机毕业设计基于安卓Android的校园安保巡查系统APP

项目介绍 校园安保巡查系统APP管理是校园安保巡查系统管理中对学生必不可少的一个部分。在人们校园安保巡查系统管理的整个过程中,校园安保巡查系统APP管理担负着最重要的角色。为满足如今日益复杂的管理需求,各类校园安保巡查系统APP管理程序也在不断改进。本课题所设计的校园…

精华推荐 |【Redis技术探索】「底层架构原理」帮你彻底搞定Sentinel的实现原理运作机制

&#x1f46e;‍每日一句 最美好的生活方式是和一群志同道合的人&#xff0c;一起奔跑在理想的路上&#xff0c;回头有一路的故事&#xff0c;低头有坚定的脚步&#xff0c;抬头有清晰的远方&#xff01; &#x1f46e;‍ Sentinel存在的意义 &#x1f46e;‍ Sentinel出现的前…

如何快速传输大文件,介绍大文件快速方法

现在&#xff0c;企业比以往任何时候都面临着一个重大挑战&#xff1a;需要一个快速共享文件的解决方案。但是&#xff0c;并非所有快速文件传输解决方案都以相同的速度传输文件。文件大小、端点位置、路径、设备、防火墙、网络系统和加密需求都会限制文件的传输速度。 什么是快…

[附源码]Python计算机毕业设计个人相册管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

Java中的String类

一、String类的体系图 简单解释&#xff1a;1、String类实现了Serializable接口&#xff0c;说明String类可以串行化&#xff0c;可以进行网络传输。2、String类实现了Comparable接口&#xff0c;说明String对象可以进行比较。 二、String类介绍 String类是lang包中的类&…

【LeetCode每日一题】——337.打家劫舍 III

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 树 二【题目难度】 中等 三【题目编号】 337.打家劫舍 III 四【题目描述】 小偷又发现了一个…

数据指标体系的建设思考(三)

一、数据指标体系搭建流程 01、如何搭建数据指标体系 ▶ “德勤”的数据指标体系方法论 首先&#xff0c;我们先来学习一下优秀的数据指标体系搭建方法论。数据指标体系搭建方法论有不少优秀的方案&#xff0c;大部分都大同小异&#xff0c;在这里我们来聊一下“德勤”推荐的…

论文投稿指南——中国(中文EI)期刊推荐(第7期)

&#x1f384;&#x1f384; EI是国际知名三大检索系统之一&#xff0c;在学术界的知名度和认可度仅次于SCI&#xff01; 【前言】 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊。其中&#xff0c;中文期刊的…

Opencv(C++)笔记--形态学操作之开、闭操作、基本梯度计算、顶帽和黑帽操作

目录 1--开操作 2--闭操作 3--基本梯度计算 4--顶帽操作 5--黑帽操作 6--代码实例 1--开操作 ① 原理&#xff1a;先进行腐蚀操作&#xff0c;再进行膨胀操作&#xff1b; ② 作用&#xff1a;消除值高于邻近点的孤立点&#xff0c;达到去除图像中噪声的作用&#xff0…

Python零基础入门篇- Python的加密模块 - hashlib 与 base64

我们来学习一下 Python 中的加密模块&#xff0c;加密模块在工作中被广泛应用。比如数据的传入 不希望被捕获&#xff0c;通过把数据加密。这样即使被捕获也无法获取到数据的真实信息&#xff0c;今天我们就来学习一下关于加密的方法。 hashlib 模块 hashlib 模块的介绍 hashl…

SSH远程免密登录的两种方式

SSH远程免密登录的两种方式一、ssh远程登录操作1.先ping测试下看看网络是否通畅2.ssh 192.168.150.148二、ssh免密登录方式一1.生成公钥、私钥2.拷贝公钥到目标服务器3.测试ssh免密登录三、ssh免密登录方式二1.生成本机的公钥私钥2.打开本地公钥文件复制公钥信息3.将公钥存放到…