Redis
Redis 说明
本章,我们主要从Redis简介、Redis安装和Redis命令这几个方面对Redis进行介绍!
1、🍇 Redis 简介
1.1、🍈 Redis 介绍
Redis(Remote Dictionary Server)是一个使用 C 语言编写的,开源的(BSD 许可)高性能非关系型(NoSQL)的键值对数据库。
Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。
与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向,每秒可以处理超过 10 万次读写操作,是已知性能最快的 Key-Value DB。另外,Redis 也经常用来做分布式锁。除此之外,Redis 支持事务 、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。
1.2、🍉 Redis 优缺点
优点:
读写性能优异, Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s;
支持数据持久化,支持 AOF 和 RDB 两种持久化方式;
支持事务,Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作合并后的原子性执行;
数据结构丰富,除了支持 string 类型的 value 外还支持 hash、set、zset、list 等数据结构;
支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。
缺点:
数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此 Redis 适合的场景主要局限在较小数据量的高性能操作和运算上;
Redis 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的 IP 才能恢复;
主机宕机,宕机前有部分数据未能及时同步到从机,切换 IP 后还会引入数据不一致的问题,降低了系统的可用性;
Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。
1.3、🍊 数据类型
Redis 主要有 5 种数据类型,包括 String,List,Set,Zset,Hash,满足大部分的使用要求,具体如下表所示:
| 数据类型 | 可以存储的值 | 操作 | 应用场景 |
|---|---|---|---|
| STRING | 字符串、整数或者浮点数 | 对整个字符串或者字符串的其中一部分执行操作 对整数和浮点数执行自增或者自减操作 | 做简单的键值对缓存 |
| LIST | 列表 | 从两端压入或者弹出元素 对单个或者多个元素进行修剪, 只保留一个范围内的元素 | 存储一些列表型的数据结构,类似粉丝列表、文章的评论列表之类的数据 |
| SET | 无序集合 | 添加、获取、移除单个元素 检查一个元素是否存在于集合中 计算交集、并集、差集 从集合里面随机获取元素 | 交集、并集、差集的操作,比如交集,可以把两个人的粉丝列表整一个交集 |
| HASH | 包含键值对的无序散列表 | 添加、获取、移除单个键值对 获取所有键值对 检查某个键是否存在 | 结构化的数据,比如一个对象 |
| ZSET | 有序集合 | 添加、获取、删除元素 根据分值范围或者成员来获取元素 计算一个键的排名 | 去重但可以排序,如获取排名前几名的用户 |
1.4、🍋 持久化
持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。
Redis 提供两种持久化机制 RDB(默认) 和 AOF 机制。
RDB 机制
RDB 是 Redis 默认的持久化方式,是 Redis DataBase 缩写快照。按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为 dump.rdb。通过配置文件中的 save 参数来定义快照的周期。
优点:
只有一个文件 dump.rdb,方便持久化;
容灾性好,一个文件可以保存到安全的磁盘;
性能最大化,fork 子进程来完成写操作,让主进程继续处理命令,所以是 IO 最大化。使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了 redis 的高性能;
相对于数据集大时,比 AOF 的启动效率更高。
缺点:
数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候;
AOF(Append-only file)持久化方式: 是指所有的命令行记录以 redis 命令请 求协议的格式完全持久化存储)保存为 AOF 文件。
AOF 机制
AOF 持久化(即 Append Only File 持久化),则是将 Redis 执行的每次写命令记录到单独的日志文件中,当重启 Redis 会重新将持久化的日志中文件恢复数据。
当两种方式同时开启时,数据恢复 Redis 会优先选择 AOF 恢复。
优点:
数据安全,AOF 持久化可以配置 appendfsync 属性,有 always,每进行一次 命令操作就记录到 AOF 文件中一次;
通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof 工具解决数据一致性问题;
AOF 机制的 rewrite 模式。AOF 文件没被 rewrite 之前(文件过大时会对命令 进行合并重写),可以删除其中的某些命令(比如误操作的 flushall)。
缺点:
AOF 文件比 RDB 文件大,且恢复速度慢;
数据集大的时候,比 rdb 启动效率低。
优缺点是什么?
AOF 文件比 RDB 更新频率高,优先使用 AOF 还原数据;
AOF 比 RDB 更安全也更大;
RDB 性能比 AOF 好;
如果两个都配了优先加载 AOF。
如何选择合适的持久化方式?
一般来说, 如果想达到足以媲美 PostgreSQL 的数据安全性,你应该同时使用两种持久化功能。在这种情况下,当 Redis 重启的时候会优先载入 AOF 文件来恢复原始的数据,因为在通常情况下 AOF 文件保存的数据集要比 RDB 文件保存的数据集要完整。
如果你非常关心你的数据, 但仍然可以承受数分钟以内的数据丢失,那么你可以只使用 RDB 持久化。
有很多用户都只使用 AOF 持久化,但并不推荐这种方式,因为定时生成 RDB 快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比 AOF 恢复的速度要快,除此之外,使用 RDB 还可以避免 AOF 程序的 bug。
如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式。
Redis 持久化数据和缓存怎么做扩容?
如果 Redis 被当做缓存使用,使用一致性哈希实现动态扩容缩容。
如果 Redis 被当做一个持久化存储使用,必须使用固定的 keys-to-nodes 映射关系,节点的数量一旦确定不能变化。否则的话(即 Redis 节点需要动态变化的情况),必须使用可以在运行时进行数据再平衡的一套系统,而当前只有 Redis 集群可以做到这样。
2、🍌 Redis 安装
接下来我们以在 Windows 和 Docker 中安装 Redis 为例进行介绍,其他环境类似。
2.1、🍍Windows 中安装
下载 Windows 安装版本:下载地址:https://github.com/MicrosoftArchive/redis/releases
如这里我们下载Redis-x64-3.2.100.zip这个版本
下载 新建 Redis 安装目录:新建目录D:\Net_Program\Net_Redis用于安装 Redis;
解压文件: 将下载下来的压缩包解压到目录中,如:D:\Net_Program\Net_Redis
修改默认端口:我们知道,Redis 默认的端口号为6379,如果我们想修改为其他端口(如:6666),用编辑器打开
redis.windows.conf和redis.windows-service.conf,查找关键字port 6379,将6379修改为6666即可;
端口号 设置密码:用编辑器打开
redis.windows.conf和redis.windows-service.conf,查找关键字requirepass,将requirepass前面的注释#去掉即代表启用密码,然后后面设置密码即可(如下图所示设置的密码为 123456);
密码 设置连接地址:用编辑器打开
redis.windows.conf和redis.windows-service.conf,查找关键字bind,将bind前面的注释#去掉即代表自定义设置连接地址,默认情况下只能本机连接,如果需要远程连接,设置具体的 IP 地址即可(如果需要本机和远程都可以连接,用空格分隔即可);
连接地址 将 Redis 设置为 Windows 服务:
以管理员身份运行 CMD,并定位到 Redis 的安装目录;
执行如下命令安装服务(没有任何提示则代表安装成功):
redis-server --service-install redis.windows-service.conf --loglevel verbose --service-name redis-6666
服务 - 这时候我们可以在 Windows 服务列表中多了一个名称为
redis-6666的服务了:

