(NoSQL)03_Redis的Java客户端Jedis

03_Redis的Java客户端Jedis

一、Jedis

使用java语言来连接和操作redis数据库。
https://github.com/xetorthio/jedis
在这里的理解 jedis相当于jdbc

  1. 引入依赖
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.2.0</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>compile</scope>
    </dependency>
</dependencies>
  1. 启动redis的服务
  2. 测试连通性
@Test
 public void pingTest(){
     // 连接虚拟机中的redis服务
    Jedis jedis = new Jedis("192.168.124.7",6379);
    //测试是否可以和redis服务器连通  返回PONG 表示连接redis服务器成功
    System.out.println(jedis.ping());
 }
  1. 数据操作的测试
    在redis的服务端有什么样的命令,那么在jedis中就有对应的方法可以调用
@Test
public void stringTest(){
   // 获取redis中所有的key
    Jedis jedis = new Jedis("192.168.124.7",6379);
   Set<String> keys =  jedis.keys("*");
   for (String key : keys){
       System.out.println(key);
   }
}
@Test
public void stringTest(){
   // 写入一个String类型   注意不能再slave上写入
  String setRes =  jedis.set("s1" ,"admin");
  System.out.println(setRes);//ok
  String  msetRes = jedis.mset("s2","AA","s3","BB","s4","cc");
  System.out.println(msetRes);
 List<String> mgetRes =  jedis.mget("s2","s3","s4");
 for(String str :mgetRes){
     System.out.println(str);
 }
 jedis.set("n1","1");
 jedis.incrBy("n1",100);
    System.out.println(jedis.get("n1"));
}
// 事务的相关操作
@Test
public void tranctionTest(){
   jedis.watch("ss1");//监视一个key
   jedis.set("ss1","aaaaa");
   jedis.unwatch();//取消监视
    // 对于监视的key  如果在事务之前被修改  则事务将被取消   监视取消 事务可以正常执行
    Transaction transaction = jedis.multi();
    Response<Long> res = transaction.lpush("l1","zhangsan","lisi","wangwu");
    transaction.set("ss1","bbbb");
    Response<String> res1 = transaction.lpop("l1");
    Response<Long> res2 = transaction.sadd("score","100","80","90");
    transaction.exec();
    System.out.println(jedis.get("ss1"));

}

jedisPool:

 @Test
public  void jedisPool(){
    JedisPool pool = new JedisPool("192.168.124.7",6379);
    JedisPoolConfig jpf = new JedisPoolConfig();
    jpf.setMaxIdle(10);
    jpf.setMaxTotal(20);
    jpf.setMinIdle(5);
    Jedis jedis = pool.getResource();
    jedis.set("sk1","SSSS");
    String sk1 = jedis.get("sk1");
    System.out.println(sk1);
    jedis.close();


}

二、高可用性

HA高可用性 主从复制 读写分离
Sentinel
分别启动redis 服务 和sentinel 服务
在这里插入图片描述
此处 将sentinel79/80/81.cof文件中的所有的

bind 192.168.230.130(虚拟机的ip)

在这里插入图片描述
在这里插入图片描述
启动之后的进程 所有的哨兵进程必须是以IP地址开头
在这里插入图片描述
无论是服务端还是哨兵的配置 尽量都使用ip地址
在这里插入图片描述
i

mport org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;

import java.util.HashSet;
import java.util.Set;

public class SentinelTest {
    JedisSentinelPool jedisSentinelPool = null;
    Jedis jedis = null ;

    @Before
    public void init(){
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(5000);
        poolConfig.setMaxIdle(500);
        poolConfig.setMaxWaitMillis(5000L);
        //设置哨兵
        Set<String> sentinels = new HashSet<String>();
        sentinels.add("192.168.230.130:26379");
        sentinels.add("192.168.230.130:26380");
        sentinels.add("192.168.230.130:26381");
        jedisSentinelPool = new JedisSentinelPool("mymaster",sentinels,poolConfig);
        jedis = jedisSentinelPool.getResource();
    }
    @Test
    public void pingTest(){
        System.out.println(jedis.ping());
        
    }
    @Test
    public void dataTest(){
        jedis.set("abb","abb");
        HostAndPort hp = jedisSentinelPool.getCurrentHostMaster();
        System.out.println(hp.getHost());
        System.out.println(hp.getPort());

    }
 }

执行lua脚本

public void testLua() {
    Jedis jedis = RedisClient.getJedis();
    List<String> keys = new ArrayList<>();
    keys.add("name");
    keys.add("age");
    List<String> values = new ArrayList<>();
    values.add("kevin");
    values.add("25");
    jedis.eval("redis.call('set', KEYS[1], ARGV[1]) redis.call('set', KEYS[2], ARGV[2])", keys, values);
    jedis.close();
}

在这里插入图片描述

发布了67 篇原创文章 · 获赞 6 · 访问量 1910

猜你喜欢

转载自blog.csdn.net/weixin_45801537/article/details/104987808