• redis拾趣(客户端连接,keys命令,数据备份,缓存有效期等)


    1.客户端连接

    为了安全保护,redis支持绑定IP跟端口,这个通过conf配置文件中的bind跟port来设置。

    绑定后登录client控制台时就需要写明ip(或者hostname)跟端口了,如:

    ./redis_cli -h 10.137.19.19 -p 6389

    redis_cli客户端支持远程登录,所以在集群环境中我们不需要切换机器,直接

    ./redis_cli -h hostname -p 端口 就可以登录到任何一台主机。

    另外它还带有循环执行命令等各种有用的功能,可以./redis-cli --help看到

    2.用keys命令查找

    我们知道keys * ,是显示当前库下所有的keys。

    另外keys命令还支持模糊查询:

    如:

    keys 28*43

    会显示如下的key列表

    1) "285143"

    2) "286043"

    keys 2??3??

    显示如下:

     1) "295313"

     2) "295328"

     3) "295332"

     4) "295375"

     5) "287360"

    ?是长度匹配,*是全局匹配。

    另外想知道key的数量我们可以输入:

    dbsize

    3.redis的数据备份

    redis是自带备份功能的,原先是通过设置配置文件中的:

    save 900 1

    save 300 10

    save 60 10000

    这样我们就可以把redis当成一个数据库来用。

    但是目前为了性能需要,取消了自动备份数据功能,完全当做一个缓存数据库来用。

    这样给性能测试带来也很多不便,每次都要刷数据,好在redis自带了数据备份功能:

    在redis客户端上输:SAVE或者BGSAVE即可完成备份。

    推荐使用BGSAVE,redis会启动一个单独的线程完成备份,而SAVE命令则不会。

    数据会备份在redis的db目录下。这个是通过设置conf中的dbfilename参数来指定的。

    这样下次redis重启时所有的数据都不会丢失,redis会自动去目录下读取备份文件启动。

    实测了一下,启动时redis读取3G的备份文件只需要十秒左右,还是相当快的。

    4.缓存有效期的设置

    我们通过expire命令设置一对k—v的有效期,如:

    EXPIRE key seconds

    然后通过TTL命令就可以看到这个key还有多久就过期了:

    TTL key

    如果想这个key没有过期时间,可以这样:

    PERSIST key

    当然,当数据满时,redis会根据算法剔除相应的键值对,目前支持这么多方式剔除:

    # volatile-lru -> remove the key with an expire set using an LRU algorithm

    # allkeys-lru -> remove any key accordingly to the LRU algorithm

    # volatile-random -> remove a random key with an expire set

    # allkeys->random -> remove a random key, any key

    # volatile-ttl -> remove the key with the nearest expire time (minor TTL)

    # noeviction -> don't expire at all, just return an error on write operations

    xmpp目前采用allkeys-lru,这个通过设置maxmemory-policy来确定。

    5.info命令

    客户端输info能显示redis目前的运行情况。

    是监测时常用的一个命令。通常跟

    redis_cli -r 循环次数 -i 循环时间 

    配合使用

    如需要监视redis每秒有多少对KV由于内存满了被驱逐出去,可以这样写:

    ./redis-cli -r 10 -i 1 info | grep evicted_keys

    6.redis内存占用

    redis的内存占用在info里面可以看到:

    used_memory:8536027504

    used_memory_human:7.95G

    used_memory_rss:8537772032

    mem_fragmentation_ratio:1.00

    use_tcmalloc:0

    used_memory代表redis占用内存。包括redis自身程序占用的内存。

    used_memory_human代表KV数据占据的内存。

    used_memory_rss代表涵盖内存碎片的内存。

    redis在分配内存的时候采用了malloc,类似于java的new。

    目前支持三种内存分配器:tcmalloc,jemalloc和libc 

    对于2.2.14版本来说如果没有安装tcmalloc,jemalloc就会默认使用libc。

    这个可以通过use_tcmalloc来看到使用了哪种。

    mem_fragmentation_ratio则代表了分配器碎片率。(原来使用C也会产生内存碎片。。。。。。。。)

    通过这几个参数基本能看到目前redis的内存情况,但是这个不是最准确的,最准确的话还是结合shell命令(如ps,top)看比较好,不过通常没有太大误差。

  • 相关阅读:
    我是菜鸟,开始学习计划
    我是菜鸟,学习计划4月19日笔录
    用HttpSessionListener与HttpSessionBindingListener实现在线人数统计
    mac系统InetAddress.getLocalHost().getHostAddress() 很慢
    获取n位数m进制的随机数 js
    cordova开发环境搭建
    遇到网页中无法选择的文本时或需要登录才可复制时可用
    今天摸的鱼就是以后加的班
    国际化vuei18n 向语言包中传入参数
    vue3 技术浏览 收藏
  • 原文地址:https://www.cnblogs.com/xyhero/p/0f1439f05d6a03af319ea74f523b39fd.html
Copyright © 2020-2023  润新知