目录
三、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)