`
dannyhz
  • 浏览: 393181 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Redis以及jedis的事务处理

 
阅读更多
Redis

http://www.open-open.com/lib/view/open1410485827242.html

引用


首先首先


首先,Redis的RDB 持久化是在指定的时间间隔内生成数据集的时间点快照,具体过程是:
执行bgsave,redis主进程fork一个子进程;<br>主进程继续处理客户端请求;
子进程将当前时间点的内存快照写到一个dump.rdb文件中;
这个过程并不涉及事务。
其次,Redis中实现事务有2种方式,
一是使用

MULTI
EXEC
DISCARD
WATCH 等命令;而是使用Lua脚本事务;具体可以看官方文档:https://link.zhihu.com/?target=http%3A//redis.io/topics/transactions

WATCH 我们就可以轻松地解决这类问题了:



WATCH mykey

val = GET mykey
val = val + 1

MULTI
SET mykey $val
EXEC


使用上面的代码, 如果在
WATCH 执行之后, 执行之前, 有其他客户端修改了 mykey 的值, 那么当前客户端的事务就会失败。 通常,都是使用Lua脚本封装多个redis基本命令,来实现一个复杂的事务操作。


引用


DISCARD 指令就是用来回滚的,AOF 可以配置为每条命令都立即写入磁盘,因此 ACID 是完全具备的。<br><br>但与很多数据库系统不同的是,Redis 采用的是乐观锁,所以在并发的情况下,失败的可能性是很高的。<br><br>再回到你的第一个提问,BGSAVE 的进程是不对外提供服务的,响应用户请求的进程一直是一致的。而如上所述,开启 AOF 后,持久性也是可满足的。只是实际使用中,一般不需要为了极低概率的数据丢失,而去频繁地写入磁盘。<br><br>最后,Redis 的事务对处理较复杂的业务需求非常有用。我在把数据迁移到 Cassandra 的时候,就因为后者只支持很轻量的事务,导致粒度稍大的事务,必须分成很多个小事务来写入(无法保证整个事务的原子性),并且在读取时也必须做各种检查。



引用


1.Redis服务端是个单线程的架构,不同的Client虽然看似可以同时保持连接,但发出去的命令是序列化执行的,这在通常的数据库理论下是最高级别的隔离
2. 用MULTI/EXEC 来把多个命令组装成一次发送,达到原子性
3. 用WATCH提供的乐观锁功能,在你EXEC的那一刻,如果被WATCH的键发生过改动,则MULTI到EXEC之间的指令全部不执行,不需要rollback
4. 其他回答中提到的DISCARD指令只是用来撤销EXEC之前被暂存的指令,并不是回滚



Jedis 的8种 事务处理
http://www.open-open.com/lib/view/open1410485827242.html








分享到:
评论

相关推荐

    各种版本的redis+Jedis驱动包

    Jedis支持各种Redis命令,包括数据类型操作、事务处理、发布/订阅、持久化等。在实际项目中,通过Jedis,开发者可以实现数据缓存、分布式锁、消息传递等功能。 为了使用Jedis,首先需要将其添加到项目依赖中,例如...

    spring boot redis-jedis

    通过配置和bean的创建,我们可以轻松地在Java代码中使用Jedis进行各种数据操作,包括键值对、集合、列表等数据结构,以及事务处理。这种集成对于提升应用性能、优化数据访问等方面有着显著的效果。

    redis相关jar包(redis2.1.5、jedis2.9.0)

    Jedis是Java社区广泛使用的Redis客户端库,版本2.9.1包含了对Redis各种命令的支持,包括基本的键值操作、事务处理、发布订阅、Lua脚本执行等功能。Jedis提供了简单易用的API,使得Java开发者可以方便地与Redis服务器...

    征服 Redis + Jedis

    Jedis是Java语言中广泛使用的Redis客户端库,它提供了丰富的API来操作Redis服务器,包括数据的读写、事务处理、发布订阅等功能。这篇“征服Redis + Jedis”的博文很可能是介绍如何在Java应用中高效地使用Redis和...

    Redis+Jedis+案例实战(高清视频教程).rar

    - 事务处理:了解Redis的单命令原子性及Jedis如何实现多命令的事务处理。 - 发布订阅:掌握Jedis的发布订阅模式,实现消息的发送和接收。 3. 实战案例: - 缓存应用:学习如何使用Redis作为Web应用的缓存,提高...

    redis jedis jar包

    7. **事务操作**:Jedis支持Redis的事务功能,可以通过multi、exec、discard等命令来执行批量操作。 8. **发布订阅**:Jedis也支持Redis的消息发布和订阅功能,可用于实现简单的通信和事件通知。 9. **连接池管理*...

    redis jredis jedis 使用

    开发者可以使用Jedis进行键值操作、事务处理、订阅/发布、管道传输等。Jedis通过连接池管理与Redis服务器的连接,以提高性能和资源利用率。同时,Jedis还支持Sentinel和Cluster,可以方便地在高可用和分布式环境中...

    redis,jedis,jar包

    Jedis是Java语言中操作Redis的客户端库,它提供了丰富的API来与Redis服务器进行交互,实现了包括字符串、哈希、列表、集合、有序集合等多种数据类型的操作。 在Java项目中集成Redis,首先你需要在项目的类路径下...

    java连接redis的jedis.jar包

    下面将详细阐述Jedis库的使用方法、核心概念以及如何在Java项目中集成和操作Redis。 首先,我们需要了解Jedis的基本概念。Jedis是一个开源的Java客户端,它提供了丰富的API,支持多种Redis命令,如字符串、哈希、...

    jedis-2.9.0 最新版Redis客户端CSDN下载

    几乎覆盖了Redis的所有命令,如字符串操作(SET、GET、INCR等)、哈希表操作(HSET、HGET、HKEYS等)、列表操作(LPUSH、RPOP、LINDEX等)、集合操作(SADD、SMEMBERS、SREM等)、有序集合操作(ZADD、ZRANGE、...

    中间件:Redis 之 Jedis的使用

    字符串是Redis中最基础的数据类型之一,Jedis提供了丰富的API来处理字符串: - **设置键值对**: ```java jedis.set("key", "value"); ``` - **获取键对应的值**: ```java String value = jedis.get("key");...

    redis,jedis,sentinel需要的两个jar包

    Redis是一款高性能的Key-Value数据库,它以内存存储为主,数据持久...以上内容详细介绍了标题和描述中所提到的Redis、Jedis和Sentinel的相关知识点,以及如何在Java项目中使用这两个jar包进行Redis操作和实现高可用性。

    redis+jedis+api

    1. **全面支持Redis命令**:Jedis提供了几乎所有的Redis命令接口,包括基本的Key-Value操作,复杂的数据结构操作以及事务、发布订阅等功能。 2. **连接池支持**:Jedis支持连接池管理,可以有效地复用连接,减少...

    redis+jedis

    Jedis支持各种Redis命令,包括基本的数据操作以及更复杂的特性,如管道处理、事务操作等。在项目中引入Jedis,只需要将`jedis-2.4.2.jar`添加到类路径中,就可以通过Java代码便捷地操作Redis数据库。 关于Redis的...

    redis的安装包以及jedis 的jar

    Redis 是一个高性能的键值对数据库,常被用于构建实时数据存储系统,提供丰富的数据结构支持,如字符串、哈希...理解并熟练掌握 Redis 的安装与配置,以及 Jedis 的使用,对于提升应用程序的性能和可靠性具有重要意义。

    征服 Redis + Jedis + Spring (三)—— 列表操作

    总的来说,“征服 Redis + Jedis + Spring (三)—— 列表操作”这个主题涵盖了 Redis 的列表数据类型、Jedis 的客户端操作以及 Spring Data Redis 提供的高级抽象。理解并掌握这些知识点,将有助于你在开发过程中...

    Redis及使用Jedis开发所需jar

    除了基本的数据操作,Jedis还支持事务(Transaction)、发布订阅(Pub/Sub)、lua脚本执行等功能,这些都是Redis的强大之处。 在实际开发中,为了提高性能和资源利用率,通常会使用连接池来管理Jedis实例。例如,...

    API SpringBoot + Shiro + Java-Jwt + Redis(Jedis).zip

    标题 "API SpringBoot + Shiro + Java-Jwt + Redis(Jedis)" 暗示了这是一个使用SpringBoot框架构建的API项目,集成了Shiro安全框架、Java-Jwt用于JSON Web Token的身份验证,以及Redis(通过Jedis客户端)作为缓存和...

    redis + jedis

    Jedis还支持更复杂的数据操作,如哈希(Hashes)、列表(Lists)、集合(Sets)和有序集合(Sorted Sets)的操作,以及发布订阅(Pub/Sub)、事务(Transactions)等功能。 Redis的持久化主要有两种方式:RDB(快照...

    RedisUtil_RedisUtil_redis_jedis常用util_

    综上所述,`RedisUtil`类通常封装了Redis的各种数据类型操作,便于开发者高效地与Redis交互,同时通过连接池管理和事务处理等特性,提升了应用的稳定性和性能。在实际项目中,根据具体需求,`RedisUtil`可能还会有更...

Global site tag (gtag.js) - Google Analytics