`

java操作redis redis的事务

 
阅读更多

 

 

 

1 添加mavcen依赖:

 

1 pom.xml中增加依赖:

  <dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>2.4.2</version>
 </dependency> 

 

 

2 redis java客户端连接工具 jedis

 

连接配置参数含义简介:

 

//控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。  
poolConfig.setMaxIdle(10);
//控制一个pool最多有多少个jedis实例。  
poolConfig.setMaxTotal(100);
//表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
poolConfig.setMaxWaitMillis(10000);
//在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的; 
poolConfig.setTestOnBorrow(true);

 

 

 

 

3 连接方式:

单机单连接方式
单机连接池方式
多机分布式连接池方式

 

代码如下:

 

import java.util.ArrayList;
import java.util.List;
 
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.junit.Test;
 
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
 
public class TestJedis {
 
    String host = "192.168.1.170";
    int port = 6379;
    /**
     * 单机模式
     */
 
    @Test
    public void testSet() {
        Jedis jedis = new Jedis(host, port);
        String result = jedis.set("name", "zm");
        System.out.println(result);
        jedis.close();
    }
     
    @Test
    public void testGet(){
        Jedis jedis = new Jedis(host, port);
        String value = jedis.get("name");
        System.out.println(value);
        jedis.close();
    }
     
     
     
    /**
     * 单机链接池
     */
    @Test
    public void testpool(){
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(100);
        poolConfig.setMaxIdle(10);
        poolConfig.setMaxWaitMillis(5000);
        poolConfig.setTestOnBorrow(true);
        JedisPool jedisPool = new JedisPool(poolConfig, host,port);
        Jedis jedis = jedisPool.getResource();
        String value = jedis.get("name");
        System.err.println(value+"_____pool");
        jedisPool.returnResource(jedis);
    }
    // 连接redis集群 
    @Test
    public void testmorePool(){
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(100);
        poolConfig.setMaxIdle(10);
        poolConfig.setMaxWaitMillis(5000);
        poolConfig.setTestOnBorrow(true);
        List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
        shards.add(new JedisShardInfo(host, port));
        /*shards.add(new JedisShardInfo(host, port)); // redis集群机器1 端口1
        shards.add(new JedisShardInfo(host, port)); // redis集群机器2 端口2
        shards.add(new JedisShardInfo(host, port));*/ // redis集群机器3 端口3
        ShardedJedisPool shardedJedisPool = new ShardedJedisPool(poolConfig, shards);
        ShardedJedis jedis = shardedJedisPool.getResource();
        String value = jedis.get("crxy");
        System.out.println(value+"_______morepool");
        shardedJedisPool.returnResource(jedis);
    }
     
     
     
     
     
     
}

 

 

2 事务:

 

2.1)redis的事务(transaction)

redis中的事务是一组命令的集合。事务同命令一样都是redis的最小执行单元。
原理:先将属于一个事务的命令发送给redis,然后再让redis依次执行这些命令,要么都执行,要么都不执行。

应用场景
一组命令必须同时都执行,或者都不执行。
我们想要保证一组命令在执行的过程之中不被其它命令插入。

 

2.2)命令写法
multi 事务开始
set name zm
set name xin
exec 事务结束,开始执行事务中的命令    如果执行 discard 则放弃事务

 

2.3)

错误处理
1:语法错误:致命的错误,事务中的所有命令都不会执行
2:运行错误:不会影响事务中其他命令的执行(比如 用错误的命令来操作错误的数据类型),但是那条运行错误的命令讲不会被执行,也更不会回滚

Redis 不支持回滚(roll back)
因为不需要对回滚进行支持,所以redis的内部才可以保持简单且快速


2.4)watch命令
作用:监控一个或者多个键,当被监控的键值被修改后阻止之后的一个事务的执行。
但是不能保证其它客户端不修改这一键值,所以我们需要在事务执行失败后重新执行事务中的命令。
注意:执行完事务的exec命令之后,watch就会取消对所有键值的监控
unwatch:取消监控

 

 

分享到:
评论

相关推荐

    RedisConfig.java

    RedisConfig:Redis配置类 设置数据存入 redis 的序列化方式,并开启事务,注入封装RedisTemplate等等

    redis集群批量插入

    java连接redis集群批量String类型插入

    记录redisson实现redis分布式事务锁

    自己封装redisson方法,同时通过注解的方式加入redis分布式事务锁,可靠。

    Java通过Jedis操作Redis

    Java通过Jedis操作Redis,演示Redis基本数据类型,主从复制,事务。

    【Redis缓存机制】详解Java连接Redis_Jedis_事务

    主要介绍了【Redis缓存机制】详解Java连接Redis_Jedis_事务,详细的介绍了Jedis事务和实例,有兴趣的可以了解一下。

    Java开发面试-Redis专区

    在面试中,面试官可能会问到Redis的基本概念和特点,例如持久化机制、数据类型、过期策略、事务操作等,以及与其他缓存系统的区别和优势。其次,对于Java开发者来说,熟悉Redis的Java客户端也是必要的。在面试中,...

    redis的java驱动

    本文档是 Redis Command Reference 和 Redis Documentation 的中文翻译版: 所有 Redis 命令文档均已翻译完毕, Redis 最重要的一部分主题(topic)文档, 比如事务、持久化、复制、Sentinel、集群等文章也已翻译...

    redis从入门到精通的教学视频

    1、Redis的安装介绍 2、Redis的命令 3、Redis的事务以及锁应用 4、Redis的日志 5、Redis的集群 6、使用Redis的java微博小项目

    尚硅谷_Redis.docx

    在本课程中,你将了解Redis是什么、能干什么、如何用,了解NoSQL的使用场景和概念,快速掌握Redis的安装配置、五大数据类型、常用操作命令、Redis持久化、主从复制、事务控制以及用Jedis操作进行Java开发等知识。...

    Java核心面试知识集-Redis面试题

    2.为什么redis事务不具备原子性 单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。 事务可以理解为一个打包的批量执行脚本,但批量指令并非...

    Redis面试题50道(含答案)_.pdf

    14、Redis 支持的 Java 客户端都有哪些?官方推荐用哪个? 15、Redis 和 Redisson 有什么关系? 16、Jedis 与 Redisson 对比有什么优缺点? 17、Redis 如何设置密码及验证密码? 18、说说 Redis 哈希槽的概念? 19、...

    Redis面试专题30道.zip

    14、Redis 支持的 Java 客户端都有哪些?官方推荐用哪个? 15、Redis 和 Redisson 有什么关系? 16、Jedis 与 Redisson 对比有什么优缺点? 17、Redis 如何设置密码及验证密码? 18、说说 Redis 哈希槽的概念? 19、...

    2020最新版Redis架构全套视频教程课件

    Redis(REmote DIctionary Server)是一个Key Value存储系统,是非常...掌握Redis在Windows和Linux下的安装配置、五大数据类型、常用操作命令、Redis持久化、主从复制、事务控制以及用Jedis操作进行Java开发等技术点

    redis-阳哥课件.mmap

    redis简介,redis数据类型,redis事务,redis发布订阅,redis持久化,redis主从复制,redis-java

    尚硅谷Redis入门视频

    在本课程中,你将了解Redis是什么、能干什么、如何用,了解NoSQL的使用场景和概念,快速掌握Redis的安装配置、五大数据类型、常用操作命令、Redis持久化、主从复制、事务控制以及用Jedis操作进行Java开发等知识。...

    Redis数据类型视频

    在本课程中,你将了解Redis是什么、能干什么、如何用,了解NoSQL的使用场景和概念,快速掌握Redis的安装配置、五大数据类型、常用操作命令、Redis持久化、主从复制、事务控制以及用Jedis操作进行Java开发等知识。...

    若依框架整合Redis,包含若依原码和Windows版本地可以启动的redis项目

    RuoYi是一个基于Java技术开发的后台管理系统,基于技术组合(SpringBoot+Vue),内置模块有:部门管理、角色用户、菜单即按钮授权、数据权限、系统参数、日志管理、...支持多数据源、支持分布式事务、支持Redis缓存。

    redis事务.pdf

    Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证: 批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行...

    Redis-x64-3.2.100的安装版java可用

    Redis 是一个开源的(BSD 许可)内存数据结构...Redis 具有高性能,并且提供复制、Lua 脚本、LRU 驱逐、事务和不同级别的磁盘持久性,还通过 Redis Sentinel 提供高可用服务,并提供自动分区功能通过 Redis Cluster。

    免费开源!!高级 Java Redis 客户端,用于线程安全同步、异步和反应式使用 支持集群、哨兵、管道和编解码器

    如果多个线程避免阻塞和事务性操作(例如BLPOP和 MULTI/ ) ,则它们可以共享一个连接EXEC。Lettuce是用netty构建的。支持高级 Redis 功能,例如 Sentinel、集群、管道、自动重新连接和 Redis 数据模型。 此版本的 ...

Global site tag (gtag.js) - Google Analytics