使用 jedis 操作 Redis

本文深入探讨Redis的五种数据类型:String、List、Hash、Set、ZSet,通过具体代码示例展示如何在Java环境中操作这些类型,强调了使用Redis时设置过期时间的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Maven 依赖
	<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.9.0</version>
	</dependency>
Redis 使用场景

目前自己所接触到的使用Redis的场景:

  1. 计数器
  2. 读多写少

重要的事情说三遍:
使用 Redis 一定要设置过期时间!!!
使用 Redis 一定要设置过期时间!!!
使用 Redis 一定要设置过期时间!!!

Redis 分为以下五种类型:
String(字符串)、List(链表)、Hash(hash)、Set(集合)、ZSet(有序集合)

具体的操作代码如下:

我使用的docker运行redis,并且没有设置密码,如果添加了密码可以使用

jedis.auth(yourpassword)

public class RedisUtils {

    private static Jedis jedis;
    static {
        jedis = new Jedis("localhost", 6379);
        // jedis.auth("123456");
    }

    public static Jedis getJedisConn() {
        return jedis;
    }

    /**
     * @param key
     * @param value
     * @return
     */
    public static String set(String key, String value) {
        return jedis.set(key, value);
    }

    /**
     * @param key
     * @param value
     * @param time
     * @return
     */
    public static String setExpire(String key, String value, long time) {
        return jedis.set(key, value, "NX", "EX", time);
    }

    /**
     * 根据 key 获取 value
     * 
     * @param key
     * @return
     */
    public static String get(String key) {
        return jedis.get(key);
    }

    public static void main(String[] args) {
        System.out.println("--------------------------  测试 String -------------------------------");
        testString();

        System.out.println("--------------------------  测试 List -------------------------------");
        testList();

        System.out.println("--------------------------  测试 Set -------------------------------");
        testSet();

        System.out.println("--------------------------  测试 Hash -------------------------------");
        testHash();

        System.out.println("--------------------------  测试 Zset -------------------------------");
        testZset();

    }

    private static void testHash() {
        // 添加数据
        jedis.hset("hkey1", "fkey1", "1");
        jedis.hset("hkey1", "fkey2", "2");
        jedis.hset("hkey1", "fkey3", "3");
        System.out.println(jedis.hget("hkey1", "fkey2"));
        System.out.println(jedis.hgetAll("hkey1"));
        // 删除
        jedis.hdel("hkey1", "fkey2");
        System.out.println(jedis.hget("hkey1", "fkey2"));
        System.out.println(jedis.hgetAll("hkey1"));
    }

    private static void testZset() {
        // 添加数据
        jedis.zadd("zkey1", 1, "zfkey1");
        jedis.zadd("zkey1", 3, "zfkey3");
        jedis.zadd("zkey1", 2, "zfkey2");
        jedis.zadd("zkey1", 5, "zfkey5");
        jedis.zadd("zkey1", 4, "zfkey4");
        // 获取 set 中的 所有元素
        System.out.println(jedis.zrange("zkey1", 0, -1));
        // 按照分数获取 set 中的元素
        System.out.println(jedis.zrangeByScore("zkey1", 0, 2));
        jedis.zrem("zkey1", "zfkey3");
        System.out.println(jedis.zrange("zkey1", 0, -1));
    }

    private static void testSet() {
        jedis.del("skey1");
        // 向 set 中添加元素
        jedis.sadd("skey1", "6", "2", "3", "4", "2", "6");
        System.out.println(jedis.smembers("skey1"));
        // 检查元素是否存在
        System.out.println(jedis.sismember("skey1", "3"));
        System.out.println(jedis.sismember("skey1", "9"));
        // 移除元素
        jedis.srem("skey1", "2");
        System.out.println(jedis.sismember("skey1", "2"));
    }

    public static void testList() {
        jedis.del("lkey1");
        // 集合添加元素
        jedis.lpush("lkey1", "1", "2", "3", "4");
        // 按索引获取值(注意是倒序)
        System.out.println("list:" + jedis.lindex("lkey1", 0));
        // 获取集合的长度
        System.out.println(jedis.llen("lkey1"));
        // 弹出集合中的元素,弹出后集合中不在包含该元素
        String pop = jedis.lpop("lkey1");
        while (pop != null) {
            System.out.print(pop);
            System.out.print(" ");
            pop = jedis.lpop("lkey1");
        }
        System.out.println();

    }

    public static void testString() {
        // 设置 String 类型
        jedis.set("test", "hello");
        System.out.println(jedis.get("test"));
        // 在字符串后面直接添加
        jedis.append("test", " world .");
        System.out.println(jedis.get("test"));
        // 删除操作
        jedis.del("test");
        System.out.println(jedis.get("test"));
        // 测试一下 NX | XX
        // NX|XX, NX -- Only set the key if it does not already exist. XX --
        // Only set the key
        // if it already exist.
        jedis.set("test", "hello world", "NX", "EX", 1000);
        System.out.println(jedis.get("test"));
        jedis.set("test", "hello world!", "XX", "EX", 1000);
        System.out.println(jedis.get("test"));
        // 批量添加
        jedis.mset("test1", "value1", "test2", "value2");
        System.out.println(jedis.get("test1"));
        System.out.println(jedis.get("test2"));
        // incr 使用 可以在计数器时使用
        jedis.set("test:num", "1");
        System.out.println(jedis.get("test:num"));
        jedis.incr("test:num");
        System.out.println(jedis.get("test:num"));
        // 按步长累计
        jedis.incrBy("test:num", 5);
        System.out.println(jedis.get("test:num"));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值