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直连

使用简单 适用于少量长期连接的场景

存在每次新建/关闭TCP连接的开销<br/>资源无法控制,存在连接泄露的风险,Jedis对象线程不安全

jedis连接池

Jedis对象预先生成,降低使用开销 连接池的形式保护和控制资源的使用

相对于直连,使用相对麻烦 尤其在资源的管理上需要许多参数保证 一旦参数不合理会出现很多问题

 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,一次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:将返回结果距离中心节点的距离保存到指定键

猜你喜欢

转载自www.cnblogs.com/quyangyang/p/11357326.html