Java通过Jedis与Redis整合与事务控制 !

  • Post author:
  • Post category:java




Jedis


  1. 什么是jedis?

Redis官方网站上列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用Jedis和Redisson。相当于Java操作Redis的中间件。在企业中用的最多的就是Jedis。Jedis提供了完整Redis命令,而Redisson有更多分布式的容器实现


  1. 导入依赖
<!-- https://mvnrepository.com/artifact/redis.clients/jedis --> 
<dependency> 
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId> 
<version>3.2.0</version> 
</dependency>

  1. 单例连接测试
public static void main(String[] args) {
	// 1.new Jedis 对象填写ip和端口号
	Jedis jedis = new Jedis("127.0.0.1",6379);
	// 如果设置了密码,需要认证
	//jedis.auth("password");
	// 2. 测试是否可以ping通
	System.out.println(jedis.ping());
}

输出:

在这里插入图片描述


  1. JedisPool连接池测试


    JedisPool网络连接池是一个线程安全的,而Jedis单例进行连接是线程不安全的,可以在JedisPool连接池中创建Jedis实例,然后从连接池中取Jedis实例进行操作,会解决线程不安全的问题提高效率。
public class JedisPoolUtil {

    private static JedisPool jedisPool = null;

   static {
        try {
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxIdle(200);
            config.setTestOnBorrow(true);
            config.setMaxWaitMillis(10000);
            //jedisPool = new JedisPool(config, "127.0.0.1", 6379, 10000, “password”);
            jedisPool = new JedisPool(config, "127.0.0.1", 6379, 10000);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Jedis getJedis() {
        if (jedisPool != null) {
            Jedis jedis = jedisPool.getResource();
            return jedis;
        }
        return null;
    }

    public static void close(Jedis jedis) {
        if (jedis != null) {
            jedis.close();
        }
    }

}


  1. 测试连接池
 public static void main(String[] args) {
        //从连接池中获取jedis实例
        Jedis jedis = JedisPoolUtil.getJedis();
        jedis.set("k1", "v1");
        // set 多个key 和 value
        jedis.mset("k2", "v2", "k3", "v3", "k4", "v4");
        System.out.println(jedis.get("k3"));
        System.out.println(jedis.keys("*"));
        // delete key
        jedis.del("k2");
        System.out.println(jedis.keys("*"));
        JedisPoolUtil.close(jedis);
    }

在这里插入图片描述


  1. 事务
 public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1",6379);
        jedis.flushDB();
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("hello","world");
        jsonObject.put("name","xuqingdeng");

        //开启事务
        Transaction multi = jedis.multi();
        String result = jsonObject.toJSONString();

        // jedis.watch(result); // 监控
        try {
            multi.set("user1",result);
            multi.set("user2",result);
            int i = 1/0;  //模拟代码抛出异常事务,执行失败
            multi.exec(); // 执行事务
        } catch (Exception e) {
            multi.discard(); // 放弃事务
            e.printStackTrace();
        } finally {
            System.out.println(jedis.get("user1"));
            System.out.println(jedis.get("user2"));
            jedis.close();// 关闭连接
        }

    }



版权声明:本文为weixin_44467567原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。