<span style="font-size: 18px"><span style="font-family: arial, "宋体", sans-serif; color: rgba(51, 51, 51, 1); line-height: 24px; text-indent: 28px">Redis是一个开源的使用ANSI </span><a href="http://baike.baidu.com/item/C%E8%AF%AD%E8%A8%80" rel="noopener nofollow" style="color: rgba(19, 110, 194, 1); text-decoration: none; font-family: arial, "宋体", sans-serif; line-height: 24px; text-indent: 28px">C语言</a><span style="font-family: arial, "宋体", sans-serif; color: rgba(51, 51, 51, 1); line-height: 24px; text-indent: 28px">编写、支持网络、可基于内存亦可持久化的日志型、Key-Value</span><a href="http://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93" rel="noopener nofollow" style="color: rgba(19, 110, 194, 1); text-decoration: none; font-family: arial, "宋体", sans-serif; line-height: 24px; text-indent: 28px">数据库</a><span style="font-family: arial, "宋体", sans-serif; color: rgba(51, 51, 51, 1); line-height: 24px; text-indent: 28px">,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。</span><br></span><p style="text-indent: 28px"><span style="font-family: arial, "宋体", sans-serif; font-size: 18px; color: rgba(51, 51, 51, 1)"><span style="line-height: 24px"> 这里就不将redis是怎么安装和配置的了,大家自行在CSDN的其他博客看看,这个博客主要分享的是,Java使用jedis库去操作redis。本篇涉及了redis的5种基本数据类型的最基本操作:string、list、set、hash、zset,以及简单的redis消息队列的使用。</span></span></p><p style="text-indent: 28px"><span style="font-family: arial, "宋体", sans-serif; font-size: 18px; color: rgba(51, 51, 51, 1)"><span style="line-height: 24px"> jedis是官方推荐的,使用java操作redis的类库,目前官网的最新稳定版是2.9,推荐大家使用maven或者gradle去构建项目,maven所需的jedis的依赖如下</span></span></p><p style="text-indent: 28px"><span style="font-family: arial, "宋体", sans-serif; font-size: 18px; color: rgba(51, 51, 51, 1)"><span style="line-height: 24px"></span></span></p><div class="dp-highlighter bg_html"><div class="bar"><div class="tools"><strong>[html]</strong> <a href="https://blog.csdn.net/z23546498/article/details/73556260#" rel="noopener nofollow" class="ViewSource" title="view plain">view plain</a><span> <a href="https://blog.csdn.net/z23546498/article/details/73556260#" rel="noopener nofollow" class="CopyToClipboard" title="copy">copy</a></span><span> </span></div></div><ol start="1" class="dp-xml"><li class="alt"><span><span class="tag"><</span><span class="tag-name">dependency</span><span class="tag">></span><span> </span></span></li><li><span> <span class="tag"><</span><span class="tag-name">groupId</span><span class="tag">></span><span>redis.clients</span><span class="tag"></</span><span class="tag-name">groupId</span><span class="tag">></span><span> </span></span></li><li class="alt"><span> <span class="tag"><</span><span class="tag-name">artifactId</span><span class="tag">></span><span>jedis</span><span class="tag"></</span><span class="tag-name">artifactId</span><span class="tag">></span><span> </span></span></li><li><span> <span class="tag"><</span><span class="tag-name">version</span><span class="tag">></span><span>2.9.0</span><span class="tag"></</span><span class="tag-name">version</span><span class="tag">></span><span> </span></span></li><li class="alt"><span><span class="tag"></</span><span class="tag-name">dependency</span><span class="tag">></span><span> </span></span></li></ol></div><p style="text-indent: 28px"><span style="font-family: arial, "宋体", sans-serif; font-size: 18px; color: rgba(51, 51, 51, 1)"><span style="line-height: 24px"> </span></span></p><p style="text-indent: 28px"><span style="font-family: arial, "宋体", sans-serif; font-size: 18px; color: rgba(51, 51, 51, 1)"><span style="line-height: 24px"> 其实这个依赖只有3个jar包,jedis-2.9.0.jar,commons-pool-1.6.jar,commons-pool2-2.4.2.jar,后面的两个common的pool包,是配置jedis的连接池用的,如果不想使用连接池,那么只要导入<span style="font-family: arial, "宋体", sans-serif; font-size: 18px; color: rgba(51, 51, 51, 1); line-height: 24px; text-indent: 28px">jedis-2.9.0.jar就够了。</span></span></span></p><p style="text-indent: 28px"><span style="font-family: arial, "宋体", sans-serif; font-size: 18px; color: rgba(51, 51, 51, 1)"><span style="line-height: 24px"><span style="font-family: arial, "宋体", sans-serif; font-size: 18px; color: rgba(51, 51, 51, 1); line-height: 24px; text-indent: 28px"> 不多说了,直接上代码吧,jedis的这些api,和redis-cli命令是一样的,所以只要熟悉redis-cli的命令,那个jedis的api就可以驾轻就熟了。</span></span></span></p><p style="text-indent: 28px"><span style="font-family: arial, "宋体", sans-serif; font-size: 18px; color: rgba(51, 51, 51, 1)"><span style="line-height: 24px"><span style="font-family: arial, "宋体", sans-serif; font-size: 18px; color: rgba(51, 51, 51, 1); line-height: 24px; text-indent: 28px"><br></span></span></span></p><p style="text-indent: 28px"><span style="font-family: arial, "宋体", sans-serif; font-size: 18px; color: rgba(51, 51, 51, 1)"><span style="line-height: 24px"><span style="font-family: arial, "宋体", sans-serif; font-size: 18px; color: rgba(51, 51, 51, 1); line-height: 24px; text-indent: 28px"></span></span></span></p><div class="dp-highlighter bg_java"><div class="bar"><div class="tools"><strong>[java]</strong> <a href="https://blog.csdn.net/z23546498/article/details/73556260#" rel="noopener nofollow" class="ViewSource" title="view plain">view plain</a><span> <a href="https://blog.csdn.net/z23546498/article/details/73556260#" rel="noopener nofollow" class="CopyToClipboard" title="copy">copy</a></span><span> </span></div></div><ol start="1" class="dp-j"><li class="alt"><span><span class="keyword">import</span><span> java.util.HashMap; </span></span></li><li><span><span class="keyword">import</span><span> java.util.List; </span></span></li><li class="alt"><span><span class="keyword">import</span><span> java.util.Map; </span></span></li><li><span><span class="keyword">import</span><span> java.util.Set; </span></span></li><li class="alt"><span> </span></li><li><span><span class="keyword">import</span><span> redis.clients.jedis.Jedis; </span></span></li><li class="alt"><span><span class="keyword">import</span><span> redis.clients.jedis.JedisPool; </span></span></li><li><span><span class="keyword">import</span><span> redis.clients.jedis.JedisPoolConfig; </span></span></li><li class="alt"><span><span class="keyword">import</span><span> redis.clients.jedis.JedisPubSub; </span></span></li><li><span><span class="keyword">import</span><span> redis.clients.jedis.ZParams; </span></span></li><li class="alt"><span> </span></li><li><span><span class="comment">/**</span> </span></li><li class="alt"><span><span class="comment"> * redis常用api</span> </span></li><li><span><span class="comment"> * </span> </span></li><li class="alt"><span><span class="comment"> * @author Kazz</span> </span></li><li><span><span class="comment"> *</span> </span></li><li class="alt"><span><span class="comment"> */</span><span> </span></span></li><li><span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> RedisDemo { </span></span></li><li class="alt"><span> </span></li><li><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> JedisPool jedisPool = </span><span class="keyword">null</span><span>; </span></span></li><li class="alt"><span> </span></li><li><span> <span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> main(String[] args) </span><span class="keyword">throws</span><span> Exception { </span></span></li><li class="alt"><span> </span></li><li><span> <span class="comment">// 这个是最简单的redis连接示例,不过不推荐,推荐使用数据库连接池</span><span> </span></span></li><li class="alt"><span> <span class="comment">// Jedis jedis = new Jedis("192.168.8.128", 6379);// 连接 Redis 服务</span><span> </span></span></li><li><span> <span class="comment">// jedis.auth("123456"); // 设置密码</span><span> </span></span></li><li class="alt"><span> <span class="comment">// System.out.println("Server is running: " + jedis.ping());//</span><span> </span></span></li><li><span> <span class="comment">// 查看服务是否运行</span><span> </span></span></li><li class="alt"><span> </span></li><li><span> init(); </span></li><li class="alt"><span> string(); </span></li><li><span> </span></li><li class="alt"><span> list(); </span></li><li><span> </span></li><li class="alt"><span> set(); </span></li><li><span> </span></li><li class="alt"><span> sets(); </span></li><li><span> </span></li><li class="alt"><span> hash(); </span></li><li><span> </span></li><li class="alt"><span> zset(); </span></li><li><span> </span></li><li class="alt"><span> zsets(); </span></li><li><span> </span></li><li class="alt"><span> publisher(); </span></li><li><span> </span></li><li class="alt"><span> subscribe(); </span></li><li><span> } </span></li><li class="alt"><span> </span></li><li><span> <span class="comment">/**</span> </span></li><li class="alt"><span><span class="comment"> * 初始化redis连接池</span> </span></li><li><span><span class="comment"> */</span><span> </span></span></li><li class="alt"><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> init() { </span></span></li><li><span> JedisPoolConfig config = <span class="keyword">new</span><span> JedisPoolConfig(); </span><span class="comment">// Jedis连接池</span><span> </span></span></li><li class="alt"><span> config.setMaxIdle(<span class="number">8</span><span>); </span><span class="comment">// 最大空闲连接数</span><span> </span></span></li><li><span> config.setMaxTotal(<span class="number">8</span><span>);</span><span class="comment">// 最大连接数</span><span> </span></span></li><li class="alt"><span> config.setMaxWaitMillis(<span class="number">1000</span><span>); </span><span class="comment">// 获取连接是的最大等待时间,如果超时就抛出异常</span><span> </span></span></li><li><span> config.setTestOnBorrow(<span class="keyword">false</span><span>);</span><span class="comment">// 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;</span><span> </span></span></li><li class="alt"><span> config.setTestOnReturn(<span class="keyword">true</span><span>); </span></span></li><li><span> jedisPool = <span class="keyword">new</span><span> JedisPool(config, </span><span class="string">"192.168.8.128"</span><span>, </span><span class="number">6379</span><span>, </span><span class="number">5000</span><span>, </span><span class="string">"123456"</span><span>, </span><span class="number">0</span><span>); </span><span class="comment">// 配置、ip、端口、连接超时时间、密码、数据库编号(0~15)</span><span> </span></span></li><li class="alt"><span> } </span></li><li><span> </span></li><li class="alt"><span> <span class="comment">/**</span> </span></li><li><span><span class="comment"> * string类型的基本操作,string是redis的最基本数据类型,很多操作都是其他数据类型能用的,如del、exists、expire</span> </span></li><li class="alt"><span><span class="comment"> * </span> </span></li><li><span><span class="comment"> * @throws Exception</span> </span></li><li class="alt"><span><span class="comment"> * </span> </span></li><li><span><span class="comment"> */</span><span> </span></span></li><li class="alt"><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> string() </span><span class="keyword">throws</span><span> Exception { </span></span></li><li><span> Jedis jedis = jedisPool.getResource(); </span></li><li class="alt"><span> jedis.flushDB(); <span class="comment">// 清空数据库</span><span> </span></span></li><li><span> </span></li><li class="alt"><span> jedis.set(<span class="string">"testString"</span><span>, </span><span class="string">"123"</span><span>); </span><span class="comment">// 往redis中放入字符串</span><span> </span></span></li><li><span> System.out.println(<span class="string">"从redis中获取刚刚放进去的testString:"</span><span> + jedis.get(</span><span class="string">"testString"</span><span>)); </span></span></li><li class="alt"><span> </span></li><li><span> jedis.incr(<span class="string">"testString"</span><span>); </span><span class="comment">// 自增,不存在testInt则自增结果是1,如果不是字符串,自增会报JedisDataException</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"从redis中获取自增后的testString:"</span><span> + jedis.get(</span><span class="string">"testString"</span><span>)); </span></span></li><li><span> </span></li><li class="alt"><span> jedis.decr(<span class="string">"testString"</span><span>); </span><span class="comment">// 自减,效果同自增</span><span> </span></span></li><li><span> System.out.println(<span class="string">"从redis中获取自减后的testString:"</span><span> + jedis.get(</span><span class="string">"testString"</span><span>)); </span></span></li><li class="alt"><span> <span class="comment">// incrby方法可以自定要增加多少</span><span> </span></span></li><li><span> </span></li><li class="alt"><span> jedis.append(<span class="string">"testString"</span><span>, </span><span class="string">"456abcd"</span><span>); </span><span class="comment">// 在后面追加</span><span> </span></span></li><li><span> System.out.println(<span class="string">"从redis中获取追加后的testString:"</span><span> + jedis.get(</span><span class="string">"testString"</span><span>)); </span></span></li><li class="alt"><span> </span></li><li><span> String sub = jedis.substr(<span class="string">"testString"</span><span>, </span><span class="number">2</span><span>, </span><span class="number">6</span><span>); </span><span class="comment">// 切割字符串</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"substr方法的返回值:"</span><span> + sub); </span></span></li><li><span> System.out.println(<span class="string">"从redis中获取切割后的testString:"</span><span> + jedis.get(</span><span class="string">"testString"</span><span>)); </span><span class="comment">// 可以看出,substr方法并不会破坏原有值,只是取出来加工而已</span><span> </span></span></li><li class="alt"><span> </span></li><li><span> jedis.rename(<span class="string">"testString"</span><span>, </span><span class="string">"newString"</span><span>); </span><span class="comment">// 字段改名,值不会变</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"testString改名成newString后,值为:"</span><span> + jedis.get(</span><span class="string">"newString"</span><span>)); </span></span></li><li><span> </span></li><li class="alt"><span> String type = jedis.type(<span class="string">"newString"</span><span>);</span><span class="comment">// 获取其数据类型</span><span> </span></span></li><li><span> System.out.println(<span class="string">"newString的数据类型是:"</span><span> + type); </span></span></li><li class="alt"><span> </span></li><li><span> <span class="keyword">long</span><span> length = jedis.strlen(</span><span class="string">"newString"</span><span>); </span><span class="comment">// 获取字符串长度</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"newString的字符串长度为:"</span><span> + length); </span></span></li><li><span> </span></li><li class="alt"><span> jedis.set(<span class="string">"testString6"</span><span>, </span><span class="string">"哈哈"</span><span>); </span></span></li><li><span> jedis.set(<span class="string">"testString7"</span><span>, </span><span class="string">"呵呵"</span><span>); </span></span></li><li class="alt"><span> jedis.set(<span class="string">"testString8"</span><span>, </span><span class="string">"helloword"</span><span>); </span></span></li><li><span> jedis.set(<span class="string">"testString99"</span><span>, </span><span class="string">"SMSP"</span><span>); </span></span></li><li class="alt"><span> Set<String> keys = jedis.keys(<span class="string">"*"</span><span>); </span><span class="comment">// 获取所有符合条件的键</span><span> </span></span></li><li><span> System.out.println(<span class="string">"返回redis中所有的键:"</span><span> + keys); </span></span></li><li class="alt"><span> keys = jedis.keys(<span class="string">"*String?"</span><span>); </span></span></li><li><span> System.out.println(<span class="string">"返回redis中所有正则符合*String?的键:"</span><span> + keys); </span></span></li><li class="alt"><span> </span></li><li><span> jedis.del(<span class="string">"testString"</span><span>); </span><span class="comment">// 字符串删除</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"从redis删除testInt后,testInt是否还存在:"</span><span> + jedis.exists(</span><span class="string">"testString"</span><span>)); </span></span></li><li><span> System.out.println(); </span></li><li class="alt"><span> </span></li><li><span> jedis.set(<span class="string">"testString2"</span><span>, </span><span class="string">"你好啊!!!"</span><span>); </span></span></li><li class="alt"><span> jedis.expire(<span class="string">"testString2"</span><span>, </span><span class="number">2</span><span>); </span><span class="comment">// 设置有效期,单位是秒</span><span> </span></span></li><li><span> System.out.println(<span class="string">"从redis中获取testString2的值为:"</span><span> + jedis.get(</span><span class="string">"testString2"</span><span>)); </span></span></li><li class="alt"><span> Thread.sleep(<span class="number">3000</span><span>); </span></span></li><li><span> System.out.println(<span class="string">"3秒后从redis中获取testString2的值为:"</span><span> + jedis.get(</span><span class="string">"testString2"</span><span>)); </span><span class="comment">// 过期了,会找不到该字段,返回null</span><span> </span></span></li><li class="alt"><span> <span class="comment">// ttl方法可以返回剩余有效时间,expire如果方法不指定时间,就是将该字段有效期设为无限</span><span> </span></span></li><li><span> System.out.println(); </span></li><li class="alt"><span> System.out.println(); </span></li><li><span> jedis.close(); </span></li><li class="alt"><span> } </span></li><li><span> </span></li><li class="alt"><span> <span class="comment">/**</span> </span></li><li><span><span class="comment"> * list类的基本操作,有序可重复</span> </span></li><li class="alt"><span><span class="comment"> * </span> </span></li><li><span><span class="comment"> */</span><span> </span></span></li><li class="alt"><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> list() { </span></span></li><li><span> Jedis jedis = jedisPool.getResource(); </span></li><li class="alt"><span> jedis.flushDB(); <span class="comment">// 清空数据库</span><span> </span></span></li><li><span> </span></li><li class="alt"><span> <span class="comment">// 列表的插入与获取(可以重复)</span><span> </span></span></li><li><span> jedis.lpush(<span class="string">"testList"</span><span>, </span><span class="string">"Redis"</span><span>); </span><span class="comment">// 从左边插入</span><span> </span></span></li><li class="alt"><span> jedis.lpush(<span class="string">"testList"</span><span>, </span><span class="string">"Mongodb"</span><span>); </span></span></li><li><span> jedis.lpush(<span class="string">"testList"</span><span>, </span><span class="string">"Mysql"</span><span>); </span></span></li><li class="alt"><span> jedis.lpush(<span class="string">"testList"</span><span>, </span><span class="string">"Mysql"</span><span>); </span></span></li><li><span> jedis.rpush(<span class="string">"testList"</span><span>, </span><span class="string">"DB2"</span><span>); </span><span class="comment">// 从右边插入</span><span> </span></span></li><li class="alt"><span> </span></li><li><span> List<String> list = jedis.lrange(<span class="string">"testList"</span><span>, </span><span class="number">0</span><span>, -</span><span class="number">1</span><span>); </span><span class="comment">// 从左到右遍历,3个参数分别是,key,开始位置,结束位置(-1代表到最后)</span><span> </span></span></li><li class="alt"><span> <span class="keyword">for</span><span> (</span><span class="keyword">int</span><span> i = </span><span class="number">0</span><span>; i < list.size(); i++) { </span></span></li><li><span> System.out.printf(<span class="string">"从redis中获取刚刚放进去的testList[%d]: %s\n"</span><span>, i, list.get(i)); </span></span></li><li class="alt"><span> } </span></li><li><span> </span></li><li class="alt"><span> System.out.println(); </span></li><li><span> String lpop = jedis.lpop(<span class="string">"testList"</span><span>); </span><span class="comment">// 删掉最左边的那个</span><span> </span></span></li><li class="alt"><span> String rpop = jedis.rpop(<span class="string">"testList"</span><span>); </span><span class="comment">// 删掉最右边的那个</span><span> </span></span></li><li><span> System.out.printf(<span class="string">"被删的左边元素是:%s,被删的右边元素是:%s\n"</span><span>, lpop, rpop); </span></span></li><li class="alt"><span> </span></li><li><span> list = jedis.lrange(<span class="string">"testList"</span><span>, </span><span class="number">0</span><span>, -</span><span class="number">1</span><span>); </span></span></li><li class="alt"><span> <span class="keyword">for</span><span> (</span><span class="keyword">int</span><span> i = </span><span class="number">0</span><span>; i < list.size(); i++) { </span></span></li><li><span> System.out.printf(<span class="string">"从redis中获取被删除后的testList[%d]: %s\n"</span><span>, i, list.get(i)); </span></span></li><li class="alt"><span> } </span></li><li><span> </span></li><li class="alt"><span> System.out.println(); </span></li><li><span> jedis.ltrim(<span class="string">"testList"</span><span>, </span><span class="number">1</span><span>, </span><span class="number">2</span><span>); </span><span class="comment">// 裁剪列表,三个参数分别是,key,开始位置,结束位置</span><span> </span></span></li><li class="alt"><span> list = jedis.lrange(<span class="string">"testList"</span><span>, </span><span class="number">0</span><span>, -</span><span class="number">1</span><span>); </span></span></li><li><span> <span class="keyword">for</span><span> (</span><span class="keyword">int</span><span> i = </span><span class="number">0</span><span>; i < list.size(); i++) { </span></span></li><li class="alt"><span> System.out.printf(<span class="string">"从redis中获取被裁剪后的testList[%d]: %s\n"</span><span>, i, list.get(i)); </span></span></li><li><span> } </span></li><li class="alt"><span> </span></li><li><span> jedis.del(<span class="string">"testList"</span><span>); </span><span class="comment">// 删除列表</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"从redis删除testList后,testList是否还存在:"</span><span> + jedis.exists(</span><span class="string">"testList"</span><span>)); </span></span></li><li><span> System.out.println(); </span></li><li class="alt"><span> System.out.println(); </span></li><li><span> jedis.close(); </span></li><li class="alt"><span> } </span></li><li><span> </span></li><li class="alt"><span> <span class="comment">/**</span> </span></li><li><span><span class="comment"> * 集合类型的基本操作,无序不重复</span> </span></li><li class="alt"><span><span class="comment"> */</span><span> </span></span></li><li><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> set() { </span></span></li><li class="alt"><span> Jedis jedis = jedisPool.getResource(); </span></li><li><span> jedis.flushDB(); <span class="comment">// 清空数据库</span><span> </span></span></li><li class="alt"><span> </span></li><li><span> jedis.sadd(<span class="string">"testSet"</span><span>, </span><span class="string">"lida"</span><span>, </span><span class="string">"wch"</span><span>, </span><span class="string">"chf"</span><span>, </span><span class="string">"lxl"</span><span>, </span><span class="string">"wch"</span><span>); </span><span class="comment">// 添加元素,不可重复</span><span> </span></span></li><li class="alt"><span> </span></li><li><span> Set<String> set = jedis.smembers(<span class="string">"testSet"</span><span>); </span><span class="comment">// 获取集合中的全部元素</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"从testSet中获取的元素:"</span><span> + set); </span></span></li><li><span> </span></li><li class="alt"><span> <span class="keyword">long</span><span> length = jedis.scard(</span><span class="string">"testSet"</span><span>); </span><span class="comment">// 求集合的长度</span><span> </span></span></li><li><span> System.out.println(<span class="string">"\n获取testSet的长度:"</span><span> + length); </span></span></li><li class="alt"><span> System.out.println(); </span></li><li><span> </span></li><li class="alt"><span> jedis.srem(<span class="string">"testSet"</span><span>, </span><span class="string">"wch"</span><span>); </span><span class="comment">// 从testSet移除wch</span><span> </span></span></li><li><span> set = jedis.smembers(<span class="string">"testSet"</span><span>); </span></span></li><li class="alt"><span> System.out.println(<span class="string">"从testSet中获取移除后的的元素:"</span><span> + set); </span></span></li><li><span> System.out.println(); </span></li><li class="alt"><span> </span></li><li><span> <span class="keyword">boolean</span><span> exist = jedis.sismember(</span><span class="string">"testSet"</span><span>, </span><span class="string">"lida"</span><span>); </span><span class="comment">// 判断元素是否包含在该集合中</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"检查lida是否包含在testSet中:"</span><span> + exist); </span></span></li><li><span> System.out.println(); </span></li><li class="alt"><span> </span></li><li><span> String spop = jedis.spop(<span class="string">"testSet"</span><span>);</span><span class="comment">// 随机的移除spop中的一个元素,并返回它</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"testSet中被随机移除的元素是:"</span><span> + spop); </span></span></li><li><span> System.out.println(); </span></li><li class="alt"><span> </span></li><li><span> jedis.del(<span class="string">"testSet"</span><span>); </span><span class="comment">// 删除整个集合</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"删除后,testSet是否还是存在:"</span><span> + jedis.exists(</span><span class="string">"testSet"</span><span>)); </span></span></li><li><span> System.out.println(); </span></li><li class="alt"><span> System.out.println(); </span></li><li><span> </span></li><li class="alt"><span> jedis.close(); </span></li><li><span> } </span></li><li class="alt"><span> </span></li><li><span> <span class="comment">/**</span> </span></li><li class="alt"><span><span class="comment"> * 集合之间的运算,交集、并集、差集</span> </span></li><li><span><span class="comment"> */</span><span> </span></span></li><li class="alt"><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> sets() { </span></span></li><li><span> Jedis jedis = jedisPool.getResource(); </span></li><li class="alt"><span> jedis.flushDB(); <span class="comment">// 清空数据库</span><span> </span></span></li><li><span> jedis.sadd(<span class="string">"set1"</span><span>, </span><span class="string">"a"</span><span>, </span><span class="string">"b"</span><span>, </span><span class="string">"c"</span><span>, </span><span class="string">"d"</span><span>); </span></span></li><li class="alt"><span> jedis.sadd(<span class="string">"set2"</span><span>, </span><span class="string">"b"</span><span>, </span><span class="string">"c"</span><span>, </span><span class="string">"e"</span><span>); </span></span></li><li><span> </span></li><li class="alt"><span> Set<String> set = jedis.sdiff(<span class="string">"set1"</span><span>, </span><span class="string">"set2"</span><span>); </span><span class="comment">// 求两个集合的差集(只会返回存在于1,但2不存在的)</span><span> </span></span></li><li><span> System.out.println(<span class="string">"求出两个集合之间的差集:"</span><span> + set); </span><span class="comment">// 会输出a和d</span><span> </span></span></li><li class="alt"><span> <span class="comment">// 还有一个sdiffstore的api,可以把sdiff的计算结果赋值到另一个set中,下面的交集和并集也类似</span><span> </span></span></li><li><span> System.out.println(); </span></li><li class="alt"><span> </span></li><li><span> set = jedis.sinter(<span class="string">"set1"</span><span>, </span><span class="string">"set2"</span><span>); </span><span class="comment">// 求两个集合的交集</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"求出两个集合之间的交集:"</span><span> + set); </span><span class="comment">// 会输出b和c</span><span> </span></span></li><li><span> System.out.println(); </span></li><li class="alt"><span> </span></li><li><span> set = jedis.sunion(<span class="string">"set1"</span><span>, </span><span class="string">"set2"</span><span>); </span><span class="comment">// 求两个集合的并集</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"求出两个集合之间的并集:"</span><span> + set); </span></span></li><li><span> System.out.println(); </span></li><li class="alt"><span> System.out.println(); </span></li><li><span> </span></li><li class="alt"><span> jedis.close(); </span></li><li><span> } </span></li><li class="alt"><span> </span></li><li><span> <span class="comment">/**</span> </span></li><li class="alt"><span><span class="comment"> * 散列的基本操作,键值对里面还有键值对,经常用来存储多个字段信息,也可以理解为存放一个map,散列是redis的存储原型</span> </span></li><li><span><span class="comment"> */</span><span> </span></span></li><li class="alt"><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> hash() { </span></span></li><li><span> Jedis jedis = jedisPool.getResource(); </span></li><li class="alt"><span> jedis.flushDB(); <span class="comment">// 清空数据库</span><span> </span></span></li><li><span> </span></li><li class="alt"><span> Map<String, String> map = <span class="keyword">new</span><span> HashMap<String, String>(); </span></span></li><li><span> map.put(<span class="string">"k1"</span><span>, </span><span class="string">"v1"</span><span>); </span></span></li><li class="alt"><span> map.put(<span class="string">"k2"</span><span>, </span><span class="string">"v2"</span><span>); </span></span></li><li><span> map.put(<span class="string">"k3"</span><span>, </span><span class="string">"v3"</span><span>); </span></span></li><li class="alt"><span> map.put(<span class="string">"k4"</span><span>, </span><span class="string">"123"</span><span>); </span></span></li><li><span> jedis.hmset(<span class="string">"hash1"</span><span>, map); </span><span class="comment">// 存放一个散列</span><span> </span></span></li><li class="alt"><span> </span></li><li><span> Map<String, String> getMap = jedis.hgetAll(<span class="string">"hash1"</span><span>); </span><span class="comment">// 从redis中取回来</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"从redis中取回的hash1散列:"</span><span> + getMap.toString()); </span></span></li><li><span> System.out.println(); </span></li><li class="alt"><span> </span></li><li><span> List<String> hmget = jedis.hmget(<span class="string">"hash1"</span><span>, </span><span class="string">"k1"</span><span>, </span><span class="string">"k3"</span><span>); </span><span class="comment">// 从散列中取回一个或多个字段信息</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"从hash1散列中两个字段来看看:"</span><span> + hmget); </span></span></li><li><span> System.out.println(); </span></li><li class="alt"><span> </span></li><li><span> jedis.hdel(<span class="string">"hash1"</span><span>, </span><span class="string">"k1"</span><span>); </span><span class="comment">// 删除散列中的一个或者多个字段</span><span> </span></span></li><li class="alt"><span> getMap = jedis.hgetAll(<span class="string">"hash1"</span><span>); </span></span></li><li><span> System.out.println(<span class="string">"从redis中取回的被删除后的hash1散列:"</span><span> + getMap); </span></span></li><li class="alt"><span> System.out.println(); </span></li><li><span> </span></li><li class="alt"><span> <span class="keyword">long</span><span> length = jedis.hlen(</span><span class="string">"hash1"</span><span>); </span><span class="comment">// 求出集合的长度</span><span> </span></span></li><li><span> System.out.println(<span class="string">"散列hash1的长度为:"</span><span> + length); </span></span></li><li class="alt"><span> System.out.println(); </span></li><li><span> </span></li><li class="alt"><span> <span class="keyword">boolean</span><span> exists = jedis.hexists(</span><span class="string">"hash1"</span><span>, </span><span class="string">"k5"</span><span>); </span><span class="comment">// 判断某个字段是否存在于散列中</span><span> </span></span></li><li><span> System.out.println(<span class="string">"k5字段是否存在于散列中:"</span><span> + exists); </span></span></li><li class="alt"><span> System.out.println(); </span></li><li><span> </span></li><li class="alt"><span> Set<String> keys = jedis.hkeys(<span class="string">"hash1"</span><span>); </span><span class="comment">// 获取散列的所有字段名</span><span> </span></span></li><li><span> System.out.println(<span class="string">"hash1的所有字段名:"</span><span> + keys); </span></span></li><li class="alt"><span> System.out.println(); </span></li><li><span> </span></li><li class="alt"><span> List<String> values = jedis.hvals(<span class="string">"hash1"</span><span>); </span><span class="comment">// 获取散列的所有字段值,实质的方法实现,是用上面的hkeys后再用hmget</span><span> </span></span></li><li><span> System.out.println(<span class="string">"hash1的所有字段值:"</span><span> + values); </span></span></li><li class="alt"><span> System.out.println(); </span></li><li><span> </span></li><li class="alt"><span> jedis.hincrBy(<span class="string">"hash1"</span><span>, </span><span class="string">"k4"</span><span>, </span><span class="number">10</span><span>); </span><span class="comment">// 给散列的某个字段进行加法运算</span><span> </span></span></li><li><span> System.out.println(<span class="string">"执行加法运行后的hash1散列:"</span><span> + jedis.hgetAll(</span><span class="string">"hash1"</span><span>)); </span></span></li><li class="alt"><span> System.out.println(); </span></li><li><span> </span></li><li class="alt"><span> jedis.del(<span class="string">"hash1"</span><span>); </span><span class="comment">// 删除散列</span><span> </span></span></li><li><span> System.out.println(<span class="string">"删除hash1后,hash1是否还存在redis中:"</span><span> + jedis.exists(</span><span class="string">"hash1"</span><span>)); </span></span></li><li class="alt"><span> System.out.println(); </span></li><li><span> System.out.println(); </span></li><li class="alt"><span> </span></li><li><span> jedis.close(); </span></li><li class="alt"><span> } </span></li><li><span> </span></li><li class="alt"><span> <span class="comment">/**</span> </span></li><li><span><span class="comment"> * 有序集合的基本使用,zset是set的升级版,在无序的基础上,加入了一个权重,使其有序化<br/></span> </span></li><li class="alt"><span><span class="comment"> * 另一种理解,zset是hash的特殊版,一样的存放一些键值对,但这里的值只能是数字,不能是字符串<br/></span> </span></li><li><span><span class="comment"> * zset广泛应用于排名类的场景</span> </span></li><li class="alt"><span><span class="comment"> */</span><span> </span></span></li><li><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> zset() { </span></span></li><li class="alt"><span> Jedis jedis = jedisPool.getResource(); </span></li><li><span> jedis.flushDB(); <span class="comment">// 清空数据库</span><span> </span></span></li><li class="alt"><span> </span></li><li><span> Map<String, Double> map = <span class="keyword">new</span><span> HashMap<String, Double>(); </span></span></li><li class="alt"><span> map.put(<span class="string">"wch"</span><span>, </span><span class="number">24.3</span><span>); </span><span class="comment">// 这里以小组成员的年龄来演示</span><span> </span></span></li><li><span> map.put(<span class="string">"lida"</span><span>, </span><span class="number">30.0</span><span>); </span></span></li><li class="alt"><span> map.put(<span class="string">"chf"</span><span>, </span><span class="number">23.5</span><span>); </span></span></li><li><span> map.put(<span class="string">"lxl"</span><span>, </span><span class="number">22.1</span><span>); </span></span></li><li class="alt"><span> map.put(<span class="string">"wch"</span><span>, </span><span class="number">24.3</span><span>); </span><span class="comment">// 这个不会被加入,应该重复了</span><span> </span></span></li><li><span> </span></li><li class="alt"><span> jedis.zadd(<span class="string">"zset1"</span><span>, map); </span><span class="comment">// 添加一个zset</span><span> </span></span></li><li><span> </span></li><li class="alt"><span> Set<String> range = jedis.zrange(<span class="string">"zset1"</span><span>, </span><span class="number">0</span><span>, -</span><span class="number">1</span><span>); </span><span class="comment">// 从小到大排序,返回所有成员,三个参数:键、开始位置、结束位置(-1代表全部)</span><span> </span></span></li><li><span> <span class="comment">// zrange方法还有很多衍生的方法,如zrangeByScore等,只是多了一些参数和筛选范围而已,比较简单,自己看看api就知道了</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"zset返回的所有从小大到排序的成员:"</span><span> + range); </span></span></li><li><span> System.out.println(<span class="string">""</span><span>); </span></span></li><li class="alt"><span> </span></li><li><span> Set<String> revrange = jedis.zrevrange(<span class="string">"zset1"</span><span>, </span><span class="number">0</span><span>, -</span><span class="number">1</span><span>); </span><span class="comment">// 从大到小排序,类似上面的range</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"zset返回的所有排序的成员:"</span><span> + revrange); </span></span></li><li><span> System.out.println(<span class="string">""</span><span>); </span></span></li><li class="alt"><span> </span></li><li><span> <span class="keyword">long</span><span> length = jedis.zcard(</span><span class="string">"zset1"</span><span>); </span><span class="comment">// 求有效长度</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"zset1的长度:"</span><span> + length); </span></span></li><li><span> System.out.println(); </span></li><li class="alt"><span> </span></li><li><span> <span class="keyword">long</span><span> zcount = jedis.zcount(</span><span class="string">"zset1"</span><span>, </span><span class="number">22.1</span><span>, </span><span class="number">30.0</span><span>); </span><span class="comment">// 求出zset中,两个成员的排名之差,注意不是求长度,</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"zset1中,22.1和30.0差了"</span><span> + zcount + </span><span class="string">"名"</span><span>); </span></span></li><li><span> System.out.println(); </span></li><li class="alt"><span> </span></li><li><span> <span class="keyword">long</span><span> zrank = jedis.zrank(</span><span class="string">"zset1"</span><span>, </span><span class="string">"wch"</span><span>); </span><span class="comment">// 求出zset中某成员的排位,注意第一是从0开始的</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"wch在zset1中排名:"</span><span> + zrank); </span></span></li><li><span> System.out.println(); </span></li><li class="alt"><span> </span></li><li><span> <span class="keyword">double</span><span> zscore = jedis.zscore(</span><span class="string">"zset1"</span><span>, </span><span class="string">"lida"</span><span>); </span><span class="comment">// 获取zset中某成员的值</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"zset1中lida的值为:"</span><span> + zscore); </span></span></li><li><span> System.out.println(); </span></li><li class="alt"><span> </span></li><li><span> jedis.zincrby(<span class="string">"zset1"</span><span>, </span><span class="number">10</span><span>, </span><span class="string">"lxl"</span><span>); </span><span class="comment">// 给zset中的某成员做加法运算</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"zset1中lxl加10后,排名情况为:"</span><span> + jedis.zrange(</span><span class="string">"zset1"</span><span>, </span><span class="number">0</span><span>, -</span><span class="number">1</span><span>)); </span></span></li><li><span> System.out.println(); </span></li><li class="alt"><span> </span></li><li><span> jedis.zrem(<span class="string">"zset1"</span><span>, </span><span class="string">"chf"</span><span>); </span><span class="comment">// 删除zset中某个成员</span><span> </span></span></li><li class="alt"><span> <span class="comment">// zrem还有衍生的zremByScore和zremByRank,分别是删除某个分数区间和排名区间的成员</span><span> </span></span></li><li><span> System.out.println(<span class="string">"zset1删除chf后,剩下:"</span><span> + jedis.zrange(</span><span class="string">"zset1"</span><span>, </span><span class="number">0</span><span>, -</span><span class="number">1</span><span>)); </span></span></li><li class="alt"><span> System.out.println(); </span></li><li><span> </span></li><li class="alt"><span> jedis.close(); </span></li><li><span> } </span></li><li class="alt"><span> </span></li><li><span> <span class="comment">/**</span> </span></li><li class="alt"><span><span class="comment"> * 有序集合的运算,交集、并集(最小、最大、总和)</span> </span></li><li><span><span class="comment"> */</span><span> </span></span></li><li class="alt"><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> zsets() { </span></span></li><li><span> Jedis jedis = jedisPool.getResource(); </span></li><li class="alt"><span> jedis.flushDB(); <span class="comment">// 清空数据库</span><span> </span></span></li><li><span> </span></li><li class="alt"><span> Map<String, Double> map1 = <span class="keyword">new</span><span> HashMap<String, Double>(); </span></span></li><li><span> map1.put(<span class="string">"wch"</span><span>, </span><span class="number">24.3</span><span>); </span><span class="comment">// 这里以小组成员的年龄来演示</span><span> </span></span></li><li class="alt"><span> map1.put(<span class="string">"lida"</span><span>, </span><span class="number">30.0</span><span>); </span></span></li><li><span> map1.put(<span class="string">"chf"</span><span>, </span><span class="number">23.5</span><span>); </span></span></li><li class="alt"><span> map1.put(<span class="string">"lxl"</span><span>, </span><span class="number">22.1</span><span>); </span></span></li><li><span> </span></li><li class="alt"><span> Map<String, Double> map2 = <span class="keyword">new</span><span> HashMap<String, Double>(); </span></span></li><li><span> map2.put(<span class="string">"wch"</span><span>, </span><span class="number">24.3</span><span>); </span></span></li><li class="alt"><span> map2.put(<span class="string">"lly"</span><span>, </span><span class="number">29.6</span><span>); </span></span></li><li><span> map2.put(<span class="string">"chf"</span><span>, </span><span class="number">23.5</span><span>); </span></span></li><li class="alt"><span> map2.put(<span class="string">"zjl"</span><span>, </span><span class="number">21.3</span><span>); </span></span></li><li><span> </span></li><li class="alt"><span> jedis.zadd(<span class="string">"zset1"</span><span>, map1); </span></span></li><li><span> jedis.zadd(<span class="string">"zset2"</span><span>, map2); </span></span></li><li class="alt"><span> </span></li><li><span> System.out.println(<span class="string">"zset1的值有:"</span><span> + jedis.zrangeWithScores(</span><span class="string">"zset1"</span><span>, </span><span class="number">0</span><span>, -</span><span class="number">1</span><span>)); </span></span></li><li class="alt"><span> System.out.println(<span class="string">"zset2的值有:"</span><span> + jedis.zrangeWithScores(</span><span class="string">"zset2"</span><span>, </span><span class="number">0</span><span>, -</span><span class="number">1</span><span>)); </span></span></li><li><span> System.out.println(); </span></li><li class="alt"><span> </span></li><li><span> jedis.zinterstore(<span class="string">"zset_inter"</span><span>, </span><span class="string">"zset1"</span><span>, </span><span class="string">"zset2"</span><span>); </span><span class="comment">// 把两个集合进行交集运算,运算结果赋值到zset_inter中</span><span> </span></span></li><li class="alt"><span> System.out.println(<span class="string">"看看两个zset交集运算结果:"</span><span> + jedis.zrangeWithScores(</span><span class="string">"zset_inter"</span><span>, </span><span class="number">0</span><span>, -</span><span class="number">1</span><span>)); </span></span></li><li><span> </span></li><li class="alt"><span> jedis.zunionstore(<span class="string">"zset_union"</span><span>, </span><span class="string">"zset1"</span><span>, </span><span class="string">"zset2"</span><span>);</span><span class="comment">// 把两个集合进行并集运算,运算结果赋值到zset_union中</span><span> </span></span></li><li><span> System.out.println(<span class="string">"看看两个zset并集运算结果:"</span><span> + jedis.zrangeWithScores(</span><span class="string">"zset_union"</span><span>, </span><span class="number">0</span><span>, -</span><span class="number">1</span><span>)); </span></span></li><li class="alt"><span> System.out.println(<span class="string">"可以看出,zset的交集和并集计算,默认会把两个zset的score相加"</span><span>); </span></span></li><li><span> </span></li><li class="alt"><span> ZParams zParams = <span class="keyword">new</span><span> ZParams(); </span></span></li><li><span> zParams.aggregate(ZParams.Aggregate.MAX); </span></li><li class="alt"><span> jedis.zinterstore(<span class="string">"zset_inter"</span><span>, zParams, </span><span class="string">"zset1"</span><span>, </span><span class="string">"zset2"</span><span>); </span><span class="comment">// 通过指定ZParams来设置集合运算的score处理,有MAX MIN SUM三个可以选择,默认是SUM</span><span> </span></span></li><li><span> System.out.println(<span class="string">"看看两个zset交集max运算结果:"</span><span> + jedis.zrangeWithScores(</span><span class="string">"zset_inter"</span><span>, </span><span class="number">0</span><span>, -</span><span class="number">1</span><span>)); </span></span></li><li class="alt"><span> </span></li><li><span> <span class="comment">//zrangeWithScores返回的是一个Set<Tuple>类型,如果直接把这个集合打印出来,会把zset的key转成ascii码,看起来不直观,建议还是使用foreach之类的遍历会好看一些</span><span> </span></span></li><li class="alt"><span> </span></li><li><span> jedis.close(); </span></li><li class="alt"><span> } </span></li><li><span> </span></li><li class="alt"><span> <span class="comment">/**</span> </span></li><li><span><span class="comment"> * 发布消息,类似于mq的生产者</span> </span></li><li class="alt"><span><span class="comment"> */</span><span> </span></span></li><li><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> publisher() { </span></span></li><li class="alt"><span> </span></li><li><span> <span class="keyword">new</span><span> Thread() { </span></span></li><li class="alt"><span> <span class="keyword">public</span><span> </span><span class="keyword">void</span><span> run() { </span></span></li><li><span> <span class="keyword">try</span><span> { </span></span></li><li class="alt"><span> Thread.sleep(<span class="number">1000</span><span>); </span><span class="comment">// 休眠一下,让订阅者有充足的时间去连上</span><span> </span></span></li><li><span> Jedis jedis = jedisPool.getResource(); </span></li><li class="alt"><span> jedis.flushAll(); </span></li><li><span> </span></li><li class="alt"><span> <span class="keyword">for</span><span> (</span><span class="keyword">int</span><span> i = </span><span class="number">0</span><span>; i < </span><span class="number">10</span><span>; i++) { </span></span></li><li><span> jedis.publish(<span class="string">"channel"</span><span>, </span><span class="string">"要发送的消息内容"</span><span> + i); </span><span class="comment">// 每隔一秒推送一条消息</span><span> </span></span></li><li class="alt"><span> System.out.printf(<span class="string">"成功向channel推送消息:%s\n"</span><span>, i); </span></span></li><li><span> Thread.sleep(<span class="number">1000</span><span>); </span></span></li><li class="alt"><span> } </span></li><li><span> </span></li><li class="alt"><span> jedis.close(); </span></li><li><span> </span></li><li class="alt"><span> } <span class="keyword">catch</span><span> (Exception e) { </span></span></li><li><span> e.printStackTrace(); </span></li><li class="alt"><span> } </span></li><li><span> </span></li><li class="alt"><span> }; </span></li><li><span> }.start(); </span></li><li class="alt"><span> } </span></li><li><span> </span></li><li class="alt"><span> <span class="comment">/**</span> </span></li><li><span><span class="comment"> * 订阅消息,类似与mq的消费者</span> </span></li><li class="alt"><span><span class="comment"> * </span> </span></li><li><span><span class="comment"> */</span><span> </span></span></li><li class="alt"><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> subscribe(){ </span></span></li><li><span> Jedis jedis = jedisPool.getResource(); </span></li><li class="alt"><span> jedis.flushAll(); </span></li><li><span> JedisListener listener = <span class="keyword">new</span><span> JedisListener(); </span></span></li><li class="alt"><span> listener.proceed(jedis.getClient(), <span class="string">"channel"</span><span>); </span><span class="comment">// 开始监听channel频道的消息</span><span> </span></span></li><li><span> <span class="comment">//listener.unsubscribe(); //取消监听</span><span> </span></span></li><li class="alt"><span> jedis.close(); </span></li><li><span> } </span></li><li class="alt"><span> </span></li><li><span> <span class="comment">/**</span> </span></li><li class="alt"><span><span class="comment"> * 重写监听器的一些重要方法,JedisPubSub里面的这些回调方法都是空的,不重写就什么事都不会发生</span> </span></li><li><span><span class="comment"> * </span> </span></li><li class="alt"><span><span class="comment"> * @author Kazz</span> </span></li><li><span><span class="comment"> *</span> </span></li><li class="alt"><span><span class="comment"> */</span><span> </span></span></li><li><span> <span class="keyword">private</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">class</span><span> JedisListener </span><span class="keyword">extends</span><span> JedisPubSub { </span></span></li><li class="alt"><span> </span></li><li><span> <span class="comment">/**</span> </span></li><li class="alt"><span><span class="comment"> * 收到消息后的回调</span> </span></li><li><span><span class="comment"> */</span><span> </span></span></li><li class="alt"><span> <span class="annotation">@Override</span><span> </span></span></li><li><span> <span class="keyword">public</span><span> </span><span class="keyword">void</span><span> onMessage(String channel, String message) { </span></span></li><li class="alt"><span> System.out.println(<span class="string">"onMessage: 收到频道["</span><span> + channel + </span><span class="string">"]的消息["</span><span> + message + </span><span class="string">"]"</span><span>); </span></span></li><li><span> } </span></li><li class="alt"><span> </span></li><li><span> <span class="annotation">@Override</span><span> </span></span></li><li class="alt"><span> <span class="keyword">public</span><span> </span><span class="keyword">void</span><span> onPMessage(String pattern, String channel, String message) { </span></span></li><li><span> System.out.println(<span class="string">"onPMessage: channel["</span><span> + channel + </span><span class="string">"], message["</span><span> + message + </span><span class="string">"]"</span><span>); </span></span></li><li class="alt"><span> } </span></li><li><span> </span></li><li class="alt"><span> <span class="comment">/**</span> </span></li><li><span><span class="comment"> * 成功订阅频道后的回调</span> </span></li><li class="alt"><span><span class="comment"> */</span><span> </span></span></li><li><span> <span class="annotation">@Override</span><span> </span></span></li><li class="alt"><span> <span class="keyword">public</span><span> </span><span class="keyword">void</span><span> onSubscribe(String channel, </span><span class="keyword">int</span><span> subscribedChannels) { </span></span></li><li><span> System.out </span></li><li class="alt"><span> .println(<span class="string">"onSubscribe: 成功订阅["</span><span> + channel + </span><span class="string">"],"</span><span> + </span><span class="string">"subscribedChannels["</span><span> + subscribedChannels + </span><span class="string">"]"</span><span>); </span></span></li><li><span> } </span></li><li class="alt"><span> </span></li><li><span> <span class="comment">/**</span> </span></li><li class="alt"><span><span class="comment"> * 取消订阅频道的回调</span> </span></li><li><span><span class="comment"> */</span><span> </span></span></li><li class="alt"><span> <span class="annotation">@Override</span><span> </span></span></li><li><span> <span class="keyword">public</span><span> </span><span class="keyword">void</span><span> onUnsubscribe(String channel, </span><span class="keyword">int</span><span> subscribedChannels) { </span></span></li><li class="alt"><span> System.out.println( </span></li><li><span> <span class="string">"onUnsubscribe: 成功取消订阅["</span><span> + channel + </span><span class="string">"], "</span><span> + </span><span class="string">"subscribedChannels["</span><span> + subscribedChannels + </span><span class="string">"]"</span><span>); </span></span></li><li class="alt"><span> } </span></li><li><span> </span></li><li class="alt"><span> <span class="annotation">@Override</span><span> </span></span></li><li><span> <span class="keyword">public</span><span> </span><span class="keyword">void</span><span> onPUnsubscribe(String pattern, </span><span class="keyword">int</span><span> subscribedChannels) { </span></span></li><li class="alt"><span> System.out.println( </span></li><li><span> <span class="string">"onPUnsubscribe: pattern["</span><span> + pattern + </span><span class="string">"],"</span><span> + </span><span class="string">"subscribedChannels["</span><span> + subscribedChannels + </span><span class="string">"]"</span><span>); </span></span></li><li class="alt"><span> } </span></li><li><span> </span></li><li class="alt"><span> <span class="annotation">@Override</span><span> </span></span></li><li><span> <span class="keyword">public</span><span> </span><span class="keyword">void</span><span> onPSubscribe(String pattern, </span><span class="keyword">int</span><span> subscribedChannels) { </span></span></li><li class="alt"><span> System.out.println( </span></li><li><span> <span class="string">"onPSubscribe: pattern["</span><span> + pattern + </span><span class="string">"], "</span><span> + </span><span class="string">"subscribedChannels["</span><span> + subscribedChannels + </span><span class="string">"]"</span><span>); </span></span></li><li class="alt"><span> } </span></li><li><span> </span></li><li class="alt"><span> } </span></li><li><span>} <br></span></li></ol></div>