Redis的Java客户端

Redis的Java客户端

一.Jedis依赖

1.引入依赖

在Maven中引入Jedis的依赖,通过Maven中央仓库中进行查找:

java 复制代码
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.4.2</version>
</dependency>

2.redis端口问题

由于redis的端口号6379默认被云服务器防火墙给进行保护起来了,如果手动关闭防火墙很容易被黑客入侵,所以不能够关闭防火墙。

如果想在Java上访问redis的服务器那么可以按照以下的2个方法:

(1)打包给Linux

把写好的Java代码打包成jar包,然后把jar包上传到Linux服务器上执行,这种方法手动太麻烦了,虽然也有插件,但是不太安全。

(2)配置SSH端口,进行映射

通过 SSH 隧道将本地端口与远程 Redis 服务端口绑定,使 Java 客户端通过本地端口间接访问远程 Redis。

步骤:







查看是否成功打开(成功就是下图):

二.Java客户端上使用redis

1.连接Jedis服务器

java 复制代码
//连接Redis服务器
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");

2.redis通用命令

java 复制代码
try (Jedis jedis = jedisPool.getResource()) {
            //redis各种命令,就对应jedis对象的各种方法
            String pong = jedis.ping();
            System.out.println(pong);
        }

set/get命令

java 复制代码
try (Jedis jedis = jedisPool.getResource()) {
            System.out.println("get和set的使用");
            //此处是进行测试,需要将数据库中的数据线清空
            jedis.flushAll();

            jedis.set("key1","111");
            jedis.set("key2","222");
            SetParams params = new SetParams();
            params.ex(10);
            params.xx();

            jedis.set("key1","333",params);

            String value = jedis.get("key1");
            System.out.println("value: " + value);
        }

exists和del

java 复制代码
try (Jedis jedis = jedisPool.getResource()) {
            System.out.println("exists 和 del 的使用");
            //此处是进行测试,需要将数据库中的数据线清空
            jedis.flushAll();

            jedis.set("key1","111");
            jedis.set("key2","222");
            jedis.set("key3","333");
            jedis.set("key4","444");

            boolean result = jedis.exists("key1");
            System.out.println(result);

            long del = jedis.del("key1");
            System.out.println(del);

            result = jedis.exists("key1");
            System.out.println(result);

            //删除多个key
            del = jedis.del("key2","key3","key4");
            System.out.println(del);

            //检查多个key是否存在
            long result1 = jedis.exists("key2","key3","key4");
            System.out.println(result1);
        }

keys

java 复制代码
try (Jedis jedis = jedisPool.getResource()) {
            System.out.println("keys的使用");
            //此处是进行测试,需要将数据库中的数据线清空
            jedis.flushAll();

            jedis.set("key1","111");
            jedis.set("key2","222");
            jedis.set("key3","333");
            jedis.set("key4","444");

            Set<String> keys = jedis.keys("*");
            System.out.println(keys);
        }

ex、ttl、type

