Redis基础技术 - yiyixiaozhi/readingNotes GitHub Wiki

Redis基础技术

Windows-Redis搭建

下载页面地址:https://github.com/microsoftarchive/redis/releaseshttps://github.com/microsoftarchive/redis/releases/download/win-3.0.504/Redis-x64-3.0.504.zip

启动后,如果连接时出现报错:

Caused by: io.lettuce.core.RedisCommandExecutionException: ERR Client sent AUTH, but no password is set

解决方法,redis-cli.exe配置密码yiyixiaozhi:

127.0.0.1:6379> CONFIG SET requirepass "yiyixiaozhi" 

Docker安装redis

https://hub.docker.com/_/redis?tab=tagshttps://www.runoob.com/docker/docker-install-redis.html

设置docker开机自启

systemctl enable docker.service 
systemctl start docker.service 
systemctl status docker.service

下载redis

docker pull redis:5.0.7

启动redis

不设置密码,启动:

docker run -itd --name redis-5.0.7 -p 6379:6379 --restart=always redis:5.0.7

设置密码,启动:

docker run -itd --name redis-5.0.7 -p 6379:6379 --restart=always redis:5.0.7 --requirepass 123456

使用配置文件来启动:

redis.conf文件的一些常用配置如下:

bind 将这个注释掉,保证redis可以远程访问

requirepass 设置密码

daemonize 这个要注释掉,不然docker容器起不来

appendonly 用于开启AOF(Append-only file)默认是no,如果想开启,改成yes即可。

hbxy01机器的配置:

从其他设备拷贝配置文件 
scp [email protected]:/usr/local/redis-5.0.7/redis.conf /usr/local/redis-5.0.7/redis.conf  
chown redis:redis /var/lib/redis/data/ 
chown redis:redis /usr/local/redis-5.0.7/redis.conf 
docker run -itd --name redis-5.0.7 \\ 
-p 6379:6379 \\ 
-v /usr/local/redis-5.0.7/redis.conf:/etc/redis/redis.conf \\ 
-v /var/lib/redis/data:/data \\ 
--restart=always \\ 
redis:5.0.7 redis-server /etc/redis/redis.conf

西安135机器的配置:

配置文件位置:wget http://download.redis.io/redis-stable/redis.conf
这里从服务器进行拷贝
scp [email protected]:/usr/local/redis-5.0.7/redis.conf /mybtrfs/redis-5.0.7/redis.conf
// 创建用户和组
groupadd -r redis && useradd -r -g redis redis
// 修改权限
chown redis:redis /mybtrfs/redis-5.0.7/data/ 
chown redis:redis /mybtrfs/redis-5.0.7/redis.conf
// 启动
docker run -itd --name redis-5.0.7 \
-p 6379:6379 \
-v /mybtrfs/redis-5.0.7/redis.conf:/etc/redis/redis.conf \
-v /mybtrfs/redis-5.0.7/data:/data \
--restart=always \
redis:5.0.7 \
redis-server /etc/redis/redis.conf

CentOS防火墙

防火墙放行6379端口

firewall-cmd  --zone=public  --add-port=6379/tcp  --permanent  
firewall-cmd  --reload 

进入docker容器中的redis

docker exec -it redis-5.0.7 sh

从其他地方拷贝数据:

先停止docker: 
docker stop redis-5.0.7 
在源数据redis服务器登录后执行save指令,得到dump.rdb文件 
拷贝数据: 
scp [email protected]:/var/lib/redis/6379/dump.rdb /var/lib/redis/data/ 
启动redis服务 
docker start redis-5.0.7

查看版本:

# docker exec -it redis-5.0.7 redis-server -v 
Redis server v=5.0.7 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=825c96d6c798641

为现有的redis创建密码或修改密码的方法:

1.进入redis的容器 docker exec -it 容器ID bash 
2.进入redis目录 /usr/local/bin  
3.运行命令:redis-cli 
4.查看现有的redis密码:config get requirepass 
5.设置redis密码config set requirepass ****(****为你要设置的密码) 
6.若出现(error) NOAUTH Authentication required.错误,则使用 auth 密码 来认证密码 
127.0.0.1:6379> auth yyxz@

CentOS-Redis搭建

下载地址:http://download.redis.io/releases/

执行命令:

# 下载
wget http://download.redis.io/releases/redis-stable.tar.gz
# wget http://download.redis.io/releases/redis-5.0.7.tar.gz
# 解压
tar -zxvf redis-stable.tar.gz
# 安装(root账号下)
yum -y install gcc gcc-c++ libstdc++-devel 
cd redis-stable
make MALLOC=libc
make install

报错及解决:

[root@MiWiFi-R2D-srv src]# make MALLOC=libc 
  LINK redis-server
cc: error: ../deps/hiredis/libhiredis.a: No such file or directory
cc: error: ../deps/lua/src/liblua.a: No such file or directory

# 解决办法
cd deps/
make hiredis jemalloc linenoise lua
cd ../src/
make install
测试是否安装成功:
cd /home/yyxz/download/redis/redis-stable/src/
./redis-server

初始化配置文件

修改文件:

/usr/local/redis-5.0.7/redis.conf
# 初始化密码
requirepass yiyixiaozhi
# 后台进程方式启动
daemonize yes
# 关闭保护模式
## 1、关闭protected-mode模式,此时外部网络可以直接访问
## 2、开启protected-mode保护模式,需配置bind ip或者设置访问密码
protected-mode no
# 注释掉本地登录限制
#bind 127.0.0.1

启动redis的三种方式

1、直接启动redis

