Redis(二)对事务进行操作及Jedis

news2024/12/24 11:38:42

系列文章目录

Redis入门笔记(一):Redis在Linux下安装和八大数据类型


文章目录

  • 系列文章目录
  • 前言
  • Redis对事务进行操作
    • 开启事务:`multi`
    • 执行事务:`exec`
    • 放弃事务:`discard`
    • 编译型异常(命令错误)事务中所有命令都不会执行
    • 运行时异常(其他命令依然正常运行)
    • 悲观锁与乐观锁
    • redis的`watch`自带悲观锁
  • 使用Java来操作Redis
    • 解决Jedis连接失败问题
    • Jedis操作事务


前言

Redis事务本质:一组命令的集合
Redis中事务的特性:

 Redis的单条命令式保存原子性的,但是事务不保证原子性,
 redis事务在执行过程中如果有一条命令执行失败,那么其后的命令仍然可以执行,不会回滚。
 事务没有隔离级别的概念。
 一个事务中所有的命令都会被序列化,在事务执行过程中,会按照顺序执行,
 所有的命令在事务中并没有直接被执行,发起执行时才会执行

Redis对事务进行操作

开启事务:multi

在这里插入图片描述
命令式是按照入队的顺序执行的

执行事务:exec

在这里插入图片描述
事务在执行一次后,就清空了

放弃事务:discard

在这里插入图片描述

编译型异常(命令错误)事务中所有命令都不会执行

在这里插入图片描述

运行时异常(其他命令依然正常运行)

incr key 如果key不存在,会默认初始化为0,然后incr加一
在这里插入图片描述
虽然第一条命令报错了,但其他命令依然正常执行成功

悲观锁与乐观锁

悲观锁:悲观锁总是假设最坏的情况,认为共享资源每次被访问的时候就会出现问题(比如共享数据被修改),
       所以每次在获取资源操作的时候都会上锁,这样其他线程想拿到这个资源就会阻塞直到锁被上一个持有者释放。
       也就是说,共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程。
乐观锁:乐观锁总是假设最好的情况,认为共享资源每次被访问的时候不会出现问题,
  • 悲观锁通常多用于写比较多的情况下(多写场景,竞争激烈),这样可以避免频繁失败和重试影响性能,悲观锁的开销是固定的。
  • 乐观锁通常多于写比较少的情况下(多读场景,竞争较少),这样可以避免频繁加锁影响性能。不过,乐观锁主要针对的对象是单个共享变量

redis的watch自带悲观锁

这个是正常执行的输出
在这里插入图片描述
在事务未执行前,更改数据
在这里插入图片描述
redis 中watch指令类似于乐观锁,在事务提交时,如果watch监控的多个KEY中任何KEY的值已经被其他客户端更改,则使用EXEC执行事务时,事务队列将不会被执行,同时返回Nullmulti-bulk应答以通知调用者事务执行失败。
unwatch解除监控,重新获值
在这里插入图片描述

使用Java来操作Redis

Jedis是Redis官方推荐使用的Java连接redis的客户端。

导依赖:

 <!--导入jredis的包-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.2.0</version>
        </dependency>
        <!--fastjson-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.70</version>
        </dependency>

测试是否能ping 通

import redis.clients.jedis.Jedis;
public class RedisTest {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.200.200",6379);
        String ping = jedis.ping();
        System.out.println(ping);
    }
}

解决Jedis连接失败问题

1、关闭防火墙:
systemctl status firewalld 查看防火墙的状态
systemctl stop firewalld 关闭防火墙
2、确认linux和windows能够ping通
在这里插入图片描述在这里插入图片描述

如果还报错
在这里插入图片描述3、修改redis.conf
默认条件下bind 127.0.0.1只接受本机访问
在这里插入图片描述
protected-mode在开启的情况下,如果没有设定bind和密码,只接受本机的访问。

在这里插入图片描述通了!

在这里插入图片描述

Jedis操作事务

