- redis安装-redis集群管理
- redis主从复制(读写分离)-redis集群管理
- redis主从从架构搭建-redis集群管理
- redis从库只读设置-redis集群管理
- redis主从复制的原理-redis集群管理
- redis sentinel(哨兵) 配置详解-redis集群管理
- redis sentinel.conf详解-redis集群管理
- redis 集群环境搭建-redis集群管理
- redis集群插槽分配-redis集群管理
- redis新增集群节点-redis集群管理
- redis删除集群节点-redis集群管理
- redis集群出现宕机没法访问-redis集群管理
- redis 集群使用主从复制架构-redis集群管理
- Redis概述
- 基于linux下redis安装与配置
- 基于window安装redis
- Redis配置文件详解
- 通过redis客户端查看和设置配置
- Redis 客户端连接、密码验证、连接数设置
- 使用info命令获取 redis 服务详细信息
- Redis Desktop Manager客户端使用教程
相关文章
更多最近更新
更多Redis 事务详解
2019-04-11 21:49|来源: 网路
Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:
1、事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
2、事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
一个事务从开始到执行会经历以下三个阶段:
开始事务。
命令入队。
执行事务。
实例
以下是一个事务的例子, 它先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令:
redis 127.0.0.1:6379> MULTI OK redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"QUEUED redis 127.0.0.1:6379> GET book-name QUEUED redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"QUEUED redis 127.0.0.1:6379> SMEMBERS tag QUEUED redis 127.0.0.1:6379> EXEC1) OK2) "Mastering C++ in 21 days"3) (integer) 34) 1) "Mastering Series" 2) "C++" 3) "Programming"
单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。
事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。
这是官网上的说明 From redis docs on transactions:
It's important to note that even when a command fails, all the other commands in the queue are processed – Redis will not stop the processing of commands.
比如:
redis 127.0.0.1:7000> multi OK redis 127.0.0.1:7000> set a aaa QUEUED redis 127.0.0.1:7000> set b bbb QUEUED redis 127.0.0.1:7000> set c ccc QUEUED redis 127.0.0.1:7000> exec 1) OK 2) OK 3) OK
如果在 set b bbb 处失败,set a 已成功不会回滚,set c 还会继续执行。
Redis 事务命令
下表列出了 redis 事务的相关命令:
序号 | 命令及描述 |
---|---|
1 | DISCARD 取消事务,放弃执行事务块内的所有命令。 |
2 | EXEC 执行所有事务块内的命令。 |
3 | MULTI 标记一个事务块的开始。 |
4 | UNWATCH 取消 WATCH 命令对所有 key 的监视。 |
5 | WATCH key [key ...] 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。 |
redis知识点
redis快速入门
reids常用命令
redis数据结构
java_API_客户端
Jedis
Tlcache
redis_持久化
AOF
RDB
发布订阅(pub/sub)
redis_事件
redis事务
redis通讯协议
RESP(Redis Serialization Protocol)
redis高可用
redis哨兵
监控(Monitoring) 提醒(Notification) 自动故障迁移(Automatic failover)
redis主从复制
-
- 主从复制
- 从从复制
-
- slave向master发送sync命令;
- master开启子进程执行bgsave写入rdb文件;
- master发送缓存和RDB文件给slave;
- master发送数据发送给slave完成复制;
redis集群(Redis_Cluster)
相关问答
更多-
redis怎么结合spring事务[2022-07-08]
1、引入jar包 org.springframework.data spring-data-redis 1.6.1.RELEASE redis.clients jedis 2.7.3 2、配置bean 在application.xml加入如下配置 其中配置文件redis一些配置数据redis.properties如下: #redis中心 redis.host=10.75.202.11 redis.port=6379 redis.password=123456 redis.maxIdle=100 redis. ... -
Laravel框架使用Redis的方法详解[2023-10-02]
本文实例讲述了Laravel框架使用Redis的方法。分享给大家供大家参考,具体如下: 安装 laravel中使用redis首先需要你通过 Composer 安装 predis/predis 包: composer require predis/predis 配置 redis的配置文件是:config/database.php 'redis' => [ 'client' => 'predis', 'default' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), ... -
redis事务和mysql事务的区别[2022-04-12]
redis和mysql的区别非常大。 具体如下: mysql中一个中小型的网络数据库,比oracle和sqlserver小, 但是并发能力远超过acess这样的桌面数据库。 redis是一个支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。 可以认为redis比mysql简化很多。 mysql支持集群。 现在大量的软件使用redis作为mysql在本地的数据库缓存,然后再适当的时候和mysql同步. -
redis支持事务吗?[2022-01-23]
支持的 DISCARD 取消事务,放弃执行事务块内的所有命令。 EXEC 执行所有事务块内的命令。 MULTI 标记一个事务块的开始。 UNWATCH 取消 WATCH 命令对所有 key 的监视。 WATCH key [key ...] 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。 -
redis作缓存事务的问题[2022-04-18]
redis没这功能,它只是key-value数据库,缓存得用程序存进redis里。 -
redis 开启事务以后 为什么要判断 小于0 高手举个例子 讲详细 急用!!![2023-03-09]
1234567891011121314151617181920212223242526272829303132333435363738394041function f(s, n) { // 保留20位以内的小数位 n = n > 0 && n <= 20 ? n : 2; // 这里 +'' 的含义是把数字转化为字符串, 正则里面的 \. \- 表示小数点和负号 // 删除掉s中非数字小数点或负号的字符 s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).to ... -
我通过像下面这样将函数放在队列中来解决它: class CreditJob extends Job implements ShouldQueue { use InteractsWithQueue, SerializesModels; protected $order; protected $trip; protected $promotion; protected $customer; public function __construct($order,Order $trip,Customer $cu ...
-
这是旧版StackExchange.Redis中的一个错误 - 1.0.481,1.0.488(没有测试任何旧版本)。 使用新版本1.1.553,它可以正常工作( https://github.com/StackExchange/StackExchange.Redis/issues/200 )。 It was a bug in older versions of StackExchange.Redis - 1.0.481, 1.0.488 (didn't test any older ones). With ...
-
事务在本地缓冲,直到您调用“exec”,然后以原子单位发送。 如果你在执行前“等待”,你将永远不会发送任何东西。 只有在调用execute 之后才有必要“等待”事务中的操作。 其次,您无法在事务期间查询数据 。 更具体地说,您可以 ,但只有在调用“执行”时才能获得结果。 这是redis工作原理的基本部分:简单地说,redis事务与SQL事务不同。 这意味着您无法根据转换期间查询的数据做出决策。 但是,您可以查询事务外部的数据,然后确保它不会更改。 使用booksleeve,事务上的AddConstraint ...
-
JedisCluster没有实现Transaction和Pipeline,因为它很难实现。 Redis可以在群集模式下发送MOVED或ASK,这意味着我们应该在节点之间移动插槽。 我正在考虑JedisCluster的管道模式,但没有进行进一步的研究。 https://groups.google.com/d/msg/jedis_redis/u6j8slokO3E/Dh5Q94TRjJUJ 目前,Jedis团队正致力于为JedisCluster稳定/提供更多API。 JedisCluster didn't im ...