zoukankan      html  css  js  c++  java
  • redis使用总结

    启动命令:
    redis-server  redis.conf
    停止Redis命令
    redis-cli shutdown

    进入redis客户端命令:
    ./redis-cli -h redis服务器IP -p 6379 -a 密码

    查看所有的key:
    KEYS *


    redis客户端 查看数据:

     1、 set 集合  key:set
     

    SCARD key #获取集合中元素数量

    SMEMBERS key #返回集合中所有的元素

    2、hash :  key hkey value
    根据key和hkey查数据: HGET key hkey
     

    查看key下所有值:HGETALL key
     

    HKEYS key  获取所有字段:
     

    HLEN key   获取key下 字段的个数:
     

    判断 key和field 是否存在: 1是存在 0是不存在
    HEXISTS key  hkey

    3、string    : key value

    SET key value

    get key

    4、list   : key list

    向list里存数据:LPUSHX key value

    从左边 取数据:LRANGE key start stop

    取最新10条:

    LRANGE key -9 -1

    根据index取值
    LINDEX key 1

    查询长度:
    LLEN key

    从左侧推4条数据:根据下标,0 开始取 可以取出最新的数据。
    LPUSH listtest 1 2 3 4

    LRANGE listtest 0 3
    xxx:6379> LRANGE listtest 0 3
    1) "4"
    2) "3"
    3) "2"
    4) "1"


    从右侧推4条数据:根据下标0 开始取 可以取出最老的数据。
    RPUSH listtest1 1 2 3 4

    xxx:6379> LRANGE listtest1 0 3
    1) "1"
    2) "2"
    3) "3"
    4) "4"

    不管是左边压入还是右边压入,LRANGE listtest1 -9 -1都是取最新的10条
    LRANGE listtest1 -9 -1

    xxx::6379> LRANGE listtest1 -9 -1
    1) "4"
    2) "5"
    3) "6"
    4) "7"
    5) "8"
    6) "9"
    7) "10"
    8) "11"
    9) "12"
    xxx::6379> LRANGE listtest -9 -1
    1) "4"
    2) "3"
    3) "2"
    4) "1"


    redis部署模式:
    redis可以单机、多实例和集群部署。
    单机支持万次/s 的请求, 主从集群支持10+万/s 的请求,

    单机上启动多个实例:适用于同一台机器上有多个应用,他们的redis数据不共享,可以启动多个实例分别存储多个应用的数据。

    集群部署分为:主从结构(读写分离支持高并发,主从节点存相同的数据)、哨兵模式(高并发高可用,主从节点存相同的数据)、集群模式(高并发高可用、各个节点互通,不同节点存储不同的数据,客户端连接一个节点就可以访问到所有节点的数据,大数据量也可以支撑)

    redis连接数总结:
    redis库中连接数是由redis连接池配置和管理的,有最小连接数,最大活跃连接数和空闲连接数。不同的key值下的操作是相互独立的。

    redis的操作线程是单线程在运行,严格来说,Redis Server是多线程的,只是它的请求处理整个流程是单线程处理的。

    (如果只有一个应用的一个线程一直操作reds 的一个key不会有并发的问题,但是有多个应用同时操作redis的key,就会有并发安全的问题,如两个客户端同时给一个key下的值从0 循环加1 加1000次,两个应用同时跑的话,最后的结果是个小于2000的数)


    单线程处理最大的缺点就是,如果前一个请求发生耗时比较久的操作,那么整个Redis就会阻塞住,其他请求也无法进来,直到这个耗时久的操作处理完成并返回,其他请求才能被处理到。


    我们平时遇到Redis变慢或长时间阻塞的问题,90%也都是因为Redis处理请求是单线程这个原因导致的。


    所以,我们在使用Redis时,一定要避免非常耗时的操作,例如使用时间复杂度过高的方式获取数据、一次性获取过多的数据、大量key集中过期导致Redis淘汰key压力变大等等,这些场景都会阻塞住整个处理线程,直到它们处理完成,势必会影响业务的访问。


    每执行一个redis操作,都会opening RedisConnection 然后又Closing Redis Connection ,这是不是说每次执行redis操作都需要创建一个连接,操作完然后又关闭连接呢?实际上不是这样的,阅读源代码我们可以发现我们对redis的所有操作都是通过回调execute函数执行的,


    这里面每次执行action.doInRedis(connToExpose)前都要调用RedisConnectionUtils.getConnection(factory);获得一个连接,进入RedisConnnectionUtils类中,getConnection(factory)最终调用的是doGetConnection(factory, true, false, enableTranactionSupport)这个函数。这个函数我们可以看下api文档,发现实际上并不是真的创建一个新的redis连接,它只是在connectFactory中获取一个连接,也就是从连接池中取出一个连接。当然如果connectFactory没有连接可用,此时如果allowCreate=true便会创建出一个新的连接,并且加入到connectFactory中。
    基本上可以确定真实的情况是spring-data-redis已经帮我们封装了连接池管理,我们只需要调用一系列操作函数即可,这给操作redis带来了极大的方便。

  • 相关阅读:
    .NETCore_初探
    .NETCore_生成实体
    架构碎屑
    Helper
    26.【转载】挖洞技巧:绕过短信&邮箱轰炸限制以及后续
    25.【转载】挖洞技巧:支付漏洞之总结
    24.【转载】挖洞技巧:信息泄露之总结
    5.Windows应急响应:挖矿病毒
    4.Windows应急响应:勒索病毒
    3.Windows应急响应:蠕虫病毒
  • 原文地址:https://www.cnblogs.com/luckyna/p/13820819.html
Copyright © 2011-2022 走看看