import com.alibaba.fastjson.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;
public class RedisTest {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.31.238",6379);
        jedis.flushDB();
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("hello", "world");
        jsonObject.put("name", "liu heng");
       // 开启事务
        Transaction multi = jedis.multi();
        String result = jsonObject.toJSONString();
       // jedis.watch(result)
        try {
        multi.set("user1", result);
        multi.set("user2", result);
        // 执行事务
        multi.exec();
          }catch (Exception e){
        // 放弃事务
             multi.discard();
          } finally {
        // 关闭连接
           System.out.println(jedis.get("user1"));
           System.out.println(jedis.get("user2"));
           jedis.close();
     }
   }

 }

在这里插入图片描述

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

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

相关文章

信息安全-数据安全-字节大数据平台安全与权限治理实践

导读&#xff1a;本次分享题目为字节跳动大数据平台安全与权限治理实践&#xff0c;文章会围绕下面四点展开&#xff1a; 字节大数据安全体系现状和难点 细粒度权限管控和治理 资产保护能力 数据删除能力 分享嘉宾&#xff5c;许从余 火山引擎 数据平台产品经理 编辑整理&#…

Spring 5 笔记 - 新功能

1. Spring 5 框架新功能 整个Spring 5 框架的代码基于Java8&#xff0c;运行时兼容JDK9&#xff0c;许多不建议使用的类和方法在代码库中删除。Spring 5.0 框架自带了通用的日志封装 &#xff08;1&#xff09;Spring 5 已经移除 Log4jConfigListener&#xff0c;官方建议使用…

立创EDA标准版指南1-原理图与封装库

立创 EDA 标准版 由于立创 EDA 新版本改了对应术语&#xff0c;这是对于的表格&#xff1a; 原理图库->符号 PCB 库->封装 PCB 3D 库->3D 模型 下面的全部讲述将依据旧版称呼&#xff0c;因为更直观&#xff0c;新版称呼模棱两可并且与 AD 的工程架构差别较大 这是…

数据分析11——Pandas中数据偏移/数据切分/数据结构转换

数据偏移&#xff1a; 1、shift函数&#xff1a; 在 Pandas 中&#xff0c;shift 函数用于将数组的数据向前或向后平移指定的步数。它可以应用于 Series 或 DataFrame 类型的数据中&#xff0c;并返回一个平移后的新数据结构&#xff0c;其中每个元素都被取代为原始序列中对应…

kubernetes根据podName获取对应的主机pid

获取指定的podName kubectl get pods -n demo -owide登录对应的主机执行docker命令,获取到容器的id docker ps | grep PODNAME拿到的容器id&#xff0c;执行如下命令 获取容器的长的容器id docker inspect container_id找到容器id后 执行 apt-get install jq cat /var/lib…

关于Word文档的处理【笔记】

关于Word文档的处理【笔记】 前言推荐关于Word文档的处理一、解压word如何恢复1 准备2 解压3 恢复 二、对word文档进行图片替换1 首先解压word文档2 进入word文档存放图片的路径3 批量给图片添加水印4 替换原来的media文件5 压缩为docx文件6 打开 最后 前言 2023-5-20 11:00:1…

uniapp 快手授权登录,发布、编辑、裁剪图片和视频,分享 Ba-Kwai

简介&#xff08;下载地址&#xff09; 快手授权登录&#xff0c;发布、编辑、裁剪图片和视频&#xff0c;一键智能裁剪&#xff0c;分享私信&#xff0c;打开用户主页&#xff0c;挂载小程序等。自带选择图片和选择视频方法。 抖音授权登录、发布、分享 Ba-Aweme&#xff08…

基于GitLab搭建DevSecOps流水线

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/130734964 一、GitLab安装 GitLab是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建Web服务&#xff0c;可通过Web界面访问公开的或者私人的项目。它…

【总结】数据建模调研与设计

一、数据建模背景和目的 1.1 数据建模任务背景 a. xxxx 中台新增数据建模模块&#xff0c;对标行业最佳实践&#xff0c;补齐数据中台短板。 b. 以往的数据建模&#xff0c;包括数仓模型的设计、数仓模型的落地&#xff0c;都是通过第三方的工具&#xff0c;例如DBwaver、Nav…

SOFA Weekly|SOFA 大事记、Layotto 社区会议回顾与预告、社区本周贡献

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展 欢迎留言互动&#xff5e; SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&am…

