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. centos5 源失效解决办法

    将源文件备份 [base] name=CentOS-$releasever - Base failovermethod=priority baseurl=http://vault.centos.org ...

  2. Golang 常见设计模式之装饰模式

    想必只要是熟悉 Python 的同学对装饰模式一定不会陌生,这类 Python 从语法上原生支持的装饰器,大大提高了装饰模式在 Python 中的应用.尽管 Go 语言中装饰模式没有 Python 中 ...

  3. 程序语言与编程实践4-> 蓝桥杯C/C++备赛记录2 | 第二周学习训练

    0323,又是一周星期三,按道理该总结了.这周前几天写题比较多,后面事情多了起来,就没怎么写了.主要方向是洛谷的基本语法熟悉,PTA平台数据结构的一些题目. 0323附上: 题目比较多,所以文章可能有 ...

  4. 女朋友汇总表格弄了大半天,我实在看不下去了,用40行代码解决问题 | Python使用openpyxl库读写表格Excel(xlsx)

    1.openpyxl基本操作 python程序从excel文件中读数据基本遵循以下步骤: 1.import openpyxl 2.调用openpyxl模块下的load_workbook('你的文件名. ...

  5. luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp)

    luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp) Luogu 题外话: 我可能是傻逼, 但不管我是不是傻逼, 我永远单挑出题人. 题解时间 看数据范围可以确定状压dp. ...

  6. github新手使用指南

    常用命令:   Git 速查表(摘自 AI有道) 一.常见命令 git init : 初始化 git 仓库,即将一个文件夹初始化为一个 git 仓库.具体的操作是创建一个 .git 隐藏文件夹 git ...

  7. Oracle入门基础(七)一一集合运算

    SQL> /* SQL> 查询10和20号部门的员工 SQL> 1. select * from emp where deptno=10 or deptno=20; SQL> ...

  8. CSS 网站布局

    Flex:https://www.html.cn/archives/8629 Grid:https://www.html.cn/archives/8510/    http://www.ruanyif ...

  9. Dubbo 集群容错有几种方案?

    集群容错方案 说明 Failover Cluster 失败自动切换,自动重试其它服务器(默认) Failfast Cluster 快速失败,立即报错,只发起一次调用 Failsafe Cluster ...

  10. Netty学习摘记 —— 初识编解码器

    本文参考 本篇文章是对<Netty In Action>一书第十章"编解码器框架"的学习摘记,主要内容为解码器和编码器 编解码器实际上是一种特殊的ChannelHand ...