Redis基础安装和配置

什么是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追加模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值