java 复制代码
try (Jedis jedis = jedisPool.getResource()) {
            System.out.println("ex、ttl 和 type 的使用");
            //此处是进行测试,需要将数据库中的数据线清空
            jedis.flushAll();

            jedis.set("key1","111");
            jedis.expire("key1",10);
            long time = jedis.ttl("key1");
            System.out.println("剩余时间: " + time);

            Thread.sleep(3000);
            time = jedis.ttl("key1");
            System.out.println("剩余时间: " + time);

            String s = jedis.type("key1");
            System.out.println("类型: " + s);


        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

3.String类型的命令

mset和mget

java 复制代码
try (Jedis jedis = jedisPool.getResource()) {
            System.out.println("mget 和 mset的使用");
            jedis.flushAll();

            jedis.mset("key1","11","key2","22", "key3","33");

            List<String> list = jedis.mget("key1","key2","key3");
            System.out.println("value: " + list);

        }

getrange和setrange

java 复制代码
try (Jedis jedis = jedisPool.getResource()) {
            System.out.println("getrange 和 setrange的使用");
            jedis.flushAll();

            jedis.set("key1","asasdsadsaasd");

            String value = jedis.getrange("key1",2,5);
            System.out.println("value: " + value);

            jedis.setrange("key1",2,"123");
            String value1 = jedis.get("key1");
            System.out.println("value1: " + value1);
        }

incr、decr 和 append

java 复制代码
try (Jedis jedis = jedisPool.getResource()) {
            System.out.println("append 、incr 和 decr 的使用");
            jedis.flushAll();

            jedis.set("key1","abcdefg");
            jedis.append("key1","123456");
            String value = jedis.get("key1");
            System.out.println("value: " + value);


            jedis.set("key2","100");

            long result = jedis.incr("key2");
            System.out.println("result : " + result);

            String value2 = jedis.get("key2");
            System.out.println("value2: " + value2);

            result = jedis.decr("key2");
            System.out.println("result : " + result);

            value2 = jedis.get("key2");
            System.out.println("value2: " + value2);
        }

4.List命令

lpush和lrange

java 复制代码
try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("lpush 和 lrange 的使用");
            jedis.flushAll();

            jedis.lpush("key1","111","222","333");

            List<String> result = jedis.lrange("key1",0,-1);
            System.out.println("result: " + result);
        }

rpush

java 复制代码
try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("lpush 和 lrange 的使用");
            jedis.flushAll();

            jedis.rpush("key1","111","222","333");

            List<String> result = jedis.lrange("key1",0,-1);
            System.out.println("result: " + result);
        }

lpop

java 复制代码
try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("lpop 的使用");
            jedis.flushAll();

            jedis.rpush("key1","111","222","333");

            String result = jedis.lpop("key1");
            System.out.println("result: " + result);
            result = jedis.lpop("key1");
            System.out.println("result: " + result);
            result = jedis.lpop("key1");
            System.out.println("result: " + result);
            result = jedis.lpop("key1");
            System.out.println("result: " + result);
        }

rpop

java 复制代码
try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("rpop 的使用");
            jedis.flushAll();

            jedis.rpush("key1","111","222","333");

            String result = jedis.rpop("key1");
            System.out.println("result: " + result);
            result = jedis.rpop("key1");
            System.out.println("result: " + result);
            result = jedis.rpop("key1");
            System.out.println("result: " + result);
            result = jedis.rpop("key1");
            System.out.println("result: " + result);
        }

llen

java 复制代码
try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("rpop 的使用");
            jedis.flushAll();

            jedis.rpush("key1","111","222","333");

            long result = jedis.llen("key1");
            System.out.println("result: " + result);
        }

brpop

java 复制代码
try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("brpop 的使用");
            jedis.flushAll();

            List<String> result = jedis.brpop(3,"key1");
            System.out.println("result[0]: " + result.get(0));
            System.out.println("result[1]: " + result.get(1));
        }

5.Set命令

smembers 和 sadd

java 复制代码
try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("sadd 和 smembers 使用");
            jedis.flushAll();

            jedis.sadd("key1","11","22","33");
            Set<String> result = jedis.smembers("key1");
            System.out.println("result: " + result);
        }

sismember

java 复制代码
try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("sismember 使用");
            jedis.flushAll();

            jedis.sadd("key1","11","22","33");
           boolean result = jedis.sismember("key1","11");
            System.out.println("result: " + result);
        }

scard

java 复制代码
try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("scard 使用");
            jedis.flushAll();

            jedis.sadd("key1","11","22","33");
            long result = jedis.scard("key1");
            System.out.println("result: " + result);
        }

spop

java 复制代码
try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("spop 使用");
            jedis.flushAll();

            jedis.sadd("key1","11","22","33");
            String result = jedis.spop("key1");
            System.out.println("result: " + result);
        }

sinter

