redis02
客户端的使用
jedis
maven
1 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> 2 <dependency> 3 <groupId>redis.clients</groupId> 4 <artifactId>jedis</artifactId> 5 <version>2.9.0</version> 6 </dependency>
jedis直连
jedis连接前
1.注释绑定信息
#bind 127.0.0.1
2.关闭保护模式
protected-mode no
redis3.2版本后新增protected-mode配置,默认是yes,即开启。设置外部网络连接redis服务,设置方式如下:
1、关闭protected-mode模式,此时外部网络可以直接访问
2、开启protected-mode保护模式,需配置bind ip或者设置访问密码
3.关闭防火墙
1 @Test 2 public void test1() throws Exception { 3 22 23 24 // Jedis jedis = new Jedis("192.168.239.149",6379); 25 // jedis.auth("redis"); 26 // 27 // //选择操作的数据库 28 // 29 // jedis.select(1); 30 // jedis.set("welcome", "北京"); 31 // jedis.hset("user:1001", "username", "gyf"); 32 // jedis.lpush("team", "韩国","日本"); 33 // jedis.sadd("NBA", "利物浦"); 34 // 35 // 36 // jedis.zadd("english:scoreboard", 90,"张三"); 37 // jedis.zadd("english:scoreboard", 89,"lisi"); 38 // jedis.zadd("english:scoreboard", 88,"wangwu"); 39 // 40 // //取数据 41 // System.out.println(jedis.get("welcome")); 42 // 43 // jedis.close(); 44 45 }
1 @Test 2 public void testJedisPool() { 3 //创建一连接池对象 4 JedisPool jedisPool = new JedisPool("192.168.239.149", 6379); 5 //从连接池中获得连接 6 Jedis jedis = jedisPool.getResource(); 7 String result = jedis.get("mytest"); 8 System.out.println(result); 9 //关闭连接 10 jedis.close(); 11 12 //关闭连接池 13 jedisPool.close(); 14 }
客户端超时不一定是慢查询,但是慢查询时是客户端超时的一个可能因素
配置
slowlog-max-len
它决定了慢查询日志最多能保存多少条日志,slow log本身是一个内存中的FIFO队列,当队列大小超过slowlog-max-len时,最旧的一条日志将被删除,而最新的一条日志加入到slow log中。
默认值:128
支持动态配置
slowlog-log-slower-than
它决定要对执行时间大于多少微妙(microsecond , 1秒=1,000,000 微妙)的查询进行记录
默认值:10000
slowlog-log-slower-than = 0 ,记录所有命令
slowlog-log-slower-than < 0 , 不记录任何命令
支持动态配置
命令
1 slowlog get [n] 2 3 获取慢查询列表中的慢查询信息 4 获取出多少条慢查询数据信息 5 6 slowlog len 7 8 获取慢查询队列长度 9 10 slowlog reset 11 12 清空慢查询队列
注:
slowlog-log-slower-than不要设置过大,默认10ms,通常设置1ms
因为Redis的qps是万级别的,即每秒应能执行10000次请求
当一条命令执行1ms时,那每秒只能执行1000次请求
slowlog-max-len不要设置地过小,通常设置1000左右
需要理解命令的生命周期
定期持久化慢查询
因为慢查询只存储于内存中,一宕机慢查询数据就会丢失
通过定期slowlog get将慢查询数据转存到MySQL或者ES中
省略由于单线程导致的命令排队时间,一次命令的消耗时间=一次网络时间 + 命令执行时间比起命令执行时间,网络时间很可能成为系统的瓶颈。
pipeline的作用是将一批命令进行打包,然后发送给服务器,服务器执行完按顺序打包返回。
通过pipeline,一次pipeline(n条命令)=一次网络时间 + n次命令时间
N个命令操作
时间: n次网络+n次命令
数据量: 1条命令
1次pupeline(n个命令)
时间: 1次网络+n次命令
数据量: n条命令
与mset ,mget 比较
M操作在Redis队列中是一个原子操作,pipeline不是原子操作
pipeline与M操作都会将数据顺序的传送与顺序地返回
每次pipeline携带数量不推荐过大,否则会影响网络性能
pipeline每次只能作用在一个Redis节点上
发布订阅
角色
发布者(publisher)
订阅者(subscriber)
频道(channel)
通信模型
RedisServer中可以创建若干channel
一个订阅者可以订阅多个channel
当发布者向一个频道中发布一条消息时,所有的订阅者都将会收到消息
Redis的发布订阅模型没有消息积压功能,即新加入的订阅者收不到发布者之前发布的消息
当订阅者收到消息时,消息内容如下
固定内容message,channel的名称,收到的新消息
1 publish channel message 2 3 向指定的channel中发布消息 4 5 subscribe channel1 [channel2...] 6 7 订阅给定的一个或多个渠道的消息 8 9 unsubcribe [channel1 [channel2...]] 10 11 取消订阅给定的一个或多个渠道的消息 12 13 psubscribe pattern1 [pattern2...] 14 15 订阅一个或多个符合给定模式的频道 16 17 punsubscribe [pattern1 [pattern2...]] 18 19 退订所有给定模式的频道 20 21 pubsub channels 22 23 列出至少有一个订阅者的频道 24 25 pubsub numsub [channel...] 26 27 列出给定频道的订阅者数量
bitmap
1 getbit key offset 2 3 对key所存储的字符串值,获取指定偏移量上的位(bit) 4 5 setbit key offset value 6 7 对key所存储的字符串值,设置或清除指定偏移量上的位(bit) 8 - 返回值为该位在setbit之前的值 9 - value只能取0或1 10 - offset从0开始,即使原位图只能10位,offset可以取1000 11 12 bitcount key [start end] 13 14 获取位图指定范围中位值为1的个数 15 - 如果不指定start与end,则取所有 16 17 bitop op destKey key1 [key2...] 18 19 做多个BitMap的and(交集)、or(并集)、not(非)、xor(异或)操作并将结果保存在destKey中 20 21 bitpos key tartgetBit [start end] 22 23 计算位图指定范围第一个偏移量对应的的值等于targetBit的位置 24 - 找不到返回-1 25 - start与end没有设置,则取全部 26 - targetBit只能取0或者1
HyperLogLog
基于HyperLogLog算法:极小的空间完成独立数量的统计
本质还是字符串
1 pfadd key element1 [element2...] 2 3 向HyperLogLog中添加元素 4 5 pfcount key1 [key2...] 6 7 计算HyperLogLog的独立总数 8 9 pfmerge destKey key1 [key2...] 10 11 合并多个hyperLogLog到destKey中
Geo
1 geoadd key longitude latitude member [lon lat member...] 2 3 增加地理位置信息 4 - longitude :经度 5 - latitude : 纬度 6 - member : 标识信息 7 8 geopos key member1 [member2...] 9 10 获取地理位置信息 11 12 geodist key member1 member2 [unit] 13 14 获取两个地理位置的距离 15 - unit取值范围 16 - m(米,默认) 17 - km(千米) 18 - mi(英里) 19 - ft(英尺) 20 21 georadius key longitude latitude unit [withcoord] \[withdist] \[withhash] [COUNT count] \[sort] \[store key] \[storedist key] 22 23 以给定的经纬度为中心,返回包含的位置元素当中,与中心距离不超过给定最大距离的所有位置元素。 24 - unit取值范围 25 - m(米) 26 - km(千米) 27 - mi(英里) 28 - ft(英尺) 29 - withcoord:将位置元素的经度与纬度也一并返回 30 - withdist:在返回位置元素的同时,将距离也一并返回。距离的单位和用户给定的范围单位保持一致 31 - withhash:以52位的符号整数形式,返回位置元素经过geohash编码的有序集合分值。用于底层应用或调试,实际作用不大。 32 - sort取值范围 33 - asc:根据中心位置,按照从近到远的方式返回位置元素 34 - desc:根据中心位置,按照从远到近的方式返回位置元素 35 - store key:将返回结果而的地理位置信息保存到指定键 36 - storedist key:将返回结果距离中心节点的距离保存到指定键 37 38 georadiusbymember key member radius unit [withcoord]\[withdist]\[withhash]\[COUNT count]\[sort]\[store key]\[storedist key] 39 40 以给定的元素为中心,返回包含的位置元素当中,与中心距离不超过给定最大距离的所有位置元素。 41 - unit取值范围 42 - m(米) 43 - km(千米) 44 - mi(英里) 45 - ft(英尺) 46 - withcoord:将位置元素的经度与纬度也一并返回 47 - withdist:在返回位置元素的同时,将距离也一并返回。距离的单位和用户给定的范围单位保持一致 48 - withhash:以52位的符号整数形式,返回位置元素经过geohash编码的有序集合分值。用于底层应用或调试,实际作用不大。 49 - sort取值范围 50 - asc:根据中心位置,按照从近到远的方式返回位置元素 51 - desc:根据中心位置,按照从远到近的方式返回位置元素 52 - store key:将返回结果而的地理位置信息保存到指定键 53 - storedist key:将返回结果距离中心节点的距离保存到指定键
完