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*"

redis笔记补充的更多相关文章

  1. STM32 FSMC学习笔记+补充(LCD的FSMC配置)

    STM32 FSMC学习笔记+补充(LCD的FSMC配置) STM32 FSMC学习笔记 STM32 FSMC的用法--LCD

  2. 【Redis笔记(四)】 Redis数据结构 - list链表

    原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/50573605 经过前面的介绍,我们学习了Redis中string字符串.hash ...

  3. redis笔记之一

    NoSQL简介 全称是Not Only SQL,泛指菲关系型数据库,它是通过键值对存储数据并且将数据存储在内存中.而像mysql,sql server这些通过关系表存数据的就叫关系型数据库 为什么需要 ...

  4. Redis 笔记 01:入门篇

    Redis 笔记 01:入门篇 ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...

  5. 11/6笔记 补充(Redis持久化,RDB&&AOF)

    11/6补充笔记 修改redis-6379.conf里面的save10秒2个数据发生改变 (save 10 2) 修改一次数据不发生改变,修改2次数据才发生改变 继续修改数据,发现还是一样的规律 增删 ...

  6. redis笔记总结之redis介绍

    一.Redis介绍: redis的发展历史简单的理解为因为使用类似MySql这类关系型数据库不方便进而开发的开源的.轻量级的.非关系型的,直到现在一直不断完善的一款NoSql数据库.具体的介绍大家可以 ...

  7. Redis笔记-集群搭建

    Redis单机版搭建上一篇已经基本介绍了,下面讨论Redis集群搭建方案和示例. 1.关于Redis常用的集群方案(三种): a.一主多从,如一个Master.两个Slave b.薪火相传,即集群中的 ...

  8. Redis笔记(1)数据结构与对象

    1.前言 此系列博客记录redis设计与实现一书的笔记,提取书本中的知识点,省略相关说明,方便查阅. 2.基本数据结构 2.1 简单动态字符串SDS(simple dynamic string) 结构 ...

  9. Redis笔记(七):Redis应用场景

    特性优势 1 支持持久化 Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用. 2 数据类型丰富 Redis不仅仅支持简单的key-value类型的数据,同时还 ...

随机推荐

  1. MYSQL安装后自带用户的作用

    user表中host列的值的意义%                   匹配所有主机localhost      localhost不会被解析成IP地址,直接通过UNIXsocket连接127.0.0 ...

  2. OpenTracing 简介

    自从 Google Dapper 的论文发布之后,各大互联网公司和开源社区开发的分布式链路追踪产品百花齐放,同时也给使用者带来了一个问题,各个分布式链路追踪产品的 API 并不兼容,如果用户在各个产品 ...

  3. 人生苦短,我用JRebel

    昨天看到团子推送的一篇关于热部署的文章,其中介绍了自研的Sonic插件在公司内部的应用.同时晒出来一张对比图: 团子表示我们的插件要比同类插件优秀哦.不过我定睛一看,好家伙,第一列的JRebel在图中 ...

  4. Redis安装以及常见问题

    安装 下载 redis官网地址:https://redis.io/ centos安装 创建软件放置目录mkdir soft 进入soft目录并下载redis安装包. cd soft wget http ...

  5. PMP之挣值管理(PV、EV、AC、SV、CV、SPI、CPI)的记忆方法

    挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三个参数:PV.AC.EV. PV:计划值,在即定时间点前计划完成活动 ...

  6. MySQL SQL Injection Cheat Sheet

    MySQL SQL Injection Cheat Sheet Some useful syntax reminders for SQL Injection into MySQL databases- ...

  7. C# WinForm 解决子窗体放大后,子窗体图标放大的问题

    解决子窗体放大后,子窗体的图标占用主窗体的菜单栏的问题. C#子窗体最大化时, 那个图标跑到主窗体的前面去了, 造成界面不统一也不美观. 所以需要进行处理, 只要有主窗体的菜单ItemAdded事件中 ...

  8. loj6271 「长乐集训 2017 Day10」生成树求和 加强版(矩阵树定理,循环卷积)

    loj6271 「长乐集训 2017 Day10」生成树求和 加强版(矩阵树定理,循环卷积) loj 题解时间 首先想到先分开三进制下每一位,然后每一位分别求结果为0,1,2的树的个数. 然后考虑矩阵 ...

  9. 学习廖雪峰的Git教程1

    我是在Ubuntu上学习的,所以配置之类的进行的很快. 一.创建版本库 mkdir learngit cd learngit git init 用git init变成git可以管理的库 二.git a ...

  10. Grep 命令有什么用?如何忽略大小写?如何查找不含该串的行?

    是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来. grep [stringSTRING] filename grep [^string] filename