【信息安全案例】——应用软件安全(学习笔记)

&#x1f4d6; 前言&#xff1a;随着应用软件日益增多&#xff0c;与我们的生活深度绑定&#xff0c;应用软件的安全性问题愈发凸显。针对恶意代码、代码漏洞等安全风险&#xff0c;必须加强安全意识&#xff0c;采取有效措施进行防范。合理有效的安全措施能够确保用户的信息安…

(数字图像处理MATLAB+Python)第九章图像形态学运算-第一、二节:形态学基础和二值形态学运算

文章目录 一&#xff1a;形态学基础&#xff08;1&#xff09;结构元素&#xff08;2&#xff09;程序 二&#xff1a;二值形态学的基础运算&#xff08;1&#xff09;基本形态变换A&#xff1a;膨胀运算①&#xff1a;概述②&#xff1a;示例③&#xff1a;程序 B&#xff1a;…

CleanMyMac X4.13.4中文版下载及使用教程

随着Mac电脑的广泛普及&#xff0c;越来越多的用户开始关注如何保持自己电脑的快速运行。众所周知&#xff0c;Mac电脑的性能和稳定性得到了广泛认可。但是&#xff0c;随着使用时间的增加和数据的增加&#xff0c;任何电脑都可能变得缓慢和难以使用。为了解决这一问题&#xf…

2-《Java进阶》

2-《Java进阶》 一. java多线程&#xff08;非常重要&#xff09;1.1. 线程java多线程实现方式主要有&#xff1a;1.继承Thread 2.实现Runnable3.实现CallableRunnable 与 Callable的区别&#xff1a;1.2. 线程的状态有哪些&#xff1f;1.3. 线程的状态转换及控制1.4. Java如何…

SeaweedFs使用-通过http接口实现文件操作

通过http接口实现文件操作 SeaweedFs可通过filer的http接口/master中的http接口来进行文件上传 1.通过master的接口进行上传文件 通过各种方式进行请求接口&#xff1a;http://localhost:9333/submit, ip和端口号是master服务的信息。此接口通过post请求方式将文件的二进制流…

3-《安卓基础》

3-《安卓基础》 1.Android系统架构2.四大组件1Activity1.1 生命周期1.2. Activity四种启动模式1.3.Activity任务栈的概念1.3.Activity的显示启动和隐示启动1.4.scheme使用场景&#xff0c;协议格式&#xff0c;如何使用&#xff1f;1.5.activty间传递数据的方式1.6.跨进程启动A…

网络安全-kail linux渗透测试(基础篇)

渗透测试是一个非常广的课程&#xff0c;我们首先要做的是在某个方向精通&#xff0c;再在其他方面也要有涉猎。 大部分的漏洞是国外挖掘的。 一、推荐研究书籍&#xff1a; Metasploit浚透测试指南》肯尼(行业经典) 诸葛建伟翻译 《Metasloit渗透测试魔鬼训练营》诸葛建伟…

运用pyecharts制作可视化大屏(代码展示及效果图-动图)

一、Matplotlib绘图 折线图 import matplotlib.pyplot as plt # 调用画图库 plt.rcParams[font.sans-serif] [SimHei] # 设置成可以显示中文&#xff0c;字体为黑体 plt.figure(figsize(12,8)) # 调整图片尺寸 x [周一,周二,周三,周四,周五,周六,周日] # 设置x轴数据 y [401…

物联网网络通讯知识

RTU是什么 RTU英文全称Remote Terminal Units&#xff0c;中文全称为远程终端单元。远程终端设备(RTU)是安装在远程现场的电子设备&#xff0c;用来监视和测量安装在远程现场的传感器和设备。通俗理解就是能够编程的还可以将数据传输到服务器的工具。RTU内部是包含通讯模块的&…

4、详细版易学版TypeScript - 元组 枚举

一、元组(Tuple) 数组&#xff1a;合并了相同类型的对象 const myArr: Array<number> [1, 2, 3]; 元组(Tuple)&#xff1a;合并了不同类型的对象 // 定义元组时就要确定好数据的类型&#xff0c;并一一对应 const tuple: [number, string] [12, "hi"]; // 添…