`

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:取消监控

 

 

分享到:
评论

相关推荐

    java操作redis数据库实例

    9. **事务操作**: ```java Transaction tx = jedis.multi(); // 开始一个事务 tx.set("key1", "value1"); tx.set("key2", "value2"); tx.exec(); // 提交事务 ``` 10. **发布/订阅功能**: ```java ...

    java操作redis所需jar包.zip

    Java操作Redis通常依赖于Jedis库,这是一个Java客户端,用于连接和操作Redis键值存储系统。Jedis提供了丰富的API,可以执行多种Redis命令,包括数据结构操作、事务处理、发布/订阅等功能。在这个"java操作redis所需...

    java操作redis

    ### Java 操作 Redis 的关键技术知识点 #### 一、Redis 基础概念 Redis 是一款开源的、基于内存的操作系统级别的 key-value 数据库。相比于传统的 key-value 存储系统如 Memcached,Redis 提供了更加丰富的数据...

    Java操作redis小案例

    本篇文章将深入探讨如何使用Java操作Redis,并通过一个小型案例来展示其实现过程。 首先,要进行Java与Redis的交互,我们需要引入相应的Java客户端库,例如Jedis或Lettuce。在这个小案例中,我们以Jedis为例,因为...

    java操作redis代码和redis工具类相关包资料

    本资料包提供了关于Java操作Redis的代码示例和工具类,旨在帮助开发者更好地理解和应用Java与Redis的集成。 首先,让我们深入了解一下Redis。Redis是一个开源的内存数据结构存储系统,支持数据类型如字符串、哈希、...

    Java操作Redis实例,操作封装

    在实际项目中,还可以考虑添加异常处理、事务操作、分布式锁等功能,进一步完善Redis操作的封装。同时,监控Redis的性能指标,如内存使用、命令执行情况等,也是保持系统稳定运行的重要环节。 通过以上的方式,我们...

    java_redis简单案例

    6.事务支持:Redis支持单个命令的原子性操作,Java客户端可以使用`Multi`和`Exec`方法实现事务。 7. 持久化:Redis提供了RDB(快照)和AOF(Append Only File)两种持久化方式,确保数据安全。开发者需要根据业务...

    java操作redis工具类与配置文件,详细版

    在Java中操作Redis,我们通常会使用一个客户端库,如Jedis或Lettuce,来建立连接、执行命令和处理响应。下面我们将详细介绍Java操作Redis的工具类以及配置文件的设置。 **1. Jedis库的引入** 首先,我们需要在项目...

    redis安装教程和java操作服务器端demo

    以上就是Redis的安装教程以及Java操作Redis的基本步骤。在实际应用中,可以利用Redis的更多功能,如哈希表、集合、有序集合等,以及事务、发布订阅等高级特性,提升应用程序的性能和可扩展性。在开发过程中,确保对...

    java redis 各类型操作实例

    Redis支持原子性的事务操作,使用`multi`、`exec`进行批处理: ```java jedis.multi(); jedis.set("key1", "value1"); jedis.set("key2", "value2"); List&lt;Object&gt; results = jedis.exec(); System.out....

    Redis:使用Java与redis连接

    总的来说,Java通过Jedis库提供了丰富的API来操作Redis,涵盖了从基本的键值对存取到复杂的数据结构操作,以及事务和消息订阅等功能。开发者可以根据具体需求选择相应的API来实现高效的数据管理。在实际项目中,可以...

    java-Redis操作

    Java与Redis的操作是现代Web应用中常见的数据存储和缓存技术结合。Redis是一个高性能的键值数据库,以其丰富的数据结构和高效的速度深受开发者喜爱。在Java应用程序中集成Redis,可以利用其特性进行快速读写,实现高...

    Redis友好界面管理工具,php+redis,java+redis

    5. **事务操作**:可以模拟Redis的事务处理,确保多条命令的原子性执行。 6. **监视器**:提供实时的键空间通知和命令监控,帮助分析Redis的运行状态。 在PHP开发中,我们可以使用`phpredis`扩展来与Redis进行交互...

    java+redis+lua实现重复提交操作拦截.zip

    本项目"java+redis+lua实现重复提交操作拦截"旨在解决这个问题,通过结合Java、Redis和Lua技术来构建一个高效的解决方案。以下是相关知识点的详细说明: 1. **Java AOP(面向切面编程)**: - AOP是一种编程范式,...

    java的redis项目

    7. **Redis事务与Lua脚本** Redis支持单命令原子操作,Spring Data Redis通过`RedisTransactionManager`进行事务管理。此外,Redis的Lua脚本可以执行多条命令,保证原子性,常用于复杂的业务逻辑。 8. **持久化与...

    java操作redis所需jar

    8. **事务操作**:Redis支持原子性的事务操作,Jedis也提供了相应的API。 ```java Transaction tx = jedis.multi(); tx.set("key1", "value1"); tx.set("key2", "value2"); List&lt;Object&gt; responses = tx.exec()...

    java操作redis工具类

    5. **事务操作**:利用multi、exec进行原子性的多条命令执行。 6. **过期时间设置**:为键设置生存时间(expire)以实现自动清理过期数据。 7. **批量操作**:使用mset、mget等批量处理多个键值对。 8. **pipeline和...

    Java-redis-demo

    4. **事务(Transactions)**: Redis支持原子性的事务操作,Jedis提供了`multi()`和`exec()`方法来开始和提交一个事务。所有在`multi()`和`exec()`之间的命令都会作为一个批次执行。 5. **发布/订阅(Pub/Sub)**: ...

    java链接Redis实例

    在Java中,我们通常使用Jedis或Lettuce库来连接并操作Redis。 首先,我们需要在项目中引入对应的依赖库。对于Jedis,可以在Maven项目中添加以下依赖: ```xml &lt;groupId&gt;redis.clients &lt;artifactId&gt;jedis ...

Global site tag (gtag.js) - Google Analytics