Redis简介
- 高性能:底层采用C语言编写,内存数据库,通讯采用epoll非阻塞、I/O多路复用机制;
- 线程安全:原子操作,单线程,保证高并发场景下的线程安全;
- 功能丰富:
- 数据结构:
- 基本:String、List、HashSet、SortedSet;
- 高阶:GEO、BitMap、HyperLogLog;
- 持久化: RDB持久化、AOF持久化、RDB-AOF混合持久化;
- 主从模式(Master-Slave):解决并发访问的问题,采用哨兵模式完成主从切换;
- 集群:采用分片存储;
- 模块化机制:自定义个性化需求;
- 数据结构:
正因为Redis的功能丰富且强大,能够支撑很多的互联网应用场景,如缓存、分布式锁、队列、集合、GEO、BitMap操作等;
特点
- 内存数据库,速度快,支持数据的持久化;
- Redis不仅仅支持简单的key-value类型的数据,同时提供了Lists、Hashes、Sets、SortedSets等多种数据结构的存储;
- Redis支持数据的备份(master-slaver)与集群(分片存储),以及拥有哨兵监控机制;
- 支持事务;
优势
- 性能极高:Redis能读的速度是11w次/s,写的速度是8w1次/s;
- 丰富的数据类型:Redis支持Strings、Lists、Hashes、Sets、Sorted Sets等数据类型操作;
- 原子操作:Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行(事务);
- 丰富的特性:Redis还支持publish/subscribe、通知、key过期等特性;
Redis、Memcached、Encache区别
Redis的高并发
原理
- Redis是纯内存数据库,所以读取数据快;
- Redis使用的是非阻塞IO、IO多路复用、减少了线程切换时上下文的切换和竞争;
- Redis采用的是单线程的模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争;
- Redis存储结构多样化,不同的数据结构对数据存储进行了优化加快读取的速度;
- Redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大;
Redis的单线程
原因
- 不需要各种锁的性能消耗;
- 单线程多线程进程集群方案
- CPU消耗;
优势
- 代码清晰,处理逻辑简单;
- 不需要考虑各种锁的问题,包括加锁释放锁;
- 不存在多线程或者多进程导致的切换而消耗CPU;
劣势
无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善;
IO多路复用技术
redis采用网络IO多路复用技术来保证在多连接时候,系统的高吞吐量
Redis软件安装
安装之前首先保证Centos使用了阿里的yum源以及安装了wget命令!
下载
下载地址: Redis下载地址
下载具体的方式:
wget -P /usr/local/src/ https://download.redis.io/releases/redis-6.0.9.tar.gz
解压
tar -zxvf redis-6.0.9.tar.gz
yum install -y gcc-c++ autoconf automake
cd redis-6.0.9/ (进入redis安装目录)
#升级GCC版本
#安装scl源
yum install -y centos-release-scl scl-utils-build
# 安装9版本的gcc、gcc-c++、gdb工具链
yum install -y devtoolset-9-toolchain
# 临时覆盖系统原有的gcc引用
scl enable devtoolset-9 bash
# 查看gcc当前版本
gcc -v
预编译
进入redis安装目录
make
mkdir -p /usr/local/redis
#指定Redis安装目录
make PREFIX=/usr/local/redis/ install
进入Redis
cd /usr/local/redis
ls
cd bin/
ls
至此,Redis安装成功;
启动Redis
修改Redis配置以守护进程方式启动
- 进入redis.conf
修改守护进程的配置将配置打开:
daemonize yes
- 以守护进程的方式启动Redis
这里的redis.conf配置文件是从解压之后的文件中获得的,将其cp到redis编译安装的目录下面之后,启动的时候指定该配置文件即可;
设置Redis开机自启
1、在系统服务目录里创建redis.service文件
vim /etc/systemd/system/redis.service
2、写入以下内容:
[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
3、测试并加入开机自启动
- 关闭redis-server:
systemctl stop redis.service
- 开启redis-server:
systemctl start redis.server
- 查看redis-server状态:
systemctl status redis.service
4、测试成功之后,将服务加入开机自启动即可
systemctl enable redis.service
##################################################
Redis的重新学习
Redis安装
1、安装gcc命令
yum install gcc -y
gcc --version
2、解压Reids安装包:redis-6.2.1.tar.gz
tar -zxvf redis-6.2.1.tar.gz
3、进入Redis安装目录,编译Redis
make
4、安装Redis
make install
5、安装目录: /usr/local/bin
- redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何
- redis-check-aof:修复有问题的AOF文件,rdb和aof后面讲
- redis-check-dump:修复有问题的dump.rdb文件
- redis-sentinel:Redis集群使用
- redis-server:Redis服务器启动命令
- redis-cli:客户端,操作入口
6、Redis后台启动(推荐!!!)
6.1 备份redis.conf,进入Redis安装目录
cp redis.conf /etc/redis.conf
6.2 将etc目录下的redis.conf的配置修改
修改redis.conf(128行)文件将里面的daemonize no 改成 yes,让服务在后台启动
6.3 保存退出后进入/usr/local/bin
redis-server /etc/redis.conf
即可完成后台启动
Redis相关知识介绍
- 默认16个数据库,类似数组下标从0开始,初始默认使用0号库;
- 使用命令 select 来切换数据库。如: select 8 ;
- 统一密码管理,所有库同样密码;
- dbsize:查看当前数据库的key的数量;
- flushdb:清空当前库;
- flushall:通杀全部库;
- Redis是单线程+多路IO复用技术,多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池);
- Redis特点:
- 支持多数据类型;
- 支持持久化;
- 单线程+多路IO复用;
key键的操作
- keys * :查看当前库所有key (匹配:keys *1)
- exists key:判断某个key是否存在
- type key: 查看你的key是什么类型
- del key:删除指定的key数据
- unlink key:根据value选择非阻塞删除,仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作。
- expire key 10: 10秒钟:为给定的key设置过期时间
- ttl key: 查看还有多少秒过期,-1表示永不过期,-2表示已过期
- select:命令切换数据库
- dbsize:查看当前数据库的key的数量
- flushdb:清空当前库
- flushall:通杀全部库