• redis笔记补充


    redis补充

    这篇文章是redis入门笔记的补充。

    1.info命令

    用来显示服务的信息。

    info命令可以跟下面的选项:

    • server: 关于 Redis 服务器的一些信息
    • clients: 客户端连接部分
    • memory: 内存消耗相关信息
    • persistence: RDB和AOF相关信息
    • stats: 一些统计
    • replication: 主/副本复制信息
    • cpu: CPU消耗统计
    • commandstats: Redis 命令统计
    • delatencystats: Redis 命令延迟百分位分布统计
    • cluster: Redis 集群部分
    • modules: 模块部分
    • keyspace: Redis数据库相关的统计信息
    • errorstats: Redis 错误统计

    info keyspace就能查看redis每个库中存储的key的信息。

    同时info也可以跟下面的一些选项

    • all:返回所有部分(不包括模块生成的部分)
    • default:仅返回默认的部分集
    • everything:包括所有和模块

    如果单纯是info命令的话,等价于info default

    具体的信息大家可以查看官方文档部分的介绍:https://redis.io/commands/info/

    2.memory stats命令

    用来显示服务的内存使用的相关情况。

    • peak.allocated: Redis 消耗的峰值内存(以字节为单位)(参见 INFO 的 used_memory_peak

    • total.allocated: Redis 使用其分配器分配的总字节数(参见 INFO 的 used_memory

    • startup.allocated: Redis 在启动时消耗的初始内存量(以字节为单位)(参见 INFO 的 used_memory_startup

    • replication.backlog: 复制积压缓存区的字节大小(参见INFO的repl_backlog_active

    • clients.slaves: 所有副本开销的总大小(以字节为单位)(输出和查询缓冲区、连接上下文)

    • clients.normal: 所有客户端开销(输出和查询缓冲区、连接上下文)的总大小(以字节为单位)

    • aof.buffer: AOF 相关缓冲区的总大小(以字节为单位)

    • lua.caches: Lua 脚本缓存开销的总大小(以字节为单位)

    • dbXXX: 对于服务器的每个数据库,主字典和过期字典(分别为overhead.hashtable.mainoverhead.hashtable.expires)的开销以字节为单位报告

    • overhead.total: 所有开销的总和,即 startup.allocatedreplication.backlogclients.slavesclients.normalaof.buffer 以及用于管理 Redis 键空间的内部数据结构的总和(参见 INFO 的 used_memory_overhead)

    • keys.count: 整个redis实例key的个数

    • keys.bytes-per-key: 每个key平均字节数,net memory usage(total.allocated 减去 startup.allocated)与keys.count的比值

    • dataset.bytes: Redis 实例中数据占用的总字节数,计算方法total.allocated减去overhead.total

    • dataset.percentage: Redis 数据消耗内存占总内存的百分比

    • peak.percentage: 当前内存消耗占峰值内存消耗的百分比

    • fragmentation: 同 INFOmem_fragmentation_ratio

      中文官方文档链接:https://www.redis.com.cn/commands/memory-stats.html

    3.debug object命令

    可以用来显示关于key的一些调试信息

    debug object [key]

    4.lua脚本

    格式:eval [script] [numkeys] key ... arg ...

    eval "return 'hello world'" 0 "hello world"

    这里return关键字主要用来返回命令执行的结果。如果我们不需要命令直接的结果,那就不需要写return


    直接在脚本中通过调用redis.call()函数或者redis.pcall()函数执行Redis命令

    eval "return redis.call('set',KEYS[1],ARGV[1])" 1 "message" "hello world"

    这里有2个地方需要注意:

    • 数组下标是从1开始
    • KEYS,ARGV都必须大写

    redis.call()函数和redis.pcall()函数都可以用于执行Redis命令,它们之间唯一不同的就是处理错误的方式。前者在执行命令出错时会引发一个Lua错误,迫使EVAL命令向调用者返回一个错误;而后者则会将错误包裹起来,并返回一个表示错误的Lua表格.


    值转换:

    Redis服务器中有两种不同的环境:一种是Redis命令执行器所处的环境,而另一种则是Lua解释器所处的环境。因为这两种环境

    使用的是不同的输入和输出,所以在这两种环境之间传递值将引发相应的转换操作:

    1)当Lua脚本通过redis.call()函数或者redis.pcall()函数执行Redis命令时,传入的Lua值将被转换成Redis协议值;

    2)当redis.call()函数或者redis.pcall()函数执行完Redis命令时,命令返回的Redis协议值将被转换成Lua值。

    3)当Lua脚本执行完毕并向EVAL命令的调用者返回结果时,Lua值将被转换为Redis协议值。

    将Redis协议值转换成Lua值的规则

    将Lua值转换为Redis协议值的规则


    全局变量保护

    为了防止预定义的Lua环境被污染,Redis只允许用户在Lua脚本中创建局部变量而不允许创建全局变量,尝试在脚本中创建全局变量将引发一个错误。


    通过lua脚本删除redis中多个key

    在redis中没有通过正则去删除多个key的方法,所以我们可以通过lua脚本的方式去删除多个key。

    首先看下lua脚本中关于数组遍历的方法。

    arr = {"a","b","c"}
    for i = 1, #arr do
        print(arr[i])
    end
    

    将上面的内容存储到新建的名为a.lua文件中。执行lua a.lua就可以分别打印a、b、c.

    下面我们看看如果删除多个key。做法还是通过keys命令查到多个符合要求的key,再通过遍历数组的方式删除。

    比如我们要删除所有a开头的key,就可以使用下面的命令。

    eval "local ks=redis.call('keys',KEYS[1]) for i = 1, #ks do   redis.call('del',ks[i]) end " 1  "a*"
    

  • 相关阅读:
    性能监控(5)–JAVA下的jstat命令
    内存分析工具-MAT(Memory Analyzer Tool)
    性能监控(4)–linux下的pidstat命令
    性能监控(3)–linux下的iostat命令
    性能监控(2)–linux下的vmstat命令
    性能监控(1)--linux下的top命令
    了解java虚拟机—在TALB上分配对象(10)
    了解java虚拟机—G1回收器(9)
    js 长按鼠标左键实现溢出内容左右滚动滚动
    html标签设置contenteditable时,去除粘贴文本自带样式
  • 原文地址:https://www.cnblogs.com/wbo112/p/16104289.html
Copyright © 2020-2023  润新知