Linux--Redis配置与优化
Redis配置与优化
一、关系数据库和非关系数据库
1. 关系型数据库
● 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。
● 主要包括:Oracle、MySQL、SQL Server、Microsoft Access、DB2等。
2. 非关系型数据库
● 非关系型数据库(NoSQL,Not Only SQL)意思是"不仅仅是SQL",是非关系型数据库的总称。
● 除了主流的关系型数据库外的数据库,都认为是非关系型数据库。
● 主要包括:Redis、MongDB、Hbase、Memcached等。
3. 非关系型数据库产生背景
可用于应对Web2.0纯动态网站类型的三高问题
● High Performance
对数据库高并发读写需求
● High Storage
对海量数据高效存储与访问需求
● High Scalability && High Availability
对数据库高可扩展性与高看可用性需求
4. 关系型数据库和非关系型数据库的区别
4.1 数据存储方式不同
关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的和合列中。数据表可以彼此关联协作存储,也很容易提取数据。
与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。
你的数据及其特性是选择数据存储和提取方式的首要影响因素。
4.2 扩展方式不同
SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。
要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过 提高计算机性能来克服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。
而NoSQL数据库是横向扩展的,因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。
4.3 对事务性的支持不同
如果数据操纵需要高事务型或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。
虽然NoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。
5. 总结
(1)关系型数据库:
实例-->数据库-->表(table)-->记录行(row)-->数据字段(column)
(2)非关系型数据库
实例-->数据库-->集合(collection)-->键值对(key-value)
非关系型数据库不需要手动创建数据和集合(表)。
二、Redis的基础概念
1. Redis简介

● Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的、使用C语言编写的NoSQL数据库。
● Redis基于内存运行并支持持久化,采用key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环。
2. Redis程序
Redis服务器程序是单进程模型,也就是在一台服务器上可以同时启动多个Redis进程,Redis的实际处理速度则是完全依靠于主进程的执行效率。若在服务器上只运行一个Redis进程,当多个客户端同时访问时,服务器的处理能力是会有一定程度的下降;若在同一台服务器上开启多个Redis进程,Redis在提高并发处理能力的同时会给服务器的CPU造成很大压力。
即:在实际生产环境中,需要根据实际的需求来决定开启多少个Redis进程。若对高并发要求更高一些,可能会考虑在同一台服务器上开启多个进程。若CPU资源比较紧张,采用单进程即可。
3. Redis的优点
● 具有极高的数据读写速度
数据读取的速度最高可达到110000次/秒,数据写入速度最高可达到81000次/秒。
● 支持丰富的数据类型
支持key-value、String、Lists、Hashes、Sets及Stored Sets等数据类型操作。
● 支持数据的持久化
可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
● 原子性
Redis所有操作都是原子性的。
● 支持数据备份
即master-slave模式的数据备份。
4. Redis的使用场景
Redis作为基于内存运行的数据库,缓存是最长应用的场景之一。除此之外,Redis常见应用场景还包括获取最新N个数据的操作、排行榜类应用、计算器应用、存储关系、实时分析系统、日志记录等。
5. Redis速度快的原因
● Redis是纯内存结构,避免了磁盘的I/O等耗时操作。
● Redis命令处理的核心模块为单线程,减少了锁竞争,以及频繁创建线程和销毁线程的代价,减少了线程上下文切换的消耗。
● 采用了I/O多路复用机制,大大提升了并发效率。
I/O多路复用程序虽然会同时监听多个socket连接,但是其会将监听的socket都放到一个队列里面,然后通过这个队列有序的,同步的将每个socket对应的时间传送到文件事件分派器,再由文件事件分派器给对应的事件处理器进行处理,只有当一个socket所对应的事件被处理完毕之后,I/O多路复用程序才会继续向文件事件分派器传送下一个socket所对应的的事件,这也可以验证上面的结论,处理客户端的命令请求是单线程的方式逐个处理,但是事件处理器内并不是只有一个线程。
6. Redis与Memcashed区别
官方网站:https://www.redis.io
下载地址:https://download.redis.io/releases/
三、Redis安装部署
1. 关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
setenforce: SELinux is disabled
2. 源码编译安装
[root@localhost ~]# yum install -y gcc gcc-c++ make
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
redis-5.0.7.tar.gz
[root@localhost opt]# tar xf redis-5.0.7.tar.gz
[root@localhost opt]# cd redis-5.0.7
[root@localhost redis-5.0.7]# make && make PREFIX=/usr/local/redis install
由于Redis源码包中直接提供了Makefile文件,所以在解压完软件包后,不用先执行./configure进行配置,可直接执行make与make install命令进行安装
[root@localhost redis-5.0.7]# cd utils/
执行软件包提供的install_server.sh脚本文件设置Redis服务所需要相关配置文件
[root@localhost utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379]回车
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]回车
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]回车
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]回车
Selected default - /var/lib/redis/6379
Please select the redis executable path [] /usr/local/redis/bin/redis-server注意要一次性正确输入
Selected config:
Port : 6379
默认侦听端口为6379
Config file : /etc/redis/6379.conf
配置文件路径
Log file : /var/log/redis_6379.log
日志文件路径
Data dir : /var/lib/redis/6379
数据文件路径
Executable : /usr/local/redis/bin/redis-server
可执行文件路径
Cli Executable : /usr/local/redis/bin/redis-cli
客户端命令工具
Is this ok? Then press ENTER to go on or Ctrl-C to abort.确认并回车
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
3. 优化路径
[root@localhost utils]# ln -s /usr/local/redis/bin/* /usr/local/bin
把redis的可执行程序文件放入路径环境变量的目录中便于系统识别
[root@localhost utils]# netstat -natp | grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 15234/redis-server
当install_server.sh脚本运行完毕,Redis服务就已经启动,默认监听端口为6379
4. Redis服务控制
/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start
/etc/init.d/redis_6379 restart
/etc/init.d/redis_6379 status
5. 修改/etc/redis/6379.conf配置参数
[root@localhost utils]# vim /etc/redis/6379.conf
70 bind 127.0.0.1 192.168.10.2 添加监听的主机地址
93 port 6379 Redis默认的监听端口
137 daemonize yes 启用守护进程
159 pidfile /var/run/redis_6379.pid 指定PID文件
167 loglevel notice 日志级别
172 logfile /var/log/redis_6379.log 指定日志文件
[root@localhost utils]# /etc/init.d/redis_6379 restart修改完配置文件时一定要重启
其他配置参数
114 timeout 300 指定当客户端闲置多长时间后关闭连接。如果指定为0,表示关闭该功能
254 dfleme dump rdb 指定本地数据库文件名,默认值为dump.rdb
264 dir /rlib/redi/6379 指定本地数据库存放目录
540 maxclients 10000
设置同一时间最大客户端连接数,默认为10000,Redis 可以同时打开的客户端连接数为Redis 进程可以打开的最大文件描述符数。如果设置maxclients0.表示不限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回max number of clients reached错误信息
242 rdbcompression yes
指定存储至本地数据库时是否压缩数据,默认为yes, Redis 采用LZF压缩。为了节省CPU资源,可以关闭该选项,但会导致数据库文件变得巨大
手动添加 slaveof <masterip> smasterport>
当本机为slave从服务器时,设置master服务的IP地址及端口,在Redis启
动时,它会自动从master进行数据同步
294 masterauth <master password> 当本机为从服务时,设置主服务的连接密码
508 requirepass foobared
设置Redis连接密码。如果配置了连接密码,客户端在连接Redis时需要通过AUTH <password>命令提供密码,默认为关闭
567 maxmemory <byts>
指定Redis最大内存限制。Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制会把Key存放内存,Value 会存放在swap区
700 appendonly no
指定是否在每次更新操作后进行日志记录。Redis 在默认情况下是异步地把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据 丢失。因为Redis 本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
704 appendfilename appendonly.aof 指定更新日志文件名,默认为apendonly.aof
730 appendfsyne everysec
指定更新日志条件,共有三个可选值:
no:表示等操作系统进行数据缓存同步到磁盘(快)
always:表示每次更新操作后手动调用fsyne( )将数据写到磁盘(慢,安全)
everysec:表示每秒同步一次(折中,默认值)
1158 activerehashing yes
指定是否激活重置哈希,默认为开启
36 include ptoeal.conf
指定包含其他的配置文件,可以在同一主机上多个Redis实例之间使用同份配置文件,而同时各个实例又拥有自己的特定配置文件四、Redis管理控制
1. Redis命令工具
redis-server:用于启动Redis的工具,redis-setinel是它的软链接
redis-benchmark:用于检测Redis在本机的运行效率
redis-check-aof:修复AOF持久化文件
redis-check-rdb:修复RDB持久化文件
redis-cli:Redis命令行工具
2. redis-cli命令行工具
语法:redis-cli -h root -p port -a password
-h:指定远程主机
-p:指定Redis服务的端口号
-a:指定密码,未设置数据库密码可以省略-a选项
若不添加任何选项表示,则使用127.0.0.1:6379连接本机上的Redis数据库
[root@localhost utils]# redis-cli -h 192.168.10.2 -p 6379 连接到主机192.168.10.2,端口为6379的数据库
192.168.10.2:6379> ping
PONG
192.168.10.2:6379> quit
[root@localhost utils]# redis-cli 连接上本机上的Redis数据库
127.0.0.1:6379> ping 检测Redis服务是否启动
PONG
127.0.0.1:6379> quit 退出数据库
help @<group>获取<group>中的命令列表
例:help @list 查看所有与list相关的命令
help <command>获取某个命令的帮助
例:help set 查看set命令的命令帮助
help <tab>获取可能帮助的主题列表
3. redis-benchmark测试工具
redis-benchmark是官方自带的Redis性能测试工具,可以有效的测试Redis服务的性能。
基本的测试语法:redis-benchmark [选项] [选项值]
常用选项 | 说明 |
-h | 指定服务器主机名 |
-p | 指定服务器端口 |
-s | 指定服务器socket |
-c | 指定并发连接数 |
-n | 指定请求数 |
-d | 以字节的形式指定SET/GET值的数据大小 |
-k | 1=keep alive 0=reconnect |
-r | SET/GET/INCR使用随机key,SADD使用随机值 |
-P | 通过管道传输请求 |
-q | 强制退出redis,仅显示query/sec值 |
--csv | 以CSV格式输出 |
-l | 生成循环,永久执行测试 |
-t | 仅运行以逗号分隔的测试命令列表 |
-I | Idle模式,仅打开N个idle连接并等待 |
向IP地址为192.168.10.2,端口号为6379的Redis服务器发送100个并发连接与100000个请求测试性能
因为结果太长了,就不截图了
[root@localhost ~]# redis-benchmark -h 192.168.10.2 -p 6379 -c 100 -n 100000
====== PING_INLINE ======
100000 requests completed in 0.92 seconds
100 parallel clients
3 bytes payload
keep alive: 1
93.30% <= 1 milliseconds
99.60% <= 2 milliseconds
99.88% <= 3 milliseconds
99.90% <= 15 milliseconds
99.93% <= 16 milliseconds
99.98% <= 17 milliseconds
100.00% <= 17 milliseconds
108225.10 requests per second
====== PING_BULK ======
100000 requests completed in 0.90 seconds
100 parallel clients
3 bytes payload
keep alive: 1
95.28% <= 1 milliseconds
99.96% <= 2 milliseconds
100.00% <= 3 milliseconds
100.00% <= 3 milliseconds
110864.74 requests per second
====== SET ======
100000 requests completed in 0.94 seconds
100 parallel clients
3 bytes payload
keep alive: 1
94.01% <= 1 milliseconds
99.81% <= 2 milliseconds
99.86% <= 3 milliseconds
99.90% <= 8 milliseconds
99.90% <= 17 milliseconds
99.90% <= 23 milliseconds
99.94% <= 24 milliseconds
99.97% <= 25 milliseconds
100.00% <= 25 milliseconds
105932.20 requests per second
====== GET ======
100000 requests completed in 0.90 seconds
100 parallel clients
3 bytes payload
keep alive: 1
95.01% <= 1 milliseconds
99.77% <= 2 milliseconds
100.00% <= 2 milliseconds
110741.97 requests per second
====== INCR ======
100000 requests completed in 0.94 seconds
100 parallel clients
3 bytes payload
keep alive: 1
91.86% <= 1 milliseconds
99.76% <= 2 milliseconds
100.00% <= 2 milliseconds
106157.12 requests per second
====== LPUSH ======
100000 requests completed in 0.87 seconds
100 parallel clients
3 bytes payload
keep alive: 1
95.85% <= 1 milliseconds
99.89% <= 2 milliseconds
99.99% <= 3 milliseconds
100.00% <= 3 milliseconds
115340.26 requests per second
====== RPUSH ======
100000 requests completed in 1.00 seconds
100 parallel clients
3 bytes payload
keep alive: 1
90.96% <= 1 milliseconds
99.25% <= 2 milliseconds
99.84% <= 3 milliseconds
100.00% <= 4 milliseconds
100.00% <= 4 milliseconds
100401.61 requests per second
====== LPOP ======
100000 requests completed in 0.88 seconds
100 parallel clients
3 bytes payload
keep alive: 1
96.65% <= 1 milliseconds
99.68% <= 2 milliseconds
100.00% <= 2 milliseconds
113250.28 requests per second
====== RPOP ======
100000 requests completed in 0.96 seconds
100 parallel clients
3 bytes payload
keep alive: 1
95.13% <= 1 milliseconds
99.85% <= 2 milliseconds
100.00% <= 2 milliseconds
104058.27 requests per second
====== SADD ======
100000 requests completed in 0.97 seconds
100 parallel clients
3 bytes payload
keep alive: 1
92.29% <= 1 milliseconds
99.21% <= 2 milliseconds
99.88% <= 3 milliseconds
100.00% <= 4 milliseconds
100.00% <= 4 milliseconds
103092.78 requests per second
====== HSET ======
100000 requests completed in 0.95 seconds
100 parallel clients
3 bytes payload
keep alive: 1
90.62% <= 1 milliseconds
99.70% <= 2 milliseconds
99.97% <= 3 milliseconds
99.99% <= 4 milliseconds
100.00% <= 4 milliseconds
104712.05 requests per second
====== SPOP ======
100000 requests completed in 0.94 seconds
100 parallel clients
3 bytes payload
keep alive: 1
95.03% <= 1 milliseconds
99.78% <= 2 milliseconds
100.00% <= 2 milliseconds
106837.61 requests per second
====== LPUSH (needed to benchmark LRANGE) ======
100000 requests completed in 0.92 seconds
100 parallel clients
3 bytes payload
keep alive: 1
93.54% <= 1 milliseconds
99.80% <= 2 milliseconds
99.99% <= 3 milliseconds
100.00% <= 3 milliseconds
108342.37 requests per second
====== LRANGE_100 (first 100 elements) ======
100000 requests completed in 1.76 seconds
100 parallel clients
3 bytes payload
keep alive: 1
62.63% <= 1 milliseconds
93.52% <= 2 milliseconds
99.18% <= 3 milliseconds
99.93% <= 4 milliseconds
100.00% <= 4 milliseconds
56882.82 requests per second
====== LRANGE_300 (first 300 elements) ======
100000 requests completed in 4.07 seconds
100 parallel clients
3 bytes payload
keep alive: 1
0.00% <= 1 milliseconds
38.56% <= 2 milliseconds
81.14% <= 3 milliseconds
92.37% <= 4 milliseconds
96.78% <= 5 milliseconds
98.81% <= 6 milliseconds
99.62% <= 7 milliseconds
99.93% <= 8 milliseconds
100.00% <= 9 milliseconds
100.00% <= 9 milliseconds
24594.20 requests per second
====== LRANGE_500 (first 450 elements) ======
100000 requests completed in 5.45 seconds
100 parallel clients
3 bytes payload
keep alive: 1
0.00% <= 1 milliseconds
1.54% <= 2 milliseconds
54.99% <= 3 milliseconds
79.70% <= 4 milliseconds
88.95% <= 5 milliseconds
93.39% <= 6 milliseconds
96.61% <= 7 milliseconds
98.57% <= 8 milliseconds
99.54% <= 9 milliseconds
99.89% <= 10 milliseconds
99.97% <= 11 milliseconds
100.00% <= 12 milliseconds
100.00% <= 12 milliseconds
18358.73 requests per second
====== LRANGE_600 (first 600 elements) ======
100000 requests completed in 6.63 seconds
100 parallel clients
3 bytes payload
keep alive: 1
0.00% <= 1 milliseconds
0.14% <= 2 milliseconds
21.30% <= 3 milliseconds
67.75% <= 4 milliseconds
81.44% <= 5 milliseconds
88.51% <= 6 milliseconds
92.61% <= 7 milliseconds
95.14% <= 8 milliseconds
97.40% <= 9 milliseconds
98.77% <= 10 milliseconds
99.51% <= 11 milliseconds
99.85% <= 12 milliseconds
99.95% <= 13 milliseconds
100.00% <= 14 milliseconds
100.00% <= 14 milliseconds
15087.51 requests per second
====== MSET (10 keys) ======
100000 requests completed in 0.96 seconds
100 parallel clients
3 bytes payload
keep alive: 1
88.28% <= 1 milliseconds
99.47% <= 2 milliseconds
100.00% <= 2 milliseconds
103950.10 requests per second
测试存取大小为100字节的数据包的性能
[root@localhost ~]# redis-benchmark -h 192.168.10.2 -p 6379 -q -d 100
PING_INLINE: 118203.30 requests per second
PING_BULK: 114810.56 requests per second
SET: 109289.62 requests per second
GET: 108577.63 requests per second
INCR: 115874.86 requests per second
LPUSH: 113250.28 requests per second
RPUSH: 112994.35 requests per second
LPOP: 105708.25 requests per second
RPOP: 116686.12 requests per second
SADD: 115740.73 requests per second
HSET: 116144.02 requests per second
SPOP: 113765.64 requests per second
LPUSH (needed to benchmark LRANGE): 117096.02 requests per second
LRANGE_100 (first 100 elements): 42643.92 requests per second
LRANGE_300 (first 300 elements): 15103.46 requests per second
LRANGE_500 (first 450 elements): 9968.10 requests per second
LRANGE_600 (first 600 elements): 7401.92 requests per second
MSET (10 keys): 86730.27 requests per second
测试本机上Redis服务在进行set与lpush操作时的性能
[root@localhost ~]# redis-benchmark -t set,lpush -n 100000 -q
SET: 117924.53 requests per second
LPUSH: 118483.41 requests per second
五、Redis数据库常用命令
1. set/get
set:存放数据,命令格式为set key value
get:获取数据,命令格式为get key
[root@localhost ~]# redis-cli
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> get name
"zhangsan"
2. keys
keys命令可以取符合规则的键值列表,通常情况可以结合*、?等选项来使用
127.0.0.1:6379> keys *
1) "counter:__rand_int__"
2) "name"
3) "myset:__rand_int__"
4) "mylist"
5) "key:__rand_int__"
创建键后匹配
127.0.0.1:6379> set k1 1
OK
127.0.0.1:6379> set k2 2
OK
127.0.0.1:6379> set k3 3
OK
127.0.0.1:6379> set v1 1
OK
127.0.0.1:6379> set v2 3
OK
127.0.0.1:6379> set v3 5
OK
127.0.0.1:6379> set v11 7
OK
127.0.0.1:6379> keys *
1) "counter:__rand_int__"
2) "v11"
3) "k3"
4) "myset:__rand_int__"
5) "v2"
6) "name"
7) "k2"
8) "v1"
9) "v3"
10) "mylist"
11) "key:__rand_int__"
12) "k1"
127.0.0.1:6379> keys v*
查看当前数据库中以v开头的数据
1) "v11"
2) "v2"
3) "v1"
4) "v3"
127.0.0.1:6379> keys k*
查看当前数据库中以k开头的数据
1) "k3"
2) "k2"
3) "key:__rand_int__"
4) "k1"
127.0.0.1:6379> keys *1
查看当前数据库中以1结尾的数据
1) "v11"
2) "v1"
3) "k1"
127.0.0.1:6379> keys ?1
查看当前数据库中以1结尾并且1前面包含任意一位的数据,例如:e1,g1,y1,51……它们的共同点都是末尾是1的2位数据
1) "v1"
2) "k1"
127.0.0.1:6379> keys ??1
查看当前数据库中以1结尾并且1前面包含任意两位的数据
1) "v11"
127.0.0.1:6379> keys ?11
查看当前数据库中以11结尾并且11前面包含任意一位的数据
1) "v11"
3. exists
exists命令可以判断键值是否存在
127.0.0.1:6379> exists name
判断name键是否存在
(integer) 1
1表示存在
127.0.0.1:6379> exists v11
判断v11键是否存在
(integer) 1
127.0.0.1:6379> exists fdhfs
判断fdhfs键是否存在
(integer) 0
0表示不存在
4. del
del命令可以删除当前数据库的指定key
127.0.0.1:6379> del name
删除name键
(integer) 1
删除成功
127.0.0.1:6379> get name
(nil)
获取不了name键的值
127.0.0.1:6379> exists name
(integer) 0
也无法查看到
127.0.0.1:6379> keys name
(empty list or set)
也无法查看到
127.0.0.1:6379> del namhfd
删除namhfd键
(integer) 0
因为不存在namhfd键,所以删除失败
以下基本命令多练练
127.0.0.1:6379> set name 111
重新设置name键
OK
127.0.0.1:6379> keys name
1) "name"
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> get name
"111"
5. type
type命令可以获取key对应的value值类型
127.0.0.1:6379> keys *
先查看数据
1) "counter:__rand_int__"
2) "v11"
3) "k3"
4) "myset:__rand_int__"
5) "name"
6) "v2"
7) "k2"
8) "v1"
9) "v3"
10) "mylist"
11) "key:__rand_int__"
12) "k1"
127.0.0.1:6379> type k1
获取k1键对应的value类型
string
下面的是命令练习
127.0.0.1:6379> type k2
string
127.0.0.1:6379> type v11
string
127.0.0.1:6379> type name
string
127.0.0.1:6379> set opt opt
OK
127.0.0.1:6379> type opt
string
127.0.0.1:6379> del opt
(integer) 1
127.0.0.1:6379> del name
(integer) 1
6. rename
rename命令是对已有key进行重命名(覆盖)
命令格式:rename 源key 目标key
使用rename命令进行重命名时,无论目标key是否存在都进行重命名,且源key的值会覆盖目标key的值。在实际使用过程中,建议先用exists命令查看目标key是否存在,然后再决定是都执行rename命令,以避免覆盖重要数据。
重命名:
127.0.0.1:6379> keys v*
1) "v11"
2) "v2"
3) "v1"
4) "v3"
127.0.0.1:6379> rename v11 v4
将v11键重命名为v4
OK
127.0.0.1:6379> keys v*
1) "v4"
2) "v2"
3) "v1"
4) "v3"
覆盖:
127.0.0.1:6379> get v1
"1"
127.0.0.1:6379> get v2
"3"
127.0.0.1:6379> rename v1 v2
将v1的值覆盖成v2的值
OK
127.0.0.1:6379> keys v*
1) "v4"
2) "v2"
3) "v3"
127.0.0.1:6379> get v1
(nil)
127.0.0.1:6379> get v2
"1"
7. renamenx
renamenx命令的作用是对已有key进行重命名,并检测新名是否存在,如果目标key存在则不进行重命名(不覆盖)
命令格式:renamenx 源key 目标key
127.0.0.1:6379> keys v*
1) "v4"
2) "v2"
3) "v3"
127.0.0.1:6379> renamenx v4 v2
已有v2键,重命名失败
(integer) 0
127.0.0.1:6379> renamenx v4 v1
把v4键重命名为v1键
(integer) 1
127.0.0.1:6379> keys v*
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> renamenx v3 v1
v1键已存在,重命名失败
(integer) 0
127.0.0.1:6379> keys v*
1) "v1"
2) "v2"
3) "v3"
8. dbsize
dbsize命令的作用是查看当前数据库中key的数目
127.0.0.1:6379> keys *
1) "counter:__rand_int__"
2) "k3"
3) "myset:__rand_int__"
4) "v1"
5) "v2"
6) "k2"
7) "v3"
8) "mylist"
9) "key:__rand_int__"
10) "k1"
127.0.0.1:6379> dbsize
(integer) 10
9. 密码设置
使用"config set requirepass password"命令设置密码
127.0.0.1:6379> config set requirepass 123456
OK
设置数据库密码为123456
10. 密码验证
使用auth命令验证密码,一旦设置密码,每次登陆后必须先验证通过密码,否则所有操作不可用
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123456验证密码
OK
127.0.0.1:6379> keys *
1) "counter:__rand_int__"
2) "k3"
3) "myset:__rand_int__"
4) "v1"
5) "v2"
6) "k2"
7) "v3"
8) "mylist"
9) "key:__rand_int__"
10) "k1"
也可在登录时使用-a选项,输入密码。
[root@localhost ~]# redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> quit
注:由于密码将被直接暴露,有被history盗密的风险,因此需谨慎使用。
11. 查看密码
使用"config get requirepass"命令查看密码
[root@localhost ~]# redis-cli
127.0.0.1:6379> config get requirepass
(error) NOAUTH Authentication required.
127.0.0.1:6379> quit
[root@localhost ~]# redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "123456"
127.0.0.1:6379> quit
[root@localhost ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "123456"
12. 取消密码
使用"config set requirepass ''"命令通过重定义空密码的方式,清空密码并取消密码验证
127.0.0.1:6379> config get requirepass 查看密码
1) "requirepass"
2) "123456"
127.0.0.1:6379> config set requirepass '' 设置空密码
OK
127.0.0.1:6379> config get requirepass查看密码
1) "requirepass"
2) "" 空的
127.0.0.1:6379> quit
[root@localhost ~]# redis-cli 本地登录
127.0.0.1:6379> keys v* 操作可使用
1) "v1"
2) "v2"
3) "v3"
13. Redis多数据库常用命令
Redis支持多数据库,Redis默认情况下包含16个数据库,数据库名称是用数字0-15来依次命名的。
多数据库相互独立,互不干扰。
13.1 多数据库间切换
命令格式:select 序号
使用redis-cli连接Redis数据库后,默认使用的是序号为0的数据库
127.0.0.1:6379> select 10
OK
127.0.0.1:6379[10]> select 15
OK
127.0.0.1:6379[15]> select 16
(error) ERR DB index is out of range
超出限制
127.0.0.1:6379[15]> select 1
OK
127.0.0.1:6379[1]> select 0
OK
13.2 多数据库间移动数据
格式:move 键值 序号
127.0.0.1:6379> set name zhangsan 创建"name"键并赋值"zhangsan"
OK
127.0.0.1:6379> get name 查看"name"键
"zhangsan"
127.0.0.1:6379> select 1 切换至数据库1
OK
127.0.0.1:6379[1]> get name 查看"name"键,确认数据库1没有"name"键
(nil)
127.0.0.1:6379[1]> select 0 切换回数据库0
OK
127.0.0.1:6379> move name 1 将数据库0中的"name"键移动至数据库1
(integer) 1
127.0.0.1:6379> get name 查看"name"键,确认数据库0中已无"name"键
(nil)
127.0.0.1:6379> select 1 切换至数据库1
OK
127.0.0.1:6379[1]> get name 查看"name"键,确认已将"name"键从数据库0移动到数据库1
"zhangsan"
13.3 清除数据库数据
flushdb:清空当前数据库数据
flushall:清空所有数据库的数据,慎用
127.0.0.1:6379> select 1 切换至数据库1
OK
127.0.0.1:6379[1]> keys * 查看键
1) "name"
127.0.0.1:6379[1]> flushdb 清空当前数据库
OK
127.0.0.1:6379[1]> keys * 查看键,确认已清空
(empty list or set)
127.0.0.1:6379[1]> select 0 切换至数据库0
OK
127.0.0.1:6379> keys * 查看键
1) "counter:__rand_int__"
2) "k3"
3) "myset:__rand_int__"
4) "v1"
5) "v2"
6) "k2"
7) "v3"
8) "mylist"
9) "key:__rand_int__"
10) "k1"
127.0.0.1:6379> select 1 切换至数据库1
OK
127.0.0.1:6379[1]> flushall 清空全部数据库
OK
127.0.0.1:6379[1]> select 0 切换至数据库0
OK
127.0.0.1:6379> keys * 查看键,确认已清空全部库
(empty list or set)

浙公网安备 33010602011771号