菜鸟笔记
提升您的技术认知

day5、java操作redis-ag真人游戏

阅读 : 123

1、redis的java客户端

redis的java客户端也有很多: https://redis.io/clients#java,其中比较受欢迎的是jedis和lettuce。

  • jedis在实现上是直接连接的redis server,如果在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个jedis实例增加物理连接,官方推荐。 https://mvnrepository.com/search?q=jedis
  • lettuce的连接是基于netty的,连接实例(statefulredisconnection)可以在多个线程间并发访问,应为
    statefulredisconnection是线程安全的,所以一个连接实例(statefulredisconnection)就可以满足多线程环境下的并发访问,当然这个也是可伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例。
  • 在springboot data redis 1.x之前默认使用的是jedis,但目前最新版的修改成了lettuce。
  • 之前公司使用jedis居多,lettuce近两年在逐步上升,总的来讲jedis的性能会优于lettuce(因为它是直接操作redis)。

jedistest.java

package com.xiao;
import org.junit.after;
import org.junit.before;
import org.junit.test;
import redis.clients.jedis.jedis;
import java.util.set;
public class jedistest {
  
    jedis jedis = null;
    // 建立连接
    @before
    public void init() {
  
        // 初始化 jedis 客户端,声明主机和端口
        jedis = new jedis("192.168.65.3", 6379);
        // 身份认证
        jedis.auth("123456");
        // ping pong 心跳机制检测是否连接成功
        string pong = jedis.ping();
        system.out.println("pong = "   pong);
    }
    @test
    public void teststring() {
  
        //选择数据库
        jedis.select(2);
        //插入一条数据
        string result = jedis.set("username", "xiao");
        system.out.println("result = "   result);
        //获取一条数据
        string username = jedis.get("username");
        system.out.println("username = "   username);
    }
    @test
    public void testkeys() {
  
        jedis.select(2);
        set keys = jedis.keys("*");
        system.out.println(keys);
    }
    // 释放资源
    @after
    public void close(){
  
        if (jedis != null) {
  
            jedis.close();
        }
    }
}

jedispoolconnectredis.java

package com.xiao;
import redis.clients.jedis.jedis;
import redis.clients.jedis.jedispool;
import redis.clients.jedis.jedispoolconfig;
// 连接池工具类
public class jedispoolconnectredis {
  
        private static jedispool jedispool;
        static {
  
            // 创建连接池配置对象
            jedispoolconfig jedispoolconfig = new jedispoolconfig();
            // 设置最大连接数,默认8
            jedispoolconfig.setmaxtotal(5);
            // 设置最大空闲数量,默认8
            jedispoolconfig.setmaxidle(5);
            // 设置最小空闲数量,默认0
            jedispoolconfig.setminidle(0);
            // 设置等待时间 ms
            jedispoolconfig.setmaxwaitmillis(100);
            // 初始化 jedispool 对象
            jedispool = new jedispool(jedispoolconfig,
                    "192.168.65.3", 6379,
                    100,"123456");
        }
        /**
        * 获取jedi对象
        * @return
        */
        public  static jedis getjedis() {
  
            return jedispool.getresource();
        }
}

2、 环境准备

2.1、 引入依赖



  redis.clients
  jedis
  2.9.0

2.2、创建jedis对象

 public static void main(string[] args) {
  
   //1.创建jedis对象
   jedis jedis = new jedis("192.168.40.4", 6379);//1.redis服务必须关闭防火墙  2.redis服务必须开启远程连接
   jedis.select(0);//选择操作的库默认0号库
   //2.执行相关操作
   //....
   //3.释放资源
   jedis.close();
 }

3、常用api

3.1、操作key相关api

private jedis jedis;
    @before
    public void before(){
  
        this.jedis = new jedis("192.168.202.205", 7000);
    }
    @after
    public void after(){
  
        jedis.close();
    }
    //测试key相关
    @test
    public void testkeys(){
  
        //删除一个key
        jedis.del("name");
        //删除多个key
        jedis.del("name","age");
        //判断一个key是否存在exits
        boolean name = jedis.exists("name");
        system.out.println(name);
        //设置一个key超时时间 expire pexpire
        long age = jedis.expire("age", 100);
        system.out.println(age);
        //获取一个key超时时间 ttl
        long age1 = jedis.ttl("newage");
        system.out.println(age1);
        //随机获取一个key
        string s = jedis.randomkey();
        //修改key名称
        jedis.rename("age","newage");
        //查看可以对应值的类型
        string name1 = jedis.type("name");
        system.out.println(name1);
        string maps = jedis.type("maps");
        system.out.println(maps);
    }

3.2、操作string相关api

//测试string相关
    @test
    public void teststring(){
  
        //set
        jedis.set("name","小陈");
        //get
        string s = jedis.get("name");
        system.out.println(s);
        //mset
        jedis.mset("content","好人","address","海淀区");
        //mget
        list mget = jedis.mget("name", "content", "address");
        mget.foreach(v-> system.out.println("v = "   v));
        //getset
        string set = jedis.getset("name", "小明");
        system.out.println(set);
        //............
    }

3.3、操作list相关api

//测试list相关
    @test
    public void testlist(){
  
        //lpush
        jedis.lpush("names1","张三","王五","赵柳","win7");
        //rpush
        jedis.rpush("names1","xiaomingming");
        //lrange
        list names1 = jedis.lrange("names1", 0, -1);
        names1.foreach(name-> system.out.println("name = "   name));
        //lpop rpop
        string names11 = jedis.lpop("names1");
        system.out.println(names11);
        //llen
        jedis.linsert("lists", binaryclient.list_position.before,"xiaohei","xiaobai");
        //........
    }

3.4、操作set的相关api

//测试set相关
@test
public void testset(){
  
  //sadd
  jedis.sadd("names","zhangsan","lisi");
  //smembers
  jedis.smembers("names");
  //sismember
  jedis.sismember("names","xiaochen");
  //...
}

3.5、 操作zset相关api

//测试zset相关
@test
public void testzset(){
  
  //zadd
  jedis.zadd("names",10,"张三");
  //zrange
  jedis.zrange("names",0,-1);
  //zcard
  jedis.zcard("names");
  //zrangebyscore
  jedis.zrangebyscore("names","0","100",0,5);
  //..
}

3.6、 操作hash相关api

//测试hash相关
@test
public void testhash(){
  
  //hset
  jedis.hset("maps","name","zhangsan");
  //hget
  jedis.hget("maps","name");
  //hgetall
  jedis.hgetall("mps");
  //hkeys
  jedis.hkeys("maps");
  //hvals
  jedis.hvals("maps");
  //....
}
网站地图