目录
一、Redis基础
1.1 关系型数据库与非关系型数据库
数据库主要分为两大类:关系型数据库与 NoSQL 数据库。
关系型数据库,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库中的数据。主流的 MySQL、Oracle、MS SQL Server 和 DB2 都属于这类传统数据库。
NoSQL 数据库,全称为 Not Only SQL,意思就是适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。主要分为临时性键值存储(memcached、Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase),每种 NoSQL 都有其特有的使用场景及优点。
Oracle,mysql 等传统的关系数据库非常成熟并且已大规模商用,为什么还要用 NoSQL 数据库呢?
主要是由于随着互联网发展,数据量越来越大,对性能要求越来越高,传统数据库存在着先天性的缺陷,即单机(单库)性能瓶颈,并且扩展困难。这样既有单机单库瓶颈,却又扩展困难,自然无法满足日益增长的海量数据存储及其性能要求,所以才会出现了各种不同的 NoSQL 产品,NoSQL 根本性的优势在于在云计算时代,简单、易于大规模分布式扩展,并且读写性能非常高。
RDBMS和NOSQL的特点及优缺点:
(一)、关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型 (二维表格模型) 基础上,一般面向于记录。 SQL语句 (标准数据查询语言) 就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。 主流的关系型数据库包括Oracle、MySQL、SQL Server、Microsoft Access、DB2等。
(二)、非关系型数据库 NoSQL (NoSQL=NotOnlySQL),意思是“不仅仅是SQL”,是非关系型数据库的总称。 除了主流的关系型数据库外的数据库,都认为是非关系型。 主流的 NoSQL 数据库有Redis、 MongBD、 Hbase、 Memcached 等。
(三)、关系型数据库和非关系型数据库区别 (1)、数据存储方式不同 关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。 与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。 ① 关系型:依赖于关系模型E-R图,同时以表格式的方式存储数据 ② 非关系型:除了以表格形式存储之外,通常会以大块的形式组合在一起进行存储数据
(2)、扩展方式不同 SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。 要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来克服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。 而NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器 (节点) 来分担负载。 ① 关系:纵向(天然表格式) ② 非关:横向(天然分布式)
(3)、对事务性的支持不同 如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是最佳选择。SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。 虽然NoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。 ① 关系型:特别适合高事务性要求和需要控制执行计划的任务 ② 非关系:此处会稍显弱势,其价值点在于高扩展性和大数据量处理方面
(四)、非关系型数据库产生背景 可用于应对Web2.0纯动态网站类型的三高问题。 (1) High performance-------对数据库高并发读写需求 (2) HugeStorage--------------对海量数据高效存储与访问需求 (3) High Scalability && High Availability------- 对数据库高可扩展性与高可用性需求
关系型数据库和非关系型数据库都有各自的特点与应用场景,两者的紧密结合将会给Web2.0的数据库发展带来新的思路。让关系数据库关注在关系上,非关系型数据库关注在存储上。例如,在读写分离的MySQL数据库环境中,可以把经常访问的数据存储在非关系型数据库中,提升访问速度。 Mysql 高热数据——》redis web ——》redis ——》mysql CPU——》内存/缓存 ——》磁盘
总结: 关系型数据库: 实例–>数据库–>表(table)–>记录行(row)、数据字段(column)——》存储数据
非关系型数据库: 实例–>数据库–>集合(collection) -->键值对(key-value) workdir=/usr/local/mysql
非关系型数据库不需要手动建数据库和集合(表)。
1.2 redis特性
-
速度快: 10W QPS,基于内存,C语言实现
-
单线程
-
持久化
-
支持多种数据结构
-
支持多种编程语言
-
功能丰富: 支持Lua脚本,发布订阅,事务,pipeline等功能
-
简单: 代码短小精悍(单机核心代码只有23000行左右),单线程开发容易,不依赖外部库,使用简单
-
主从复制
-
支持高可用和分布式
1.3 单线程
Redis在6.0版本之前一直是单线程方式处理用户的请求
单线程为何如此快?
-
纯内存
-
非阻塞
-
避免线程切换和竞态消耗
Redis为什么这么快? 1、Redis是一款纯内存结构,避免了磁盘I/O等耗时操作。 2、Redis命令处理的核心模块为单线程,减少了锁竞争,以及频繁创建线程和销毁线程的代价,减少了线程上下文切换的消耗。 3、采用了 I/O 多路复用机制,大大提升了并发效率。
注:在 Redis 6.0 中新增加的多线程也只是针对处理网络请求过程采用了多线性,而数据的读写命令,仍然是单线程处理的。
注意事项:
-
一次只运行一条命令
-
拒绝长(慢)命令:keys, flushall, flushdb, slow lua script, mutil/exec, operate big value(collection)
-
其实不是单线程: 早期版本是单进程单线程,3版本后实际还有其它的线程, 实现特定功能,如: fysnc file descriptor,close file descriptor
1.4 redis与memcached对比
memcached | redis | |
---|---|---|
类型 | key-value | key-value |
过期策略 | 支持 | 支持 |
数据类型 | 单一数据类型 | 五大数据类型 |
持久化 | 不支持 | 支持 |
主从复制 | 不支持 | 支持 |
虚拟内存 | 不支持 | 支持 |
1.5 redis的应用场景
-
Session 共享:常见于web集群中的Tomcat或者PHP中多web服务器session共享
-
缓存:数据查询、电商网站商品信息、新闻内容
-
计数器:访问排行榜、商品浏览数等和次数相关的数值统计场景
-
微博/微信社交场合:共同好友,粉丝数,关注,点赞评论等
-
消息队列:ELK的日志缓存、部分业务的订阅发布系统
-
地理位置: 基于GEO(地理信息定位),实现摇一摇,附近的人,外卖等功能
1.6 redis实现缓存的流程
数据更新操作流程:
数据读操作流程:
二、Redis的安装
2.1 依赖包
#centos:
yum -y install gcc jemalloc-devel systemd-devel
#ubuntu:
apt -y install make gcc libjemalloc-dev libsystemd-dev
2.2 编译安装
#选择安装包下载路径
cd /opt
#下载安装包
wget http://download.redis.io/releases/redis-6.2.6.tar.gz
#解压
tar xvf redis-6.2.6.tar.gz
cd redis-6.2.6/
#指定redis安装目录
make USE_SYSTEMD=yes PREFIX=/apps/redis install
#配置变量
echo 'PATH=/apps/redis/bin:$PATH' > /etc/profile.d/redis.sh
. /etc/profile.d/redis.sh
#创建配置文件、日志、数据等目录
mkdir /apps/redis/{etc,log,data,run}
#复制源码包中配置文件
cp redis.conf /apps/redis/etc/
#添加redis用户 -r为指定系统用户
useradd -r -s /sbin/nologin redis
#设置目录权限
chown -R redis.redis /apps/redis/
#准备service文件
vim /usr/lib/systemd/system/redis.service
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis.conf --supervised systemd
ExecStop=/bin/kill -s QUIT $MAINPID
#Type=notify 如果支持systemd可以启用此行
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
#################安装完毕##################
2.3 启动
systemctl daemon-reload
systemctl start redis
2.4 redis6版本须知
!!!此方法为无法正常安装的补充,切忌可以正常安装的话,不要乱更新gcc版本!!!
centos7 的 gcc编译器过旧会出现以下报错 升级后再次编译可以通过
gcc -v # 查看gcc版本
yum -y install centos-release-scl # 升级到9.1版本
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
以上为临时启用,如果要长期使用gcc 9.1的话:
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
三、Redis多实例
3.1 应用场景
测试环境中经常使用多实例,需要指定不同实例的相应的端口,配置文件,日志文件等相关配置
3.2 配置演示
环境介绍:
实例1端口:6379
实例2端口:6380
实例3端口:6381
注意,这三个端口都不可被占用,用前先检查!
配置演示:
#先关闭redis
systemctl stop redis
#复制三个实例的配置文件
cp /apps/redis/etc/redis.conf /apps/redis/etc/redis6379.conf
cp /apps/redis/etc/redis.conf /apps/redis/etc/redis6380.conf
cp /apps/redis/etc/redis.conf /apps/redis/etc/redis6381.conf
#授予权限
chown -R redis.redis /apps/redis
#修改不同实例的配置文件
#端口6379的配置文件
sed -i -e 's/dbfilename dump.rdb/dbfilename dump6379.rdb/' -e 's#logfile ""#logfile /apps/redis/log/redis6379.log#' redis6379.conf
#端口6380的配置文件
sed -i -e 's/dbfilename dump.rdb/dbfilename dump6380.rdb/' -e 's#logfile ""#logfile /apps/redis/log/redis6380.log#' -e 's/redis_6379.pid/redis_6380.pid/' -e 's/^port 6379/port 6380/' redis6380.conf
#端口6381的配置文件
sed -i -e 's/dbfilename dump.rdb/dbfilename dump6381.rdb/' -e 's#logfile ""#logfile /apps/redis/log/redis6381.log#' -e 's/redis_6379.pid/redis_6381.pid/' -e 's/^port 6379/port 6381/' redis6380.conf
#准备不同实例的service文件
cp /lib/systemd/system/redis.service /lib/systemd/system/redis6379.service
cp /lib/systemd/system/redis.service /lib/systemd/system/redis6380.service
cp /lib/systemd/system/redis.service /lib/systemd/system/redis6381.service
#修改service中的端口
sed -i 's@/apps/redis/etc/redis.conf@/apps/redis/etc/redis6379.conf@' /lib/systemd/system/redis6379.service
sed -i 's@/apps/redis/etc/redis.conf@/apps/redis/etc/redis6380.conf@' /lib/systemd/system/redis6380.service
sed -i 's@/apps/redis/etc/redis.conf@/apps/redis/etc/redis6381.conf@' /lib/systemd/system/redis6381.service
测试:
redis-cli -p 6379
info
redis-cli -p 6380
info
redis-cli -p 6381
info
四、Redis的配置优化
bind 0.0.0.0 #监听地址,可以用空格隔开后多个监听IP
protected-mode yes #redis3.2之后加入的新特性,在没有设置bind IP和密码的时候,redis只允许访问127.0.0.1:6379,可以远程连接,但当访问将提示警告信息并拒绝远程访问
port 6379 #监听端口,默认6379/tcp
tcp-backlog 511 #三次握手的时候server端收到client ack确认号之后的队列值,即全连接队列长度timeout 0 #客户端和Redis服务端的连接超时时间,默认是0,表示永不超时
tcp-keepalive 300 #tcp 会话保持时间300s
daemonize no #默认no,即直接运行redis-server程序时,不作为守护进程运行,而是以前台方式运行,如果想在后台运行需改成yes,当redis作为守护进程运行的时候,它会写一个 pid 到/var/run/redis.pid 文件
supervised no #和OS相关参数,可设置通过upstart和systemd管理Redis守护进程,centos7后都使用systemd
pidfile /var/run/redis_6379.pid #pid文件路径,可以修改为/apps/redis/run/redis_6379.pid
loglevel notice #日志级别
logfile "/path/redis.log" #日志路径,示例:logfile "/apps/redis/log/redis_6379.log"databases 16 #设置数据库数量,默认:0-15,共16个库
always-show-logo yes #在启动redis 时是否显示或在日志中记录记录redis的logo
save 900 1 #在900秒内有1个key内容发生更改,就执行快照机制
save 300 10 #在300秒内有10个key内容发生更改,就执行快照机制
save 60 10000 #60秒内如果有10000个key以上的变化,就自动快照备份
stop-writes-on-bgsave-error yes #默认为yes时,可能会因空间满等原因快照无法保存出错时,会禁止redis写入操作,生产建议为no
#此项只针对配置文件中的自动save有效
rdbcompression yes #持久化到RDB文件时,是否压缩,"yes"为压缩,"no"则反之
rdbchecksum yes #是否对备份文件开启RC64校验,默认是开启
dbfilename dump.rdb #快照文件名
dir ./ #快照文件保存路径,示例:dir "/apps/redis/data"
#主从复制相关
# replicaof <masterip> <masterport> #指定复制的master主机地址和端口,5.0版之前的指令为slaveof
# masterauth <master-password> #指定复制的master主机的密码
replica-serve-stale-data yes #当从库同主库失去连接或者复制正在进行,从机库有两种运行方式:
1、设置为yes(默认设置),从库会继续响应客户端的读请求,此为建议值
2、设置为no,除去特定命令外的任何请求都会返回一个错误"SYNC with master in progress"。
replica-read-only yes #是否设置从库只读,建议值为yes,否则主库同步从库时可能会覆盖数据,造成数据丢失
repl-diskless-sync no #是否使用socket方式复制数据(无盘同步),新slave第一次连接master时需要做数据的全量同步,redis server就要从内存dump出新的RDB文件,然后从master传到slave,有两种方式把RDB文件传输给客户端:
1、基于硬盘(disk-backed):为no时,master创建一个新进程dump生成RDB磁盘文件,RDB完成之后由父进程(即主进程)将RDB文件发送给slaves,此为默认值
2、基于socket(diskless):master创建一个新进程直接dump RDB至slave的网络socket,不经过主进程和硬盘
#推荐使用基于硬盘(为no),是因为RDB文件创建后,可以同时传输给更多的slave,但是基于socket(为yes), 新slave连接到master之后得逐个同步数据。只有当磁盘I/O较慢且网络较快时,可用diskless(yes),否则一般建议使用磁盘(no)
repl-diskless-sync-delay 5 #diskless时复制的服务器等待的延迟时间,设置0为关闭,在延迟时间内到达的客户端,会一起通过diskless方式同步数据,但是一旦复制开始,master节点不会再接收新slave的复制请求,直到下一次同步开始才再接收新请求。即无法为延迟时间后到达的新副本提供服务,新副本将排队等待下一次RDB传输,因此服务器会等待一段时间才能让更多副本到达。推荐值:30-60
repl-ping-replica-period 10 #slave根据master指定的时间进行周期性的PING master,用于监测master状态,默认10s
repl-timeout 60 #复制连接的超时时间,需要大于repl-ping-slave-period,否则会经常报超时
repl-disable-tcp-nodelay no #是否在slave套接字发送SYNC之后禁用 TCP_NODELAY,如果选择"yes",Redis将合并多个报文为一个大的报文,从而使用更少数量的包向slaves发送数据,但是将使数据传输到slave上有延迟,Linux内核的默认配置会达到40毫秒,如果 "no" ,数据传输到slave的延迟将会减少,但要使用更多的带宽
repl-backlog-size 512mb #复制缓冲区内存大小,当slave断开连接一段时间后,该缓冲区会累积复制副本数据,因此当slave 重新连接时,通常不需要完全重新同步,只需传递在副本中的断开连接后没有同步的部分数据即可。只有在至少有一个slave连接之后才分配此内存空间,建议建立主从时此值要调大一些或在低峰期配置,否则会导致同步到slave失败
repl-backlog-ttl 3600 #多长时间内master没有slave连接,就清空backlog缓冲区
replica-priority 100 #当master不可用,哨兵Sentinel会根据slave的优先级选举一个master,此值最低的slave会优先当选master,而配置成0,永远不会被选举,一般多个slave都设为一样的值,让其自动选择
#min-replicas-to-write 3 #至少有3个可连接的slave,mater才接受写操作
#min-replicas-max-lag 10 #和上面至少3个slave的ping延迟不能超过10秒,否则master也将停止写操作
requirepass foobared #设置redis连接密码,之后需要AUTH pass,如果有特殊符号,用" "引起来,生产建议设置
rename-command #重命名一些高危命令,示例:rename-command FLUSHALL "" 禁用命令
#示例: rename-command FLUSHALL 123456
maxclients 10000 #Redis最大连接客户端
maxmemory <bytes> #redis使用的最大内存,单位为bytes字节,0为不限制,建议设为物理内存一半,8G内存的计算方式8(G)*1024(MB)1024(KB)*1024(Kbyte),需要注意的是缓冲区是不计算在maxmemory内,生产中如果不设置此项,可能会导致OOM
appendonly no #是否开启AOF日志记录,默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了,但是redis如果中途宕机,会导致可能有几分钟的数据丢失(取决于dump数据的间隔时间),根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性,Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。默认不启用此功能
appendfilename "appendonly.aof" #文本文件AOF的文件名,存放在dir指令指定的目录中
appendfsync everysec #aof持久化策略的配置
#no表示由操作系统保证数据同步到磁盘,Linux的默认fsync策略是30秒,最多会丢失30s的数据
#always表示每次写入都执行fsync,以保证数据同步到磁盘,安全性高,性能较差
#everysec表示每秒执行一次fsync,可能会导致丢失这1s数据,此为默认值,也生产建议值
#同时在执行bgrewriteaof操作和主进程写aof文件的操作,两者都会操作磁盘,而bgrewriteaof往往会涉及大量磁盘操作,这样就会造成主进程在写aof文件的时候出现阻塞的情形,以下参数实现控制
no-appendfsync-on-rewrite no #在aof rewrite期间,是否对aof新记录的append暂缓使用文件同步策略,主要考虑磁盘IO开支和请求阻塞时间。#默认为no,表示"不暂缓",新的aof记录仍然会被立即同步到磁盘,是最安全的方式,不会丢失数据,但是要忍受阻塞的问题
#为yes,相当于将appendfsync设置为no,这说明并没有执行磁盘操作,只是写入了缓冲区,因此这样并不会造成阻塞(因为没有竞争磁盘),但是如果这个时候redis挂掉,就会丢失数据。丢失多少数据呢?Linux默认fsync策略是30秒,最多会丢失30s的数据,但由于yes性能较好而且会避免出现阻塞因此比较推荐
#rewrite 即对aof文件进行整理,将空闲空间回收,从而可以减少恢复数据时间
auto-aof-rewrite-percentage 100 #当Aof log增长超过指定百分比例时,重写AOF文件,设置为0表示不自动重写Aof日志,重写是为了使aof体积保持最小,但是还可以确保保存最完整的数据
auto-aof-rewrite-min-size 64mb #触发aof rewrite的最小文件大小
aof-load-truncated yes #是否加载由于某些原因导致的末尾异常的AOF文件(主进程被kill/断电等),建议yes
aof-use-rdb-preamble no #redis4.0新增RDB-AOF混合持久化格式,在开启了这个功能之后,AOF重写产生的文件将同时包含RDB格式的内容和AOF格式的内容,其中RDB格式的内容用于记录已有的数据,而AOF格式的内容则用于记录最近发生了变化的数据,这样Redis就可以同时兼有RDB持久化和AOF持久化的优点(既能够快速地生成重写文件,也能够在出现问题时,快速地载入数据),默认为no,即不启用此功能
lua-time-limit 5000 #lua脚本的最大执行时间,单位为毫秒
cluster-enabled yes #是否开启集群模式,默认不开启,即单机模式
cluster-config-file nodes-6379.conf #由node节点自动生成的集群配置文件名称
cluster-node-timeout 15000 #集群中node节点连接超时时间,单位ms,超过此时间,会踢出集群
cluster-replica-validity-factor 10 #单位为次,在执行故障转移的时候可能有些节点和master断开一段时间导致数据比较旧,这些节点就不适用于选举为master,超过这个时间的就不会被进行故障转移,不能当选master,计算公式:(node-timeout * replica-validity-factor) + repl-pingreplica-period
cluster-migration-barrier 1 #集群迁移屏障,一个主节点至少拥有1个正常工作的从节点,即如果主节点的slave节点故障后会将多余的从节点分配到当前主节点成为其新的从节点。
cluster-require-full-coverage yes #集群请求槽位全部覆盖,如果一个主库宕机且没有备库就会出现集群槽位不全,那么yes时redis集群槽位验证不全,就不再对外提供服务(对key赋值时,会出现CLUSTERDOWN The cluster is down的提示,cluster_state:fail,但ping 仍PONG),而no则可以继续使用,但是会出现查询数据查不到的情况(因为有数据丢失)
cluster-replica-no-failover no #如果为yes,此选项阻止在主服务器发生故障时尝试对其主服务器进行故障转移。 但是,主服务器仍然可以执行手动强制故障转移,一般为no
#Slow log 是 Redis 用来记录超过指定执行时间的日志系统,执行时间不包括与客户端交谈,发送回复等I/O操作,而是实际执行命令所需的时间(在该阶段线程被阻塞并且不能同时为其它请求提供服务),由于slow log 保存在内存里面,读写速度非常快,因此可放心地使用,不必担心因为开启 slow log 而影响Redis 的速度
slowlog-log-slower-than 10000 #以微秒为单位的慢日志记录,为负数会禁用慢日志,为0会记录每个命令操作。默认值为10ms,一般一条命令执行都在微秒级,生产建议设为1ms-10ms之间
slowlog-max-len 128 #最多记录多少条慢日志的保存队列长度,达到此长度后,记录新命令会将最旧的命令从命令队列中删除,以此滚动删除,即,先进先出,队列固定长度,默认128,值偏小,生产建议设为1000以上
五、Redis命令
5.1 config临时配置
该命令在重启redis后,配置全部失效
#临时设置连接密码
127.0.0.1:6379> CONFIG SET requirepass 123456
OK
#临时设置最大内存
127.0.0.1:6379> CONFIG SET maxmemory 8589934592
OK
127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "8589934592"
CONFIG GET slow-log-slower-then #慢查询列表
SLOWLOG LEN #查看慢日志的记录条数
SLOWLOG RESET #清空慢日志
slowlog get [number]
# 查看全部慢日志 [查看一定数量的慢日志]
5.2 INFO
显示当前节点redis运行状态信息
INFO
#查看当前节点运行状态信息
INFO replication
#查看主从复制的信息
5.3 select
切换数据库,相当于在MySQL的 USE DBNAME 指令
#默认redis配置中有16个数据库,即编号为0~15的数据库
select 1 #进入1数据库
#每个数据库相互独立,数据不互通
注意: 在 redis cluster 模式下不支持多个数据库,会出现下面错误
5.4 keys
查看当前库下的所有keys,此命令在生产环境中慎用!
127.0.0.1:6379> KEYS *
1) "9527"
2) "9526"
3) "paihangbang"
4) "list1"
#支持通配符
redis> KEYS *o*
1) "four"
2) "two"
3) "one"
redis> KEYS t??
1) "two"
redis> KEYS * # 匹配数据库内所有
key 1) "four"
2) "three"
3) "two"
4) "one"
5.5 mest
#一次性设置多个key
MSET one 1 two 2 three 3 four 4 # 一次设置 4 个 key OK
5.6 bgsave
#手动在后台执行RDB持久化操作
BGSAVE
Background saving started
5.7 dbsize
返回当前库下的所有key 数量
DBSIZE
(integer) 4
SELECT 1
OK
DBSIZE (integer) 0
5.8 flushdb
强制清空当前库中的所有key,此命令慎用
DBSIZE
(integer) 4
FLUSHDB
OK
DBSIZE
(integer) 0
5.9 flushall
强制清空当前redis服务器所有数据库中的所有key,即删除所有数据,此命令慎用!
FLUSHALL OK
生产环境中,可以使用rename配置,来修改此命令,以免失误删除,当然了,能删除说明你故意的;)
rename-command FLUSHALL "" #rename-command 在6.2.4版淘汰了