Redis介绍
- Redis是开源免费NoSQL数据库产品,它使用内存缓存数据
- Redis读写性能2万/秒,MySQL读性能5千/秒,写入性能3千/秒
- Redis是单线程的,采用的是**非阻塞执行
Redis功能概述
-
高性能 :
底层C语言编写,内存数据库,通讯采用
epoll非阻塞I/O多路复用机制 -
线程安全
Redis操作都是单线程的,都是原子操作 。 (Reids 6+ 是多线程,但是多线程体系在同步数据需求上,底层的核心操作还是单线程,避免高并发场景下数据安全的问题。 )
-
功能丰富
支持数据结构多种,支持数据持久化,支持
Master-Slave主从模式、支持集群分片、以及哨兵监控机制。
Redis数据结构类型
- 基本的有:
String、List、HashSet、SortedSet - 高阶:
GEO、BitMap、HyperLogLog
Redis特点
- 内存数据库,速度快,也支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的Key-Value数据类型,同时还提供Lists、Hashes 、 Sets 、Sorted Sets等多种数据类型
- Redis支持数据备份(master-slave)与集群(分片存储),以及拥有哨兵监控机制。
- 支持事务
为什么Redis那么快?
Redis使用内存来缓存数据,以防唯一还可以修改设置,让Redis把数据保存在硬盘上,因为Redis是用内存保存数据,IO性能比MySQL好很多。
Redis没有二维表结构,数据结构是key-value的,数据结构变简单了,读写速度就快了,
没优化读写到达2w/秒,优化后最多10W/秒。
为什么是采用带线程?
Redis是单线程的,采用的是非阻塞执行,别看是单线程比多线程的程序执行的还要快。
因为线程越多,线程调度的时候切换等待的时间就越长,反而性能不如单线程程序。
非阻塞式的好处?
因为是非阻塞式,比如A访问redis,比如相差10秒之间才发送过来,redis就不会等待这10秒,执行完A指令后,那么redis就处理其他的客户端指令,等到客户端A发送第二指令的时候,redis再调一个时间去执行这个指令。
非阻塞让redis任务排的非常满,没有多线程切换和调度的时间。
Redis软件安装
编译安装
- 下载地址:https://redis.io/download,一般下载稳定版(Stable),截止目前为止最新版是6.0
- 上传至服务器

- 解压
tar -zxvf redis-6.0.16.tar.gz
- 安装依赖
(因为Redis底层是C语言写的,需要安装gcc进行编译 ,以及安装autoconf automake)
yum -y install gcc-c++ autoconf automake
- 升级gcc
这里要说明一下,在编译Redis 6之前需要升级gcc的版本,默认情况yum安装的gcc版本是4.8.5,由于版本过低,在编译时会报如下错误,所以我们需要执行一下操作,升级GCC。
# 安装 scl源
yum install -y cenots-release-scl scl-utils-build
#安装 9版本的gcc 、gcc-c++ 工具链
yum install -y devtoolset-9-toolchain
#临时覆盖系统原有的gcc引用
scl enable devtoolset-9 bash
# 查看gcc 当前版本
gcc -v
- 预编译
切换到解压目录
cd redis-6.0.16/
make
出现make[1]:离开目录就代表成功了
- 创建安装Redis目录
mkdir -p /usr/local/redis
不使用:make install(make install默认安装到/usr/local/bin目录下)
使用:如果需要指定安装路径,需要添加PREFIX参数
make prefix=/usr/local/redis/ install
安装成功后的几个文件解释
redis-benchmark性能测试工具redis-check-aofAOF文件修复工具redis-check-rdbRDB文件修复工具redis-cli客户端命令行redis-sentinal集群管理工具redis-server服务进程指令
- 启动
安装的默认目标路径:/usr/local/redis/bin ,切换目录
./redis-server

可以看到当前是6.0.16版本, standaloned mode 单节点运行,PID 父ID, 端口默认是 6379。
启动方式:
第一种:执行
./redis-server命令 , 执行Ctrl + C就会停止服务
第二种:守护进程启动
redis.conf 是Redis的配置文件,安装完后,可以复制redis.conf文件到安装路径下
cp redis.conf /usr/local/redis/bin/
在编译redis安装目录下,找到redis.conf放入
/usr/local/redis/bin,千万不要在原始源上改配置!!最好是拷贝一个新的文件。
#redis.conf
daemonize yes
修改安装路径下的redis.conf,将daemonize修改为yes
启动时,指定配置文件路径即可
./redis-server redis.conf

结束运行就使用kill -9
出现编译问题
出现server.c:5166:39: error: ‘struct redisServer’ has no member named ‘maxmemory’
错误原因
原因是gcc版本问题,redis6.0+ 需要新版gcc。
查看gcc版本
gcc -v
解决
#升级到 5.3及以上版本
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
#注意:scl命令启用只是临时的,推出xshell或者重启就会恢复到原来的gcc版本。
#如果要长期生效的话,执行如下:
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
Redis添加到Service服务
配置开机自启动(centos7以上)
1.在系统服务目录里创建redis.service文件
vim /etc/systemd/system/redis.service
写入以下内容:
[Unit]
Description=redis-server
After=network.target
[Service]
Type=forking
ExecStart= /usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
- 重载系统服务
systemctl daemon-reload
- 这时候,可以用sytemctl 启动redis
systemctl restart redis.service
- 关闭redis-server :
systemctl stop redis.service - 开启redsi-server :
systemctl start redis.service - 查看redis-server状态 :
systemctl status redis.service
- 加入开机自启动
systemctl enable redis.service
Redis的常用配置
Redis的配置文件
Redis支持很多的参数,但都是有默认值
-
daemonize :
默认情况下,redis不是在后台运行的,如果需要在后台运行,把该项值改成yes。
-
bind
指定Redis只接收来自于该IP地址的请求。 (0.0.0.0 代表任意IP可访问,127.0.0.1 只可本地服务器可访问)
-
port
监听端口,默认为 6379
-
databases
设置数据库的个数,默认使用数据库为 16个
-
save
设置Redis进行数据库镜像的频率
-
dbfilename
镜像备份文件的文件名
-
dir
数据库镜像备份的文件放置的路径
-
requirepass
设置密码访问 设置客户端连接后进行任何其他执行需要的使用的密码。
-
maxclients
限制同时连接的客户数量。
-
maxmemory
设置redis能够使用的最大内存。
本文详细介绍了Redis的特性、数据结构、安装过程,包括编译安装、解决编译问题及将其添加到Service服务。讨论了Redis为何如此快速,并解释了单线程非阻塞执行的优势。此外,还提到了Redis的常用配置选项,如daemonize、bind、port等。
597

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



