NoSQL(“non-relational”, “Not Only SQL”),泛指非关系型的数据库。
Redis 在生产中使用最多的场景就是做数据缓存。即客户端从 DBMS 中查询出的数据首先写入到 Redis 中,后续无论哪个客户端再需要访问该数据,直接读取 Redis 中的即可,不仅减小了响应时间 RT,而且降低了 DBMS 的压力。
根据 Redis 缓存的数据与 DBMS 中数据的同步性划分,缓存一般可划分为两类:实时同步缓存,与阶段性同步缓存。
实时同步缓存是指,DBMS 中数据更新后,Redis 缓存中的存放的相关数据会被立即清除,于是乎,若再有对该数据的访问请求到来时,必须先从 DBMS 中查询获取到最新数据,然后再写入到 Redis。
阶段性同步缓存是指,Redis 缓存中的数据允许在一段时间内与 DBMS 中的数据不完全一致。而这个时间段就是这个缓存数据的过期时间。
Redis服务器处理客户端请求所采用的处理架构,称为 Redis 的 IO 模型。不同版本的 Redis 采用的 IO 模型是不同的。对于Redis 6之后的版本,采用多线程模型。
由于 Redis 是由 C/C++语言编写的,而从官网下载的 Redis 安装包是需要编译后才可安装的,所以对其进行编译就必须要使用相关编译器。对于 C/C++语言的编译器,使用最多的是gcc 与 gcc-c++,而这两款编译器在 CentOS7 中是没有安装的,本次首先安装这两款编译器。尽管gcc包含了gcc-c++,但我们安装时仍指定后者,避免不必要的麻烦。
yum -y install gcc gcc-c++
安装完成检查版本
gcc -v
新建一个文件夹,位置是/opt/tools.
工具左端, 图形化的形式列出了各个linux中的文件(夹)
进入/opt/tools
选择第三个图标进行上传, 将win中的redis压缩包上传.
如果上传失败并提示权限不足, ls -l查看权限,只要不是rwxrwxrwx, 就是权限不够
chmod -R 777 tools ,给足权限.即可上传成功
在tools下新建一个apps文件夹, 然后
tar -zxvf redis-7.0.15.tar.gz -C /opt/apps
编译过程是根据 Makefile 文件进行的,而 Redis 解压包中已经存在该文件了。所以可以直接进行编译了。
通过修改 Linux 中 Redis 的核心配置文件 redis.conf 达到后台启动的目的。redis.conf 文件在Redis 的安装目录根下。
vim编辑redis.conf,将 daemonize 属性值由 no 改为 yes,使 Redis 进程以守护进程方式运行。
此时启动命令为
redis-server redis.conf
Redis 是一个内存数据库服务器,就像 MySQL 一样,对其操作也需要通过客户端进行。
若要使远程主机上的客户端能够连接并访问到服务端的 Redis,则服务端首先要做如下配置。
Redis 可以通过修改配置文件来限定可以访问自己的客户端 IP。
在redis.conf中,默认是:
bind 127.0.0.1 -::1
代表着只允许当前主机访问。这当然不好,我们要使用ssh远程访问。故将这句话注释掉,这样,所有人都能访问本Redis服务器。
默认保护模式是开启的。其只允许本机的客户端访问,即只允许自己访问自己。但生产中应该关闭,以确保其它客户端可以连接 Redis。
将protected-mode 属性由yes改为no
为 Redis 设置访问密码,可以对要读/写 Redis 的用户进行身份验证。没有密码的用户可以登录 Redis,但无法访问。
访问密码的设置requirepass位置大概在45%的位置。默认是被注释掉的,没有密码。现在改为需要111
requirepass 111
对于密码的使用,有两种方式:登录时未使用密码,则访问时先输入密码;登录时直接使用密码登录,访问时无需再输入密码。
a.登陆时未使用密码:每次redis-cli之后,第一条操作命令之前,都要使用指令输入密码:
在设置了密码并且没有使用密码登录的情况下
若使用了redis-cli进入了操作模式,先用 auth 密码鉴权,然后shutdown结束操作模式,quit退出到linux命令行
因此,为了后续学习方便,把配置文件中的requirepass注释掉,不需要密码。
如果不自动启动,每次都要跑到conf所在地方(或输命令时手动指定),才能以配置文件方式启动,
在/etc/rc.d/init.d下新建redis.sh
#!bin/sh
#chkconfig: 2345 80 90
#Description:auto_run
/usr/local/bin/redis-server /opt/apps/redis715/redis.conf
#要注意,看看usr/local/bin下有没有redis-server这个东西,没有的话就把地址改去redis下的redis-server
给该文件增加权限 chmod 777 redis.sh
然后sh redis.sh, 即可执行该脚本,执行后redis会开启, 可以用ps -ef|grep redis检查是否正在执行
.
最后, chkconfig redis.sh on ,即可实现开机自启动.
疑问点, 网络上还存在着一个复杂脚本,不清楚两者实现效果有何不同:
#!/bin/sh
# chkconfig: 2345 80 90
# description: Redis is a persistent key-value database
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/usr/local/redis/redis.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF &
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
restart)
"$0" stop
sleep 3
"$0" start
;;
*)
echo "Please use start or stop or restart as first argument"
;;
esac
Redis 提供了基本的命令行客户端。打开命令行客户端的命令为 redis-cli。
并且可以附带两个参数:
这里选择Another Redis Destop Manger
https://gitee.com/qishibo/AnotherRedisDesktopManager/releases
在虚拟机中插入一个简单键值对:
set name sunsplanter