java 复制代码
try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("sinter 使用");
            jedis.flushAll();

            jedis.sadd("key1","11","22","33");
            jedis.sadd("key2","11","22","44");
            Set<String> result = jedis.sinter("key1","key2");
            System.out.println("result: " + result);
        }

sinterstore

java 复制代码
try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("sinterstore 使用");
            jedis.flushAll();

            jedis.sadd("key1","11","22","33");
            jedis.sadd("key2","11","22","44");
            long result = jedis.sinterstore("key3","key1","key2");
            Set<String> result1 = jedis.smembers("key3");
            System.out.println("result: " + result);
            System.out.println("result1: " + result1);
        }

6.Hash命令

hget 和 hset

java 复制代码
try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("hset 和 hget的使用");
            jedis.flushAll();

            jedis.hset("key1","f1","11");
            HashMap<String,String> map = new HashMap<>();
            map.put("f2","22");
            map.put("f3","33");
            jedis.hset("key1",map);

            String result = jedis.hget("key1","f1");
            System.out.println("result: " + result);

            result = jedis.hget("key1","f2");
            System.out.println("result: " + result);


            result = jedis.hget("key1","f3");
            System.out.println("result: " + result);

            result = jedis.hget("key1","f4");
            System.out.println("result: " + result);

        }

hexists

java 复制代码
try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("hexists 的使用");
            jedis.flushAll();

            jedis.hset("key1","f1","11");
            HashMap<String,String> map = new HashMap<>();
            map.put("f2","22");
            map.put("f3","33");
            jedis.hset("key1",map);

            boolean result = jedis.hexists("key1","f1");
            System.out.println("result: " + result);

            result = jedis.hexists("key1","f1111");
            System.out.println("result: " + result);

        }

hdel

java 复制代码
try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("hdel 的使用");
            jedis.flushAll();

            jedis.hset("key1","f1","11");
            HashMap<String,String> map = new HashMap<>();
            map.put("f2","22");
            map.put("f3","33");
            jedis.hset("key1",map);

            long result = jedis.hdel("key1","f1");
            System.out.println("result: " + result);

            result = jedis.hdel("key1","f2","f3");
            System.out.println("result: " + result);

            result = jedis.hdel("key1","f1111");
            System.out.println("result: " + result);

        }

hkeys 和 hvals

java 复制代码
try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("hkeys 和 hvals 的使用");
            jedis.flushAll();

            jedis.hset("key1","f1","11");
            HashMap<String,String> map = new HashMap<>();
            map.put("f2","22");
            map.put("f3","33");
            jedis.hset("key1",map);

            Set<String> result = jedis.hkeys("key1");
            System.out.println("result: " + result);

            List<String> result1 = jedis.hvals("key1");
            System.out.println("result1: " + result1);
        }

hmget 和 hmset

java 复制代码
try(Jedis jedis = jedisPool.getResource()) {
            System.out.println("hmset 和 hmget 的使用");
            jedis.flushAll();

            HashMap<String,String> map = new HashMap<>();
            map.put("f1","11");
            map.put("f2","22");
            map.put("f3","33");
            jedis.hmset("key1",map);

            List<String> result = jedis.hmget("key1","f1","f2","f3");
            System.out.println("result: " + result);

        }

7.ZSet命令

zadd 、zrange和zrangewithscores

java 复制代码
try (Jedis jedis = jedisPool.getResource()) {
            System.out.println("zadd 和 zrange 的使用");
            jedis.flushAll();

            jedis.zadd("key1",10,"zhangsan");
            Map<String,Double> map = new HashMap<>();
            map.put("lisi",20.0);
            map.put("wangwu",30.0);
            jedis.zadd("key1",map);

            List<String> result = jedis.zrange("key1",0,-1);
            System.out.println("result: " + result);

            List<Tuple>result1 = jedis.zrangeWithScores("key1",0,-1);
            System.out.println("result1: " + result1);
			//拆分出来
            String member = result1.get(0).getElement();
            Double score = result1.get(0).getScore();
            System.out.println("member: " +member);
            System.out.println("score: " +score);
        }

