今天恰逢1024盛事,为了共襄盛举,决定把Redis相关知识梳理一下,纪念一波这个节日。之前的学习都是基于windows做的简单的数据结构、指令的一些学习,从今天开始学习下Redis的高级用法。
Redis的Linux安装
其实安装起来很简单,之前我就搭建过分布式的Centos7的虚拟机集群,感兴趣的朋友可以参见之前的一篇blog,详细介绍了如何按照、配置和操作虚拟机【分布式集群搭建 一】虚拟机配置(VMware+Centos7+SecureCRT+AppNode),这里就不再赘述。有了Linux的虚拟机环境,Redis的安装就很简单了,接下来我们还是使用SecureCRT来执行远程操作,同时在AppNode可视化的查看安装状态。
下载Redis到Linux
下载的时候先去官网查看下最新版本Redis官方下载地址,可以看到现在最新稳定版是6.0.8版本。
我们直接使用wget命令进行下载 wget https://download.redis.io/releases/redis-6.0.8.tar.gz
下载速度还是非常快的,下载完成后我们直接进行解压tar -zvxf redis-6.0.8.tar.gz
,解压完成后所有目录都被打印了出来:
编译Redis
接下来我们编译下Redis,运行命令make
,但是发现有如下报错:
提示gcc命令未找到,这是因为redis没有安装gcc编译器没安装,这时候只要安装编译器即可,运行命令yum install -y gcc g++ gcc-c++ make
,安装完成后显示:
此时再次执行又会出现如下报错:
此时查了资料发现,需要更新gcc的版本,当前gcc版本太低。查看gcc版本,gcc -v
使用如下命令进行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 # 临时启用gcc9.1版本 echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile #长期使用gcc 9.1
启用完成后再次执行编译命令make
,结果又报错了。
从网上查了,原来是需要进入deps文件夹下执行如下命令:make lua hiredis linenoise
,好吧,执行完后经历了千辛万苦,终于看到了理想的画面:
安装Redis
编译终于成功了,然后我们运行下Redis的安装,使用命令make install
,安装也是ok的:
安装完成后我们进入Redis的src目录下可以看到Redis安装的全部内容:
启动Redis服务端
接下来我们在src下敲命令redis-server
即可启动Redis的服务端,启动后又可以看到我们熟悉的画面
启动Redis客户端
接下来我们另起一个会话,启动客户端来连接Redis的服务,并且set一个key进去:
[root@192 ~]# cd redis-6.0.8/ [root@192 redis-6.0.8]# cd src/ [root@192 src]# redis-cli 127.0.0.1:6379> set name tml OK 127.0.0.1:6379> get name "tml"
Redis多终端启动
一台电脑上其实可以同时启动多个Redis服务,Redis可以换端口启动,现在默认的端口号是6379,接下来我们启动一个6380端口的Redis:
redis-server --port 6380
启动后我们从客户端如果用之前的方式连接是会报错的
redis-cli
报错内容如下:
Could not connect to Redis at 127.0.0.1:6379: Connection refused
此时启动客户端去连接需要我们指定端口号去连接:
redis-cli -p 6380
可以进行正常操作。需要注意的是,每换一个端口启动就相当于启动了一个Redis的实例,一个Redis库,这些是彼此分离的,所以你可以在一个机器上通过不同的端口号启动一堆实例,并且用对应端口号的客户端访问即可,不同的端口互不干扰,例如我在6380端口的Redis操作:
127.0.0.1:6380> set name tml OK 127.0.0.1:6380> get name "tml" 127.0.0.1:6380> set love guochengyu OK 127.0.0.1:6380> get love "guochengyu" 127.0.0.1:6380>
我从6379的端口想要获取是获取不到的,而且可以在6379端口独立操作:
127.0.0.1:6379> set name tml OK 127.0.0.1:6379> get name "tml" 127.0.0.1:6379> get love (nil) 127.0.0.1:6379>
Redis指定配置文件启动
在实际场景中,企业级多服务端启动的时候,把一个实例的配置信息持久化到配置文件中,然后指定配置文件启动,配置文件路径为:/root/redis-6.0.8/redis.conf,我们需要把它其中的关键信息分端口生成对应的配置文件,使用如下命令进行操作:
cat redis.conf | grep -v "#" | grep -v "^$" > redis-6379.conf
可以看到全部的配置信息如下:
[root@192 redis-6.0.8]# cat redis.conf | grep -v "#" | grep -v "^$" > redis-6379.conf [root@192 redis-6.0.8]# cat redis-6379.conf bind 127.0.0.1 protected-mode yes port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /var/run/redis_6379.pid loglevel notice logfile "" databases 16 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb rdb-del-sync-files no dir ./ replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-diskless-load disabled repl-disable-tcp-nodelay no replica-priority 100 acllog-max-len 128 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no lazyfree-lazy-user-del no oom-score-adj no oom-score-adj-values 0 200 800 appendonly no appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4096 stream-node-max-entries 100 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes jemalloc-bg-thread yes
其中目前指定启动的关心的核心配置是:
port 6379 //启用端口号为6379 daemonize yes //使用守护进程的模式启动,后台默认开启 logfile "redis-6379.log" //日志文件名称 dir /root/redis-6.0.8/data/ //日志文件目录,在redis下创建一个data文件夹用来存放
配置文件redis-6379.conf只保留如下配置:
由于我们配置文件可能会很多,所以统一新建一个config文件夹,所有端口配置都放进去/root/redis-6.0.8/config/
此时我们启动如下:
[root@192 redis-6.0.8]# redis-server config/redis-6379.conf [root@192 redis-6.0.8]# ps -ef | grep redis- root 34776 1 0 10:36 ? 00:00:01 redis-server *:6380 root 35067 1 0 10:43 ? 00:00:01 redis-server *:6379 root 35673 35330 0 11:11 pts/0 00:00:00 grep --color=auto redis- [root@192 redis-6.0.8]# redis-cli 127.0.0.1:6379> set love guochengyu OK 127.0.0.1:6379> get love "guochengyu" 127.0.0.1:6379>
通过守护线程启动后,可以看到存在的端口redis,我们请求一下也是可以请求成功的。同时可以查看日志文件,发现服务器启动的打印内容:
当然我们也可以复制多个配置,指定多个配置启动,举例我们再增加一个6380端口的配置:
配置内容如下:
port 6380 daemonize yes logfile "redis-6380.log" dir /root/redis-6.0.8/data/
此时我们再去启动6380端口:
[root@192 redis-6.0.8]# ps -ef | grep redis- root 35924 1 0 11:28 ? 00:00:00 redis-server *:6379 root 36032 35330 0 11:35 pts/0 00:00:00 grep --color=auto redis- [root@192 redis-6.0.8]# redis-server config/redis-6380.conf [root@192 redis-6.0.8]# ps -ef | grep redis- root 35924 1 0 11:28 ? 00:00:00 redis-server *:6379 root 36048 1 0 11:35 ? 00:00:00 redis-server *:6380 root 36054 35330 0 11:36 pts/0 00:00:00 grep --color=auto redis- [root@192 redis-6.0.8]# redis-cli -p 6380 127.0.0.1:6380> set love guochengyu OK 127.0.0.1:6380> get love "guochengyu" 127.0.0.1:6380>
首先查看Redis进程只有一个6379,然后开启6380 ,Redis进程增加一个,然后进行数据操作。同样日志文件也正常生成了:
以上就是Redis的linux部署和配置启动方式,再次祝大家程序猿节快乐!