有勇气的牛排博客

Redis(一)介绍与安装部署( CentOS单机版、docker安装)

有勇气的牛排 648 数据库 2023-03-12 19:46:32

哈喽,大家好,我是有勇气的牛排(全网同名)🐮🐮🐮

有问题的小伙伴欢迎在文末评论,点赞、收藏是对我最大的支持!!!。

1 前言

1.1 NoSQL简介

目前市场主流数据存储都是使用关系型数据库。每次操作关系型数据库都是I/O操作,I/O操作是主要影响程序性能的原因之一,连接、关闭数据库都是消耗性能的过程.
因此,尽量减少对数据库的操作,能明显提升程序运行效率。

关系型数据库索引都是树状数据结构,当数据量超大时,树的深度就会越深,查询性能就会降低。

针对关系型数据库的缺点,市面上就有有了NoSQL(Not Only SQL)

常见的NoSQL有
memcached:键值对、内存型数据库。
redis:与memcached类似,且具有持久化能力。
HBase:大数据海量数据、以列为存储。
MongoDB:以document做存储,特别像关系型数据库。

1.2 Redis简介

Redis 是一个开源(BSD 许可)的内存数据结构存储,用作数据库、缓存和消息代理。Redis 提供数据结构,例如字符串、散列、列表、集合、具有范围查询的排序集合、位图、超日志、地理空间索引和流。Redis 具有内置复制、Lua 脚本、LRU 驱逐、事务和不同级别的磁盘持久性,并通过 Redis Sentinel 和 Redis Cluster 自动分区提供高可用性。

Redis是由C语言编写,并且用Key-value形式进行存储的NoSQL开源数据库,效率非常高。其以solt(槽) 作为数据存储单元,每个槽中可以存储N个键值对,固定有1638个槽,理论上可以实现一个槽是一个redis,每个槽受限于服务器的大小。

Redis默认16个数据库,从0开始,其中0号也为默认库。

其支持多种数据存储类型:string、lsit、set、zset、hash。这些数据类型都支持 push/pop、add/remove,交、并、差集等操作,且这些操作都是原子性的。

同时通过 Redis Sentinel(哨兵)提供高可用,通过Redis Cluster集群提供自动分区。

Reids 将数据存储在内存中,并且周期性的将数据写入磁盘中,或者修改操作写入追加的记录文件。并且在此基础上实现了 master-slave(主从) 同步。

推荐文档:https://www.redis.com.cn/commands.html

1.2.1 Reids 是单线程+多路复用技术

多路复用是指使用一个线程来检查多个文件描述(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如线程池)。

Redis官网

下载:https://download.redis.io/releases/

1.3 应用场景

1.3.1 配合关系型数据库做高速缓存(边路缓存)

(1)高频次:可以降低对热门数据访问数据库IO的操作数量。
(2)分布式架构,做session共享

cache aside pattern 边路缓存是一种指导思想,其中包括:

(1)查询的的时候先查缓存,如果缓存不存在,再查询数据库。
(2)修改缓存的时候,先修改数据库,后修改缓存。

1.3.2 多样的数据结构存储持久化数据

场景 技术
最新N个数据 通过List实现按自然时间排序的数据
排行榜,TopN 利用zset有序集合
时效性数据,如验证码 Expire过期
计数器:秒杀 原子性,自增方法INCR、DECR
去除大量数据中的重复数据 利用set集合
构建队列 利用list集合
发布订阅消息系统 pub/sub模式

2 Centos单机版安装

2.1 环境准备及安装

安装前必须具备gcc环境、C++库环境

gcc -v
yum -y install gcc-c++

查看是否已经装redis

redis-server -v

下载

mkdir /usr/local/redis cd /usr/local/redis wget https://download.redis.io/releases/redis-7.0.0.tar.gz tar -xvf redis-7.0.0.tar.gz cd redis-7.0.0

安装

make && make install

默认会安装到:/usr/local/bin, 生成如下文件

redis-benchmark:性能测试工具 redis-check-aof:修复有问题的AOF文件 redis-check-rdb:修复有问题的RDB文件 redis-cli :客户端,操作入口 redis-sentinel :Redis集群使用 redis-server :Redis服务器启动命令

2.2 配置文件

mkdir /usr/local/redis/logs mkdir /usr/local/redis/data
# 309 是否守护进程运行(后台运行) daemonize yes # 111 默认yes, 限制为本地访问 protected-mode no # 87 设置绑定的ip(或者注释,关闭限制远程) bind 0.0.0.0 # 设置端口号 port 6379 # 1036 密码 requirepass 123456 # 定期检测cli连接是否存活 tcp-keepalive 300 # 日志级别 # 可选项有: # debug(记录大量日志信息,适用于开发、测试阶段); # verbose(较多日志信息); # notice(适量日志信息,使用于生产环境); # warning(仅有部分重要、关键信息才会被记录)。 loglevel notice # 日志文件的位置 #logfile "/usr/local/redis/logs" # 最大连接数 # maxclients 10000 # 数据库个数(可选) databases 16 # 输入本地redis数据库存放文件夹(可选) dir /usr/local/redis/data # 持久化操作设置 900秒内触发一次请求进行持久化,300秒内触发10次请求进行持久化操作,60s内触发10000次请求进行持久化操作 save 900 1 save 300 10 save 60 10000 # redis持久化(可选) appendonly yes

2.3 启动

后台启动

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

查看进程

ps -ef | grep redis | grep -v gerp

连接客户端

redis-cli -p 6379 -a 123456 auth 123456

关闭

# 内部关闭 shutdonw # 远程关闭 redis-cli -a 123456 -p 6379 shutdown # 查看端口占用 lsof -i:6379

Redis 6379端口占用情况.png

2.4 卸载

ls -l /usr/local/bin/redis-* rm -rf /usr/local/bin/redis-*

3 docker 安装Redis

初始化映射目录

mkdir /usr/local/docker/redis/data mkdir /usr/local/docker/redis/logs

安装

docker run -d \ -p 6379:6379 \ --privileged=true \ -v /usr/local/docker/redis/conf/redis.conf:/etc/redis/redis.conf \ -v /usr/local/docker/redis/data:/data \ -v /usr/local/docker/redis/logs:/usr/local/logs \ --name cs_myredis redis \ --requirepass "123456" docker exec -it 96238796c979 /bin/bash
# 进入容器 docker exec -it cs_myredis /bin/bash redis-cli 或者 docker exec -it cs_myredis redis-cli

4 常见报错

make指令

cd src && make all make[1]: Entering directory `/usr/cstor/redis/src' CC adlist.o /bin/sh: cc: command not found make[1]: *** [adlist.o] Error 127 make[1]: Leaving directory `/usr/cstor/redis/src' make: *** [all] Error 2

解决方法

yum -y install gcc gcc-c++ libstdc++-devel
yum -y install gcc automake autoconf libtool make

一系列安装货如果还报错,就是上次安装报错残留报错问题

make distclean

留言

专栏
文章
加入群聊