什么是NoSQL?
NoSQL(Not Only SQL):非关系型数据库
包括:
·Redis:基于内存的KV结构的数据;
·MongoDB:文档型数据库,擅长存储JSON(BSON)数据;
·HBase:列存储数据库,大数据存储;
特点:
·存储半结构化、非结构化数据;
·海量存储(通过分布式);
·高并发场景;
Redis
Redis(Remote Dictionary Server)
远程字典服务。
·内存型数据库:数据存储到内存中的,读写速度快(几十GB/s);
·支持高并发,查询11万次/秒,写入8万次/秒;
·支持持久化(将数据定期存储到磁盘中);
·常用于缓存,存储热点数据、临时数据;通过加缓存,可以提高并发,减少成本。
Redis优缺点
··优点:
对数据高并发读写
对海量数据的高效率存储和访问
对数据具有的可扩展性和高可用性
··缺点:
redis(ACID)处理非常简单
无法做到太复杂的关系数据库模型
Redia常用数据类型:
·字符串(string)
·哈希(hash)
·集合(set)
·列表(list)
·有序集合(sorted sets)
·空间结构
缓存失败常见的问题:
1、缓存击穿:一个热点的key失效,直接访问到数据库,导致数据库访问量激增。(有数据但是过期了)
·加锁,从数据库中读取数据写入缓存后,返回给用户;
·延长过期时间,通过异步的⽅式不断的刷新过期时间;
2、缓存穿透:大量用户访问不存在的数据,导致请求直接访问数据库,占用数据库大量的资源。
·缓存空值/默认值
·布隆过滤器做一层过滤
3、缓存雪崩:最严重的缓存问题,缓存自身崩溃或者有大量的key都过期,后端数据库压力急剧增加,导致业务中断或直接崩溃。
·缓存增加备份、高可用;
·缓存集群;
·过期时间设置均匀一些;
·多级缓存;
安装Redis操作步骤
## 手动安装Redis
1.指定Redis存放位置
cd /usr/local/src/
wget http://download.redis.io/releases/redis-6.2.14.tar.gz
如果80端口无法下载,可以尝试443端口
wget https://download.redis.io/releases/redis-6.2.14.tar.gz
2.解压
tar -xvf redis-6.2.14.tar.gz
3.安装依赖
可以不删除重建
yum clean all
yum makecache fast
yum -y install gcc gcc-c++ make tcl
(可选安装) 安装新版本gcc
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
source /opt/rh/devtoolset-9/enable
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
4.查看GCC版本
gcc --version
5. Redis的编译安装和配置文件处理
cd /usr/local/src/redis-6.2.14
make && make PREFIX=/usr/local/redis install
mkdir -p /usr/local/redis/{etc,logs,data}
egrep -v "^$|^#" redis.conf > /usr/local/redis/etc/redis.conf
6.启动服务
cd /usr/local/redis/bin
./redis-server
7.进入Redis不要关,在xshell中再开一个,连接登录
cd /usr/local/redis/bin
./redis-cli
#########################################################
## 快速安装Redis
1.提前配好yum源或apt源
cd /etc/yum.repos.d/
2.编辑安装脚本
cd /usr/local/redis/bin
vim redis_install.sh
+++++++++++++++++++++++++++++++++++++
#!/bin/bash
# 检查系统类型
if [ -f /etc/os-release ]; then
. /etc/os-release
OS_NAME=$NAME
OS_VERSION=$VERSION_ID
else
echo "无法识别操作系统"
exit 1
fi
echo "当前操作系统: $OS_NAME $OS_VERSION"
# 根据操作系统选择安装命令
if [[ "$OS_NAME" == "Ubuntu" ]]; then
# 更新包列表并安装依赖
apt update
apt -y install build-essential tcl wget
elif [[ "$OS_NAME" == "CentOS Linux" ]] || [[ "$OS_NAME" == "Red Hat" ]]; then
yum -y install gcc gcc-c++ make tcl wget
else
echo "不支持的操作系统"
exit 1
fi
cd /usr/local/src
# 下载Redis源码包
if [ -f redis-6.2.14.tar.gz ]; then
echo "redis-6.2.14.tar.gz已存在不需要下载!"
else
# wget http://download.redis.io/releases/redis-6.2.14.tar.gz
wget http://192.168.56.200/Software/redis-6.2.14.tar.gz
fi
# 解压源码包
tar -xvf redis-6.2.14.tar.gz
# 进入解压后的目录
cd redis-6.2.14
# Redis编译安装
make
make PREFIX=/usr/local/redis install
# Redis基础配置
mkdir -p /usr/local/redis/{etc,logs,data}
egrep -v "^$|^#" redis.conf > /usr/local/redis/etc/redis.conf
sed -i "s/bind 127.0.0.1/bind 0.0.0.0/g" /usr/local/redis/etc/redis.conf
sed -i "s/protected-mode yes/protected-mode no/g" /usr/local/redis/etc/redis.conf
sed -i "s/daemonize no/daemonize yes/g" /usr/local/redis/etc/redis.conf
sed -i "s/pidfile \/var\/run\/redis_6379.pid/pidfile \/usr\/local\/redis\/redis.pid/g" /usr/local/redis/etc/redis.conf
sed -i "s/dir \.\//dir \/usr\/local\/redis\/data/g" /usr/local/redis/etc/redis.conf
sed -i "s/logfile \"\"/logfile \"\/usr\/local\/redis\/logs\/redis.log\"/g" /usr/local/redis/etc/redis.conf
# 将配置文件复制到/etc下
mkdir -p /etc/redis/
cp /usr/local/redis/etc/redis.conf /etc/redis/
# 启动redis
/usr/local/redis/bin/redis-server /etc/redis/redis.conf
# 更新PATH环境变量
echo 'export PATH=$PATH:/usr/local/redis/bin/' >> /etc/profile
. /etc/profile
# 查看redis监听端口
echo "查看redis监听端口:"
netstat -tanp | grep redis
+++++++++++++++++++++++++++++++++++++++++++
3.执行脚本
bash redis_install.sh
4.编辑Redis启动、关机、重启的脚本
vim redis.sh
+++++++++++++++++++++++++++++++++++++++++++
#!/bin/bash
REDIS_PATH="/usr/local/redis"
REDIS_CONF="/etc/redis/redis.conf"
PID_FILE="$REDIS_PATH/redis.pid"
start() {
if [ -f $PID_FILE ]; then
echo "Redis is already running."
exit 1
fi
echo "Starting Redis..."
$REDIS_PATH/bin/redis-server $REDIS_CONF &
echo $! > $PID_FILE
echo "Redis started."
}
stop() {
if [ ! -f $PID_FILE ]; then
echo "Redis is not running."
exit 1
fi
echo "Stopping Redis..."
kill $(cat $PID_FILE)
rm $PID_FILE
echo "Redis stopped."
}
restart() {
stop
sleep 1
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
+++++++++++++++++++++++++++++++++++++++++++
5.赋予可执行权限
chmod +x redis.sh
6.进入bin目录启动Redis
cd /usr/local/redis/bin
./redis.sh start # 启动Redis服务器
./redis.sh stop # 停止Redis服务器
./redis.sh restart # 重启Redis服务器(不太好用)
7.进入Redis
cd /usr/local/redis/bin
./redis-cli
8.其余命令
(1)查看端口(Redis默认端口6379)
netstat -lnutp|grep 6379
(2)查看是否启动
ps -ef|grep redis或./bin/redis-cli ping
前台启动
./bin/redis-server
后台启动
vim /usr/local/redis/etc/redis.conf
daemonize yes # 把前台启动改成后台启动
指定配置文件启动
./bin/redis-server ./etc/redis.conf
(3)关闭redis
./bin/redis-cli shutdown
Redis基础配置
Redis 高并发原理
Redis是纯内存数据库,一般都是简单的存取操作,线程占用的时间很多,时间的花费主要集中在IO上,所以读取速度快
Redis使用的是非阻塞 IO,IO 多路复用,使用了单线程来轮询描述符,将数据库的开、关、读、写都转换成了事件,减少了线程切换时上下文的切换和竞争。
Redis采用了单线程的模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争。
Redis存储结构多样化,不同的数据结构对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据结构加快读取的速度。
Redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。
cat /usr/local/redis/etc/redis.conf
| 配置项名称 | 配置项值范围 | 说明 |
| daemonize | yes、no | yes表示后台启动,默认是no即前台模式运行。 |
| port | 6379 | 指定 Redis 监听端口,默认端口为 6379 |
| bind | 绑定的主机地址,如果需要设置远程访问则直接将这个属性备注下或者改为bind * 即可,0.0.0.0表示可以任意地址访问 这个属性和下面的protected-mode控制了是否a可以远程访问 | |
| protected-mode | yes 、no | 安全模式,该模式控制外部网是否可以连接redis服务,默认是yes,无法被外网访问,no表示可以被外部访问 |
| pidfile | /usr/local/redis/redis.pid | pid文件,记录运行时的pid号 |
| loglevel | debug、verbose、notice、warning | 日志级别,默认为 notice |
| logfile | /usr/local/redis/logs/redis.log | log日志路径 |
| databases | 16 | 设置Redis数据库的数量,默认数据库是0 |
| rdbcompression | yes、no | 指定存储至本地数据库时是否压缩数据,默认为 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变得巨大 |
| dbfilename | dump.rdb | RDB快照存储名称 |
| dir | /usr/local/redis/data | 持久化存储路径 |
| requirepass | 设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH命令提供密码,默认关闭 | |
| maxclients | 0 | 设置同一时间最大客户端连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息 |
| maxmemory | XXX | 指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的 Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis 新的 vm 机制,会把 Key 存放内存,Value 会存放在 swap 区。配置项值范围列里XXX为数值 |
| appendonly | yes或no | aof日志是否开启,选择no |
| appendfilename | "appendonly.aof" | aof日志名称 |
| appendfsync | everysec | aof追加模式 |
1106

被折叠的 条评论
为什么被折叠?