zcard

java 复制代码
try (Jedis jedis = jedisPool.getResource()) {
            System.out.println("zcard 的使用");
            jedis.flushAll();

            jedis.zadd("key1",10,"zhangsan");
            Map<String,Double> map = new HashMap<>();
            map.put("lisi",20.0);
            map.put("wangwu",30.0);
            jedis.zadd("key1",map);

            long result = jedis.zcard("key1");
            System.out.println("result: " + result);


        }

zrem

java 复制代码
try (Jedis jedis = jedisPool.getResource()) {
            System.out.println("zrem 的使用");
            jedis.flushAll();

            jedis.zadd("key1",10,"zhangsan");
            Map<String,Double> map = new HashMap<>();
            map.put("lisi",20.0);
            map.put("wangwu",30.0);
            jedis.zadd("key1",map);

            long result = jedis.zrem("key1","zhangsan","lisi");
            System.out.println("result: " + result);

            List<Tuple> result1 = jedis.zrangeWithScores("key1",0,-1);
            System.out.println("result1: " + result1);
        }

zscore

java 复制代码
try (Jedis jedis = jedisPool.getResource()) {
            System.out.println("zscore 的使用");
            jedis.flushAll();

            jedis.zadd("key1",10,"zhangsan");
            Map<String,Double> map = new HashMap<>();
            map.put("lisi",20.0);
            map.put("wangwu",30.0);
            jedis.zadd("key1",map);

            Double result = jedis.zscore("key1","zhangsan");
            System.out.println("result: " + result);
        }

zrank

java 复制代码
try (Jedis jedis = jedisPool.getResource()) {
            System.out.println("zrank 的使用");
            jedis.flushAll();

            jedis.zadd("key1",10,"zhangsan");
            Map<String,Double> map = new HashMap<>();
            map.put("lisi",20.0);
            map.put("wangwu",30.0);
            jedis.zadd("key1",map);

            long result = jedis.zrank("key1","lisi");
            System.out.println("result: " + result);
        }

三.Spring客户端使用redis

1.redis的依赖

2.yml的配置文件

3. String类型命令

传递redis的文本数据需要注入一个对象(非常重要):

java 复制代码
@Autowired
    private StringRedisTemplate redisTemplate;

    @GetMapping("/testString")
    public String testString() {
        //redisTemplage将不同类型的方法进行了重新排放
        //插入元素
        redisTemplate.opsForValue().set("key1","111");
        redisTemplate.opsForValue().set("key2","222");
        redisTemplate.opsForValue().set("key2","333");
		//获取元素
        String value = redisTemplate.opsForValue().get("key1");
        System.out.println("value: " + value);

        return "ok";
    }

4.List类型

可以通过execute方法来使用redis原生的命令,在execute方法中再使用RedisCallback的函数接口就可以使用了。

java 复制代码
@GetMapping("/testList")
    public String testList() {
        //使用redis原来的命令
        redisTemplate.execute((RedisConnection connetion) -> {
        //清空数据库中的数据
            connetion.flushAll();
            return null;
        });
		//头插数据
        redisTemplate.opsForList().leftPush("key","111");
        redisTemplate.opsForList().leftPush("key","222");
        redisTemplate.opsForList().leftPush("key","333");
		
		//尾删数据
        String value = redisTemplate.opsForList().rightPop("key");
        System.out.println("value: " + value);

        value = redisTemplate.opsForList().rightPop("key");
        System.out.println("value: " + value);

        value = redisTemplate.opsForList().rightPop("key");
        System.out.println("value: " + value);

        return "ok";
    }

5.Set类型

