Redis基础学习(发布与订阅。Jedis的使用)

发布于:2025-07-13 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

一、Redis的发布和订阅。

(1)基本介绍。

(2)常用命令。

二、Redis新的三种基本数据类型。

三、Jedis使用的基本步骤。(java开发的操作redis的工具包)


一、Redis的发布和订阅。

(1)基本介绍。
  • redis 发布订阅( pub/sub )是一种消息通信模式:发布者( pub )发布消息,订阅者( sub )接收消息。
  • redis客户端可以订阅任意数量的频道。

  • 客户端订阅频道。


  • 从频道发送消息,消息就会发送给订阅频道的客户端。

(2)常用命令。
  • 核心点:subscribe与publish。
命令 基本介绍
subscribe channel [channel1 channel2 ...] 订阅一个频道channel或多个频道
publish channel message
将信息message发送到指定的频道channel 。
psubscribe pattern
[pattern1 pattern2]
(如:psubscribe pattern xx.* yy.*)

同时订阅一个或多个的符合给定匹配模式的频道。

所有的模式以*作为匹配符,it* 匹配所有以it开头的频道( it.news 、 it.blog等)

  • 演示psubscribe pattern 。

二、Redis新的三种基本数据类型。

  • bitmaps。(位操作字符串)


  • hyperloglog。(基数统计。不会存储元素本身)


  • geographic。(地理信息记录:经纬度、距离等)

三、Jedis使用的基本步骤。(java开发的操作redis的工具包)

  • 导入依赖。(Java的普通maven项目即可)
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>5.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.11.4</version>
    <scope>test</scope>
</dependency>
  • 使用redis的对应api操作redis常用命令。
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;

import java.util.concurrent.TimeUnit;

/**
 * 测试redis的api
 */
public class JedisDemo {
    private Jedis jedis;

    /**
     * 初始化jedis
     * @BeforeEach :每个测试方法(被@Test注解的方法 )执行之前都会执行一次该方法,用于初始化每个测试方法所需的资源
     */
    @BeforeEach
    public void before() {
        this.jedis = new Jedis("127.0.0.1", 6379);
    }

    @Test
    public void test() {
        String ping = jedis.ping();  //测试redis是否连接成功
        System.out.println(ping);
    }

    /**
     * String类型测试
     */
    @Test
    public void testString() {
        jedis.del("username");
        jedis.set("username", "admin");
        System.out.println("名称:"+jedis.get("username"));
        System.out.println("ttl:"+jedis.ttl("username"));  //返回-1表示永不过期
    }

    /**
     * List列表测试
     */
    @Test
    public void testList() {
        jedis.del("list");
        jedis.lpush("list", "1", "2", "3");
        System.out.println("list:"+jedis.lrange("list", 0, -1));
        //
        jedis.del("name");
        jedis.rpush("name","aaa","bbb","ccc","ddd");
        System.out.println("name:"+jedis.lrange("name", 0, -1));
        System.out.println("弹出:"+jedis.lpop("name"));
        System.out.println("name:"+jedis.lrange("name", 0, -1));
    }

    /**
     * Set集合测试
     */
    @Test
    public void testSet() {
        jedis.del("demo");
        jedis.sadd("demo", "1", "2", "3","2");//自动去重
        System.out.println("demo:"+jedis.smembers("demo"));
    }

    /**
     * Hash集合测试
     */
    @Test
    public void testHash() {
        jedis.del("user");
        jedis.hset("user","username","admin");
        jedis.hset("user","pwd","123456");
        System.out.println("user:"+jedis.hgetAll("user"));
        System.out.println("username:"+jedis.hget("user","username")); //获取某个字段的值
        System.out.println("allValues:"+jedis.hvals("user"));//获取所有值
    }

    /**
     * 测试有序set
     */
    @Test
    public void testZSet() {
        jedis.del("zset");
        jedis.zadd("zset", 100, "java");
        jedis.zadd("zset", 90, "C++");
        jedis.zadd("zset", 55, "python");
        jedis.zadd("zset", 30, "C");
        jedis.zadd("zset", 40, "php");
        System.out.println("zset:"+jedis.zrange("zset", 0, -1)); //默认升序
        System.out.println("zset:"+jedis.zrevrange("zset", 0, -1));  //降序
        System.out.println("zset:"+jedis.zrangeByScore("zset", 40, 90)); //获取指定分数区间的元素
    }

    /**
     * 测试订阅频道
     */
    @Test
    public void testSubscribe() throws InterruptedException {
        jedis.subscribe(new JedisPubSub() {
            @Override
            public void onMessage(String channel, String message) {
                System.out.println("channel:"+channel+" message:"+message); //订阅的频道和消息
            }
        }, "channel1", "channel2");
        TimeUnit.SECONDS.sleep(5); //休眠5秒
    }

    /**
     * 测试发布订阅
     */
    @Test
    public void testPubSub() {
        jedis.publish("channel1", "hello");
        jedis.publish("channel2", "world");
        jedis.publish("channel1", "JAVA");
    }

    @AfterEach
    public void after() {
        this.jedis.close();
    }
}
  • String类型测试结果。

  • List类型测试结果。

  • Set类型测试结果。

  • Hash类型测试结果。

  • ZSet类型测试结果。

  • 订阅频道。接收频道信息。(subscribe)


  • 从指定频道发送信息。(publish)


网站公告

今日签到

点亮在社区的每一天
去签到