Redis (九) Jedis

Redis (九) Jedis

<dependencies>
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.1.0</version>
    </dependency>
</dependencies>

Connect redis

//Redis连接IP
private static String host = "IP";

//端口号
private static int port = 6379;

public static void main(String[] args) {
    
    

    Jedis jedis = new Jedis(host,port);

    //测试连通性
    String pong = jedis.ping();

    System.out.println("pong = " + pong);

}

// 运行前:
// 1.关闭防火墙 systemctl stop firewalld.service
// 2.修改redis.conf [ bind 0.0.0.0 ] 允许任何ip访问,以这个redis.conf启动redis服务(重启redis)
// redis-server /opt/redis5.0.4/redis.conf



//Exception in thread "main" redis.clients.jedis.exceptions.JedisDataException: WRONGTYPE Operation against a key holding the wrong kind of value
//进入redis-cli,运行config set protected-mode "no"

Common API

public class Test2API {
    
    

    //Redis连接IP
    private static String host = "IP";
    //端口号
    private static int port = 6379;

    public static void main(String[] args) {
    
    
        Jedis jedis = new Jedis(host, port);
        //执行前清空当前数据库,防止出现错误
        jedis.flushDB();
        //String类型
        jedis.set("k1", "v1");
        jedis.set("k2", "v2");
        jedis.set("k3", "v3");
        //获取全部键
        Set<String> set = jedis.keys("*");
        //通过键获取相对应的值
        set.forEach(item -> System.out.println(item + " -> " + jedis.get(item)));
        System.out.println("判断指定键是否存在:" + jedis.exists("k4"));
        System.out.println("查看k1的过期时间:" + jedis.ttl("k1"));
        //写入多个值
        jedis.mset("k4","v4","k5","v5");
        //获取多个值
        System.out.println(jedis.mget("k1", "k2", "k3", "k4", "k5"));

        System.out.println("***********************************************************");

        //List类型
        jedis.lpush("list01","l1", "l2", "l3", "l4", "l5");
        //获取全部值
        List<String> list01 = jedis.lrange("list01", 0, -1);
        list01.forEach(item -> System.out.println(item));

        System.out.println("***********************************************************");

        //Set类型
        jedis.sadd("order","jd001");
        jedis.sadd("order","jd002");
        jedis.sadd("order","jd003");
        //获取set信息
        Set<String> order = jedis.smembers("order");
        order.forEach(item -> System.out.println(item));
        //删除set某一个信息
        jedis.srem("order","jd003");
        System.out.println("Set长度:" + jedis.smembers("order").size());

        System.out.println("***********************************************************");

        //Hash类型
        jedis.hset("user1","username","tom");
        System.out.println("获取user1的username:" + jedis.hget("user1", "username"));

        HashMap<String, String> map = new HashMap<>();
        map.put("username","jack");
        map.put("gender","boy");
        map.put("address","beijing");
        map.put("phone","11111111");
        jedis.hmset("user2",map);

        List<String> list = jedis.hmget("user2", "username", "phone");
        list.forEach(item -> System.out.println(item));

        System.out.println("***********************************************************");

        //Zset类型
        jedis.zadd("zset01",60d,"zs1");
        jedis.zadd("zset01",70d,"zs2");
        jedis.zadd("zset01",80d,"zs3");
        jedis.zadd("zset01",90d,"zs4");
        //获取全部值
        Set<String> zset01 = jedis.zrange("zset01", 0, -1);
        zset01.forEach(item -> System.out.println(item));
    }
}

Transaction control

Initialize balance and expenditure

set yue 100
set zhichu 0
public class Test3Affair {
    
    

    //Redis连接IP
    private static String host = "IP";
    //端口号
    private static int port = 6379;

    public static void main(String[] args) throws InterruptedException {
    
    
        Jedis jedis = new Jedis(host, port);
        int zhichu = 10;
        //监控余额
        jedis.watch("yue");
        //模拟网络延迟
        Thread.sleep(5000);
        int yue = Integer.valueOf(jedis.get("yue"));
        if (yue < zhichu){
    
    
            //解除监控
            jedis.unwatch();
            System.out.println("余额不足!!!!");
        } else {
    
    
            //开启事务
            Transaction transaction = jedis.multi();
            //余额 - 支出
            transaction.decrBy("yue",zhichu);
            //支出 + 支出       累计消费
            transaction.incrBy("zhichu",zhichu);
            //执行事务
            transaction.exec();
            System.out.println("余额:" + jedis.get("yue"));
            System.out.println("累计支出:" + jedis.get("zhichu"));
        }
    }

}

JedisPool (connection pool)

public class JedisPoolUtil {
    
    
    //Redis连接IP
    private final static String HOST = "IP";
    //端口号
    private final static int PORT = 6379;
    //声明连接池
    private volatile static JedisPool jedisPool = null;
    //数据对象
    private volatile static Jedis jedis = null;

    //私有化构造
    private JedisPoolUtil(){
    
    }

    //私有化连接池对象
    //返回一个连接池
    private static JedisPool getInstance(){
    
    
        //双层检查锁机制
        //第一层锁检测
        if (jedisPool == null){
    
    
            //上锁,保证高并发情况
            synchronized (JedisPoolUtil.class){
    
    
                //二次检测
                if (jedisPool == null){
    
    
                    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
                    //设置连接池信息
                    jedisPoolConfig.setMaxTotal(1000);       //最大连接数量
                    jedisPoolConfig.setMaxIdle(30);          //最大等待数量
                    jedisPoolConfig.setMaxWaitMillis(60 * 1000);        //最大等待时间
                    jedisPoolConfig.setTestOnBorrow(true);      //后台运行
                    //获取连接池
                    jedisPool = new JedisPool(jedisPoolConfig,HOST,PORT);
                }
            }
        }
        return jedisPool;
    }

    //返回jedis对象
    public static Jedis getJedis(){
    
    
        //双重检测锁机制
        if (jedis == null){
    
    
            //在连接池获取连接对象
            jedis = getInstance().getResource();
        }
        return jedis;
    }
}
public class Test4JedisPool {
    
    
    public static void main(String[] args) {
    
    
        Jedis jedis1 = JedisPoolUtil.getJedis();
        Jedis jedis2 = JedisPoolUtil.getJedis();
        System.out.println(jedis1 == jedis2);
    }
}

Guess you like

Origin blog.csdn.net/weixin_49741990/article/details/112911381