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.main
和overhead.hashtable.expires
)的开销以字节为单位报告overhead.total
: 所有开销的总和,即startup.allocated
、replication.backlog
、clients.slaves
、clients.normal
、aof.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
: 同INFO
的mem_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笔记补充的更多相关文章
- STM32 FSMC学习笔记+补充(LCD的FSMC配置)
STM32 FSMC学习笔记+补充(LCD的FSMC配置) STM32 FSMC学习笔记 STM32 FSMC的用法--LCD
- 【Redis笔记(四)】 Redis数据结构 - list链表
原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/50573605 经过前面的介绍,我们学习了Redis中string字符串.hash ...
- redis笔记之一
NoSQL简介 全称是Not Only SQL,泛指菲关系型数据库,它是通过键值对存储数据并且将数据存储在内存中.而像mysql,sql server这些通过关系表存数据的就叫关系型数据库 为什么需要 ...
- Redis 笔记 01:入门篇
Redis 笔记 01:入门篇 ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
- 11/6笔记 补充(Redis持久化,RDB&&AOF)
11/6补充笔记 修改redis-6379.conf里面的save10秒2个数据发生改变 (save 10 2) 修改一次数据不发生改变,修改2次数据才发生改变 继续修改数据,发现还是一样的规律 增删 ...
- redis笔记总结之redis介绍
一.Redis介绍: redis的发展历史简单的理解为因为使用类似MySql这类关系型数据库不方便进而开发的开源的.轻量级的.非关系型的,直到现在一直不断完善的一款NoSql数据库.具体的介绍大家可以 ...
- Redis笔记-集群搭建
Redis单机版搭建上一篇已经基本介绍了,下面讨论Redis集群搭建方案和示例. 1.关于Redis常用的集群方案(三种): a.一主多从,如一个Master.两个Slave b.薪火相传,即集群中的 ...
- Redis笔记(1)数据结构与对象
1.前言 此系列博客记录redis设计与实现一书的笔记,提取书本中的知识点,省略相关说明,方便查阅. 2.基本数据结构 2.1 简单动态字符串SDS(simple dynamic string) 结构 ...
- Redis笔记(七):Redis应用场景
特性优势 1 支持持久化 Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用. 2 数据类型丰富 Redis不仅仅支持简单的key-value类型的数据,同时还 ...
随机推荐
- keepalived yum安装后启动报错解决
[root@centos8 ~]yum install keepalived -y [root@centos8 ~]systemctl start keepalived.services [root@ ...
- 2.3 C++STL vector容器详解
文章目录 2.3.1 引入 2.3.2 代码实例 2.3.3 运行结果 总结 2.3.1 引入 vector 容器 动态数组 可变数组 vector容器 单口容器(尾部操作效率高) vector动态增 ...
- python3判断一个数是否为素数
while True: num = int(input('请输入一个数:')) for i in range(2,num):#判断在num之前的数能不能把num整除 if(num%i == 0): p ...
- SpringCloudAlibaba 微服务讲解(四)Sentinel--服务容错(一)
4.1 高并发带来的问题 在微服务中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现网 ...
- 关于kafka客户端版本与服务端版本不一致导致的一次坑
上周开发了一个功能,需要使用kafka接上游数据并入库,本地开发时,自己安装了一个kafka服务,开发测试时使用本地的kafka服务给主题发消息,然后在自己本地的代码中进行调试.使用的kafka版本如 ...
- Element-UI资源原型库
Element-UI v2.0.0版本 Axure和Sketch库: 链接:https://pan.baidu.com/s/1LdsEh8BKQBjcWBKV5yQilQ 提取码:1xqn
- java程序如何确保多线程的运行安全?
线程的安全问题体现在: 原子性:一个或多个操作在CPU执行过程中不被中断的特性 可见性:一个线程对共享变量的修改,另一个线程能立刻看到 有序性:程序执行的顺序按照代码的先后顺序执行 导致线程存在安全问 ...
- Linux重启网卡服务Failed to start LSB: Bring up/down networking.
Linux网卡重启失败,使用 systemctl status network.service命令进行查看状态,发现启动有异常产生 network.service: control process e ...
- 解释 WEB 模块?
Spring 的 WEB 模块是构建在 application context 模块基础之上,提供一个适 合 web 应用的上下文.这个模块也包括支持多种面向 web 的任务,如透明地处理 多个文件上 ...
- synchronized 的作用?
在 Java 中,synchronized 关键字是用来控制线程同步的,就是在多线程的环境 下,控制 synchronized 代码段不被多个线程同时执行. synchronized 既可以加在一段代 ...