java 复制代码
@GetMapping("/testSet")
    public String testSet() {
        //使用redis原来的命令
        redisTemplate.execute((RedisConnection connetion) -> {
            connetion.flushAll();
            return null;
        });
		//插入数据
        redisTemplate.opsForSet().add("key","111","222","333");
		//获取数据
        Set<String> value = redisTemplate.opsForSet().members("key");
        System.out.println("value: " + value);
		//数据是否存在
        Boolean exists = redisTemplate.opsForSet().isMember("key","111");
        System.out.println("exists: " + exists);
		//有几条数据
        long result = redisTemplate.opsForSet().size("key");
        System.out.println("count: " +result);
		//删除数据
        redisTemplate.opsForSet().remove("key","111","222");
		//获取当前数据个数
        value = redisTemplate.opsForSet().members("key");
        System.out.println("value: " + value);

        return "ok";
    }

6.Hash类型

java 复制代码
@GetMapping("/testHash")
    public String testHash() {
        //使用redis原来的命令
        redisTemplate.execute((RedisConnection connetion) -> {
            connetion.flushAll();
            return null;
        });
		//插入数据
        redisTemplate.opsForHash().put("key","f1","111");
        redisTemplate.opsForHash().put("key","f2","222");
        redisTemplate.opsForHash().put("key","f3","333");
		//获取数据
        String value = (String) redisTemplate.opsForHash().get("key","f1");
        System.out.println("value: " + value);
		//判断数据是否存在
        Boolean exists = redisTemplate.opsForHash().hasKey("key","f1");
        System.out.println("exists: " + exists);
		//删除数据
        redisTemplate.opsForHash().delete("key","f1","f2");
		//有几条数据
        long result = redisTemplate.opsForHash().size("key");
        System.out.println("count: " +result);

        return "ok";
    }

7.ZSet类型

java 复制代码
@GetMapping("/testZSet")
    public String testZSet() {
        //使用redis原来的命令
        redisTemplate.execute((RedisConnection connetion) -> {
            connetion.flushAll();
            return null;
        });
        //插入数据
        redisTemplate.opsForZSet().add("key","zhangsan",10);
        redisTemplate.opsForZSet().add("key","lisi",20);
        redisTemplate.opsForZSet().add("key","wangwu",30);

		//获取数据
        Set<String> value = redisTemplate.opsForZSet().range("key",0,-1);
        System.out.println("value: " + value);
	   //获取数据
        Set<ZSetOperations.TypedTuple<String>>value1 = redisTemplate.opsForZSet().rangeWithScores("key",0,-1);
        System.out.println("value1: " + value1);
		//获取member的score
        Double result = redisTemplate.opsForZSet().score("key","zhangsan");
        System.out.println("count: " +result);
		//删除数据
        redisTemplate.opsForZSet().remove("key","zhangsan");
		//获取数据长度
        Long size = redisTemplate.opsForZSet().size("key");
        System.out.println("size: " + size);
		//获取数据排行
        Long rank =  redisTemplate.opsForZSet().rank("key","lisi");
        System.out.println("rank: " + rank);
        return "ok";
    }
相关推荐
Amd7942 小时前
FastAPI中Pydantic异步分布式唯一性校验
redis·fastapi·分布式锁·多级缓存·pydantic·唯一性校验·异步校验
J不A秃V头A5 小时前
Redis批量操作详解
开发语言·redis
Y第五个季节9 小时前
Redis - 概述
redis
西木Qi9 小时前
Redis数据迁移同步
数据库·redis·缓存
快来卷java12 小时前
深入剖析雪花算法:分布式ID生成的核心方案
java·数据库·redis·分布式·算法·缓存·dreamweaver
2301_7623179414 小时前
String数据结构之验证码实战
redis
天上掉下来个程小白16 小时前
Redis-13.在Java中操作Redis-Spring Data Redis使用方式-操作哈希类型的数据
java·spring boot·redis·spring·苍穹外卖
Chandler2416 小时前
Redis:哨兵机制
数据库·redis·缓存
Komorebi.py16 小时前
Web-ssrfme:redis 未授权访问攻击
redis·安全·ssrf