服务 测试验证: 启动 Redis 服务,然后使用 Redis 客户端管理工具连接测试:
redis-server --service-start --service-name redis-6666
测试 
测试
2.2、🥭Docker 中安装
拉取 Redis 镜像: 执行如下命令拉取 Redis 镜像
docker pull redisdocker pull redis:nanoserver
pull 
pull 
pull 查看本地镜像: 执行如下命令可以查看本地镜像
docker images
images 新建配置和数据持久化存放目录: 新建目录 D:\Net_Program\Net_Docker\Redis,并在该目录下新建 Conf 和 Data 文件夹,用于挂载配置文件和存放数据持久化文件

folder 下载 redis.conf 配置文件:将http://download.redis.io/redis-stable/redis.conf文件下载下来并存放到D:\Net_Program\Net_Docker\Redis\Conf目录下

conf 编辑 redis.conf 配置文件:
修改端口:port 6666
修改密码:requirepass 123456
修改持久化:appendonly yes
修改连接:bind 0.0.0.0

midifyconf 构建并启动 Redis 容器:
执行如下命令:
docker run -p 6666:6666 --name redis-6666 -v D:/Net_Program/Net_Docker/Redis/Conf/redis.conf:/etc/redis/redis.conf -v D:/Net_Program/Net_Docker/Redis/Data:/data -d redis redis-server /etc/redis/redis.conf --requirepass 123456 --appendonly yes参数说明:
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口,如这里我都指定的是 6666
--name:为容器指定一个名称,如这里我指定的名称为 redis-6666
-v D:/Net_Program/Net_Docker/Redis/Conf/redis.conf:/etc/redis/redis.conf,把宿主机配置好的 redis.conf 放到容器内的这个位置中
-v D:/Net_Program/Net_Docker/Redis/Data:/data,把 Redis 持久化的数据在宿主机内显示,做数据备份
-d: 后台运行容器,并返回容器 ID
--requirepass:设置密码
--appendonly:持久化设置

redisins 
redisins 测试验证:
输入如下命令可查看 Docker 中已经启动的容器:
docker ps
dockerps 输入如下命令可进入 Redis 容器(redis-6666 为 Redis 容器名称):
docker exec -it redis-6666 /bin/bash
redisrq 再输入如下命令:
redis-cli -a 123456 -p 6666
redischeck 
redischeck 或者直接执行如下命令进行测试(一步到位):
docker exec -it redis-6666 redis-cli -a 123456 -p 6666
redischeck 
redischeck
