• 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连接前

    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.关闭防火墙

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

  • 相关阅读:
    【LeetCode】731. 图像渲染
    【LeetCode】130. 被围绕的区域
    小白之HTTP协议熟悉篇
    Java和js常用表达式
    Mysql主主复制高可用解决方案
    解决vue报错:Module build failed (from ./node_modules/_eslint-loader@2.2.1@eslint-loader/index.js): TypeError: Cannot read property 'range' of null
    centos7使用yum安装jdk并配置jdkhome
    阿里nacos安装及使用指南
    js实现给html固定区域增加水印
    MySQL安装教程
  • 原文地址:https://www.cnblogs.com/quyangyang/p/11357326.html
Copyright © 2020-2023  润新知