cd /usr/local/redis-5.0.7/src
./redis-server

2、以后台进程方式启动redis

第一步:修改redis.conf文件

将 
daemonize no  
修改为
daemonize yes

第二步:指定redis.conf文件启动

./redis-server /usr/local/redis-4.0.6/redis.conf

第三步:关闭redis进程

首先使用ps -aux | grep redis查看redis进程

[root@iZwz991stxdwj560bfmadtZ src]# ps -aux | grep redis 
root   18714  0.0  0.1 141752  2008 ?     Ssl  13:07  0:00 ./redis-server 127.0.0.1:6379 
root   18719  0.0  0.0 112644  968 pts/0   R+  13:09  0:00 grep --color=auto redis 
使用kill命令杀死进程 
[root@iZwz991stxdwj560bfmadtZ src]# kill 18714

CentOS7设置Redis开机自启动

1、编写redis.conf配置文件

[root@localhost ftpsite]# /usr/local/redis-5.0.7/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/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   : /usr/local/bin/redis-server
Cli Executable : /usr/local/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!

2、检查是否redis自动启动

## chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。 
[root@localhost 6379]# chkconfig --list 
Note: This output shows SysV services only and does not include native 
   systemd services. SysV configuration data might be overridden by native 
   systemd configuration. 
   If you want to list systemd services use 'systemctl list-unit-files'. 
   To see services enabled on particular target use 
   'systemctl list-dependencies [target]'. 
jenkins         0:off     1:off     2:on     3:on     4:on     5:on     6:off 
jexec          0:off     1:on     2:on     3:on     4:on     5:on     6:off 
netconsole       0:off     1:off     2:off     3:off     4:off     5:off     6:off 
network         0:off     1:off     2:on     3:on     4:on     5:on     6:off 
redis_6379       0:off     1:off     2:on     3:on     4:on     5:on     6:off 
## 等级0表示:表示关机 
## 等级1表示:单用户模式 
## 等级2表示:无网络连接的多用户命令行模式 
## 等级3表示:有网络连接的多用户命令行模式 
## 等级4表示:不可用 
## 等级5表示:带图形界面的多用户模式 
## 等级6表示:重新启动

查看服务状态:

[root@localhost ~]# systemctl status redis_6379.service  
● redis_6379.service - LSB: start and stop redis_6379 
  Loaded: loaded (/etc/rc.d/init.d/redis_6379; bad; vendor preset: disabled) 
  Active: active (running) since Wed 2020-01-08 21:40:47 CST; 16min ago 
   Docs: man:systemd-sysv-generator(8) 
 Process: 4223 ExecStart=/etc/rc.d/init.d/redis_6379 start (code=exited, status=0/SUCCESS) 
  Tasks: 4 
  Memory: 180.0K 
  CGroup: /system.slice/redis_6379.service 
      └─4274 /usr/local/bin/redis-server *:6379 
Jan 08 21:40:47 localhost.localdomain systemd[1]: Starting LSB: start and stop redis_6379... 
Jan 08 21:40:47 localhost.localdomain redis_6379[4223]: Starting Redis server... 
Jan 08 21:40:47 localhost.localdomain systemd[1]: Started LSB: start and stop redis_6379.

解决Redis导致的关机等待问题

修改如下文件,关闭Redis时需要密码验证

vim /etc/init.d/redis_6379 
#$CLIEXEC -p $REDISPORT shutdown 
$CLIEXEC -p $REDISPORT -a yiyixiaozhi shutdown ## Add by bryan,否则Redis阻止关机(默认5分钟)

常见操作

批量删除示例

redis-cli -h 192.168.1.230 -p 6379 -a yyxz@ keys "test*" | xargs redis-cli -h 192.168.1.230 -p 6379 -a yyxz@ del
查找db2的数据示例:
redis-cli -h 192.168.1.230 -p 6379 -a yyxz@ -n 2 keys "test*" | xargs redis-cli -h 192.168.1.230 -p 6379 -a yyxz@ -n 2 del
# 本机登录删除示例:
redis-cli -a yyxz@ keys "t_wx_account::*" | xargs redis-cli -a yyxz@ del

生产环境redis批量删除示例(登录本机后执行):

redis-cli -a yyxz@ keys "third_plat_form*" | xargs redis-cli -a yyxz@ del 
redis-cli -a yyxz@ keys "t_wx_account::*" | xargs redis-cli -a yyxz@ del 
redis-cli -a yyxz@ keys "t_qz_third_id_map::*" | xargs redis-cli -a yyxz@ del 
redis-cli -a yyxz@ keys "t_school::*" | xargs redis-cli -a yyxz@ del
redis-cli -a yyxz@ keys "rel_user_dept::*" | xargs redis-cli -a yyxz@ del

性能分析

参考:https://www.cnblogs.com/mushroom/p/4738170.html

性能测试:

redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 10000 -q

网络时延分析:

redis-cli --latency -h 172.31.192.2 -p 6379 
[yyxz@localhost ~]$ redis-cli -h 192.168.1.152 -p 6379 
192.168.1.152:6379> auth yyxz@ 
OK 
192.168.1.152:6379> info 
192.168.1.152:6379> select 1 
192.168.1.152:6379[1]> config set slowlog-log-slower-than 200 
OK 
192.168.1.152:6379[1]> config get slowlog-log-slower-than 
1) "slowlog-log-slower-than" 
2) "200" 
192.168.1.152:6379> slowlog reset 
OK 
192.168.1.152:6379> slowlog get 10

参考

⚠️ **GitHub.com Fallback** ⚠️