“纸上得来终觉浅,绝知此事要躬行” --陆游《冬夜读书示子聿》
Redis约定次版本号(即第一个小数点后的数字)为偶数的版本是稳定版(如2.8版,3.0版),奇数版本是非稳定版(如2.7版,2.9版),生产环境下一般需要使用稳定版本。
Redis是C语言编写的,所以在编译前要安装编译环境gcc
[root@VM-0-17-centos ~]# yum install -y gcc
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
epel | 4.7 kB 00:00:00
extras | 2.9 kB 00:00:00
os | 3.6 kB 00:00:00
updates | 2.9 kB 00:00:00
Resolving Dependencies
...
一是,在官网下载后,上传到linux中
二是,直接在linux通过wget下载
Redis官网下载:https://redis.io/download
安装wget
[root@VM-0-17-centos ~]# yum install -y wget
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Package wget-1.14-18.el7_6.1.x86_64 already installed and latest version
Nothing to do
下载redis-6.2.4.tar.gz
[root@VM-0-17-centos ~]# wget https://download.redis.io/releases/redis-6.2.4.tar.gz
--2021-06-22 09:26:34-- https://download.redis.io/releases/redis-6.2.4.tar.gz
Resolving download.redis.io (download.redis.io)... 45.60.125.1
Connecting to download.redis.io (download.redis.io)|45.60.125.1|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2457940 (2.3M) [application/octet-stream]
Saving to: ‘redis-6.2.4.tar.gz’
100%[==============================================================================================================================================================================>] 2,457,940 5.30MB/s in 0.4s
2021-06-22 09:26:34 (5.30 MB/s) - ‘redis-6.2.4.tar.gz’ saved [2457940/2457940]
[root@VM-0-17-centos ~]# ll
total 2404
-rw-r--r-- 1 root root 2457940 Jun 1 22:16 redis-6.2.4.tar.gz
解压不查看日志
[root@VM-0-17-centos ~]# tar xzf redis-6.2.4.tar.gz
[root@VM-0-17-centos ~]# ll
total 2408
drwxrwxr-x 7 root root 4096 Jun 1 22:03 redis-6.2.4
-rw-r--r-- 1 root root 2457940 Jun 1 22:16 redis-6.2.4.tar.gz
[root@VM-0-17-centos ~]# cd redis-6.2.4/
[root@VM-0-17-centos redis-6.2.4]# make
...
...
Hint: It's a good idea to run 'make test' ;)
make[1]: Leaving directory `/root/redis-6.2.4/src'
[root@VM-0-17-centos redis-6.2.4]# mkdir -p /opt/su/redis6
[root@VM-0-17-centos redis-6.2.4]# make install PREFIX=/opt/su/redis6
cd src && make install
make[1]: Entering directory `/root/redis-6.2.4/src'
CC Makefile.dep
make[1]: Leaving directory `/root/redis-6.2.4/src'
make[1]: Entering directory `/root/redis-6.2.4/src'
Hint: It's a good idea to run 'make test' ;)
INSTALL redis-server
INSTALL redis-benchmark
INSTALL redis-cli
make[1]: Leaving directory `/root/redis-6.2.4/src'
首先配置环境变量
[root@VM-0-17-centos redis-6.2.4]# vim /etc/profile
在末尾添加
export REDIS_HOME=/opt/su/redis6
export PATH=$PATH:$REDIS_HOME/bin
生效配置文件
[root@VM-0-17-centos redis-6.2.4]# source /etc/profile
进入redis安装目录,执行install_server.sh脚本
[root@VM-0-17-centos redis-6.2.4]# cd utils/
[root@VM-0-17-centos utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
This systems seems to use systemd.
Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!
出现以上错误,需要修改install_server.sh脚本,若没有出现错误则跳过
[root@VM-0-17-centos utils]# vi ./install_server.sh
注释文件中以下部分
#bail if this system is managed by systemd
#_pid_1_exe="$(readlink -f /proc/1/exe)"
#if [ "${_pid_1_exe##*/}" = systemd ]
#then
# echo "This systems seems to use systemd."
# echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!"
# exit 1
#fi
重新执行安装脚本,选择默认直接按Enter键即可
[root@VM-0-17-centos 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 [/opt/su/redis6/bin/redis-server]
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /var/lib/redis/6379
Executable : /opt/su/redis6/bin/redis-server
Cli Executable : /opt/su/redis6/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!
默认安装时已经启动redis,查看redis运行状态
[root@VM-0-17-centos utils]# service redis_6379 status
Redis is running (22952)
通过redis-cli连接redis
[root@VM-0-17-centos ~]# redis-cli
127.0.0.1:6379> set key1 hello
OK
127.0.0.1:6379> get key1
"hello"
127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> get num
"2"
127.0.0.1:6379> keys *
1) "key1"
2) "num"
127.0.0.1:6379>
文件名 | 说明 |
---|---|
redis-server | Redis服务器 |
redis-cli | Redis命令行客户端 |
redis-benchmark | Redis性能测试工具 |
redis-check-aof | AOF文件检查工具 |
redis-check-rdb | RDB文件检查工具 |
redis-sentinel | Sentinel服务器 |
我们最常用的两个程序时redis-server和redis-cli,其中redis-server是Redis的服务器,启动Redis即运行redis-server;而redis-cli是Redis自带的Redis命令行客户端,是学习Redis的重要工具。
[root@VM-0-17-centos ~]# redis-server
Redis服务器默认会使用6379端口,通过 --port参数可以自定义端口号:
[root@VM-0-17-centos ~]# redis-server --port 6380
6379是手机键盘上MERZ对应的数字,MERZ是一名意大利歌女的名字。
[root@VM-0-17-centos ~]# service redis_6379 start
Starting Redis server...
考虑到Redis有可能正在将内存中的数据同步到硬盘中,强行终止Redis进程可能会导致数据丢失。正确停止Redis的方式应该是想Redis发送SHUTDOWN命令
[root@VM-0-17-centos ~]# redis-cli SHUTDOWN
当Redis收到SHUTDOWN命令后,会先断开所有客户端连接,然后根据配置执行持久化,最后完成瑞出。
7393:M 22 Jun 2021 21:54:25.047 # User requested shutdown...
7393:M 22 Jun 2021 21:54:25.047 * Saving the final RDB snapshot before exiting.
7393:M 22 Jun 2021 21:54:25.051 * DB saved on disk
7393:M 22 Jun 2021 21:54:25.051 # Redis is now ready to exit, bye bye...
redis-cli(Redis Command Line Interface)是Redis自带的基于命令行的Redis客户端。
redis-cli执行时会自动按照默认配置(服务器地址为127.0.0.1,端口号为6379)连接Redis,通过-h和-p参数可以自定义地址和端口:
[root@VM-0-17-centos ~]# redis-cli 127.0.0.1 -p 6379
Redis提供了PING命令来测试客户端与Redis的连接是否正常,如果连接正常会收到PONG:
[root@VM-0-17-centos ~]# redis-cli PING
PONG
[root@VM-0-17-centos ~]# redis-cli
127.0.0.1:6379> PING
PONG
127.0.0.1:6379> ECHO hi
"hi"
127.0.0.1:6379>
在大多数情况下,执行一条命令后我们往往会关心命令的返回值。命令的返回值有5种类型,对于每种类型redis-cli的展现结果不同,分别说明:
状态回复(status reply)是最简单的一种回复,比如向Redis发送SET命令设置某个键的值时,Redis会回复状态OK表示设置成功。另外之前演示的对PING命令的回复PONG也是状态回复。状态回复直接显示状态信息。
当出现命令不存在或命令格式有错误等情况时,Redis会返回错误回复(error reply)。错误回复以(error)开头,并在后面跟上错误信息,如执行一条不存在的命令:
127.0.0.1:6379> ewqeq
(error) ERR unknown command `ewqeq`, with args beginning with:
127.0.0.1:6379> LPUSH key 1
(integer) 1
127.0.0.1:6379> get key
(error) WRONGTYPE Operation against a key holding the wrong kind of value
Redis虽然没有整数类型,但是却提供了一些用于整数操作的命令,如递增键值的INCR命令会以整数形式返回递增后的键值。整数回复(integer reply)以(integer)开头,并在后面跟上整数数据:
127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> incr num
(integer) 2
字符串回复(bulk reply)是最常见的一种回复类型,当请求一个字符串类型的键的键值或一个其他类型键中的某个元素时,就会得到一个字符串回复。字符串回复以双引号包裹:
127.0.0.1:6379> get num
"2"
特殊情况是当请求的键值不存在时会得到一个空结果,显示为(nil)。如:
127.0.0.1:6379> get nnn
(nil)
多行字符串回复(multi-bulk reply)同样很常见,如当请求一个非字符串类型键的元素列表时,就会收到多行字符串回复。多行字符串回复中的每行字符串都以一个序号开头,如:
127.0.0.1:6379> keys *
1) "num"
2) "key"
3) "su"
前面提到可以通过redis-server的启动参数port设置Redis的端口号,除此之外Redis还支持其他配置选项,如是否开启持久化、日志级别等。由于可以配置的选项较多,通过启动参数设置这些选项并不方便,所以Redis支持通过配置文件来设置这些选项。启用配置文件的方法是在启动时,将配置文件的路径作为启动参数传递给redis-server,如:
[root@VM-0-17-centos ~]# redis-server /path/to/redis.conf
通过启动参数传递同名的配置选项会覆盖文件中相应的参数,如:
[root@VM-0-17-centos ~]# redis-server /path/to/redis.conf --loglevel warning
Redis提供了一个配置文件的模板redis.conf,位于源代码目录的根目录中。
除此之外,还可以在Redis运行时通过CONFIG SET命令在不重启Redis的情况下动态修改部分Redis配置,如:
127.0.0.1:6379> CONFIG SET loglevel warning
OK
并不是所有的配置都可以使用CONFIG SET命令修改。同样在运行时,可以使用CONFIG GET命令获取Redis当前的配置情况,如:
127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "warning"
其中第一行字符串回复表示的是选项名,第二行即是选项值。
一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中,这与我们熟知的在一个关系型数据库实例中可以创建多个数据库类似,所以可以将其中的每个字典都理解成一个独立的数据库。
每个数据库对外都是以一个从0开始的递增数字命名,Redis默认支持16个数据库,可以通过配置参数databases来修改这一数字。客户端与Redis建立连接后会自动选择0号数据库,不过可以使用SELECT 命令更改数据库,如要选择1号数据库:
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get key
(nil)
author:su1573
鄙人记录生活点滴,学习并分享,请多指教!!!
如需交流,请联系 [email protected],鄙人看到会及时回复