泰安正规的网站建设,江宁做网站,小程序云开发的弊端,在dw上做网站首页导航栏认识Redis与快速安装配置#x1f343;
Redis是什么#x1f432;
1.Redis的背景#x1f38d; Redis#xff08;Remote Dictionary Server#xff09;译为远程字典服务#xff0c;它是一款基于内存实现的键值型 NoSQL 数据库#xff0c; 通常也被称为数据结…
认识Redis与快速安装配置
Redis是什么
1.Redis的背景 RedisRemote Dictionary Server译为远程字典服务它是一款基于内存实现的键值型 NoSQL 数据库 通常也被称为数据结构服务器这是因为它可以存储多种数据类型比如 string字符串hash哈希散列list列表set集合和 sorted set有序集合等 Redis 是由意大利人 Salvatore Sanfilippo 使用 C语言编写它遵守 BSD 开源协议并且对多种编程语言提供了良好的 API 支持比如 JavaC/CC#PHPJavaScriptPerlPythonRuby 等 Redis是常见的内存型数据库除 Redis 之外还有 Oracle Berkeley DB甲骨文旗下的一款产品、SQlite轻量级内存数据库、Memcache键值型分布式缓存数据库、Altibase基于内存的高性能数据库 2.Redis的特点
与其他内存型数据库相比Redis 具有以下特点 Redis 不仅可以将数据完全保存在内存中还可以通过磁盘实现数据的持久存储 Redis 支持丰富的数据类型包括 string、list、set、zset、hash 等多种数据类型因此它也被称为数据结构服务器 Redis 支持主从同步即 master-slave 主从复制模式。数据可以从主服务器向任意数量的从服务器上同步有效地保证数据的安全性 Redis 支持多种编程语言包括 C、C、Python、Java、PHP、Ruby、Lua 等语言 与 SQL 型数据库截然不同Redis 没有提供新建数据库的操作因为它自带了 16 0—15个数据库默认使用 0 库。在同一个库中key 是唯一存在的、不允许重复的它就像一把密钥只能打开一把锁。键值存储的本质就是使用 key 来标识 value当想要检索 value 时必须使用与 value 相对应的 key 进行查找 Redis 数据库没有表的概念它通过不同的数据类型来实现存储数据的需求不同的数据类型能够适应不同的应用场景从而满足开发者的需求 3.Redis的架构
Redis体系架构主要分为两个部分 Redis服务端 Redis客户端
客户端和服务端可以位于同一台计算机上也可以位于不同的计算机上。服务端是整个架构的大脑能够把数据存储到内存中并且起到管理数据的作用 4.Redis的优劣势
下面对 Redis 的优势进行了简单总结 性能极高Redis 基于内存实现数据存储它的读取速度是 110000次/s写速度是 81000次/s 多用途工具 Redis 有很多的用途比如可以用作缓存、消息队列、搭建 Redis 集群等 命令提示功能Redis 客户端拥有强大的命令提示功能使用起来非常的方便降低了学习门槛 可移植性Redis 使用用标准 C语言编写的能够在大多数操作系统上运行比如 LinuxMacSolaris 等 数据结构丰富除了支持string类型的value外还支持hashsetzsetlist等数据结构 支持主从复制主机会自动将数据同步到从机可以进行读写分离
下面对 Redis 的劣势进行了简单总结 数据库容量受到物理内存的限制不能用作海量数据的高性能读写因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上 Redis 不具备自动容错和恢复功能主机从机的宕机都会导致前端部分读写请求失败需要等待机器重启或者手动切换前端的IP才能恢复 主机宕机宕机前有部分数据未能及时同步到从机切换IP后还会引入数据不一致的问题降低了系统的可用性 Redis 较难支持在线扩容在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题运维人员在系统上线时必须确保有足够的空间这对资源造成了很大的浪费 5.Redis的应用场景 Redis 用来缓存一些经常被访问的热点数据、或者需要耗费大量资源的内容通过把这些内容放到 Redis 中可以让应用程序快速地读取它们。例如网站的首页需要经常被访问并且在创建首页的过程中会消耗的较多的资源此时就可以使用 Redis 将整个首页缓存起来从而降低网站的压力减少页面访问的延迟时间。 我们知道数据库的存储方式大体可分为两大类基于磁盘存储和基于内存存储。磁盘存储的数据库因为磁头机械运动以及系统调用等因素导致读写效率较低。Redis 基于内存来实现数据存取相对于磁盘来说其读写速度要高出好几个数量级。下表将 Redis 数据库与其他常用数据库做了简单对比
名称类型数据存储选项附加功能Redis基于内存存储的键值非关系型数据库字符串、列表、散列、有序集合、无序集合发布与订阅、主从复制、持久化存储等Memcached基于内存存储的键值缓存型数据库键值之间的映射为提升性能构建了多线程服务器MySQL基于磁盘的关系型数据库每个数据库可以包含多个表每个表可以包含多条记录 支持第三方扩展。支持 ACID 性质、主从复制和主主复制MongoDB基于磁盘存储的非关系文档型数据库每个数据库可以包含多个集合每个集合可以插入多个文档支持聚合操作、主从复制、分片和空间索引 Redis 基于内存来实现数据的存储因此其速度非常快。但是我们知道计算机的内存是非常珍贵的资源所以 Redis 不适合存储较大的文件或者二进制数据否则会出现错误Redis 适合存储较小的文本信息。理论上 Redis 的每个 key、value 的大小不超过 512 MB 6.Redis为什么这么快 完全基于内存绝大部分请求是纯粹的内存操作非常迅速。数据存在内存中类似于HashMapHashMap的优势就是查找和操作的事件复杂度都是O(I) 数据结构简单对数据的操作也简单Redis中的数据结构是专门进行设计的 采用单线程避免了不必要的上下文切换和竞争条件也不存在多进程或者多线程导致的切换而消耗CPU不用去考虑各种锁的问题不存在加锁释放锁操作没有出现死锁而导致的性能消耗的情况 使用多路I/O复用模型非阻塞IO 使用的底层模型不同它们之间底层实现方式以及与客户端之间通信的应用协议不一样Redis直接自己构建了VM机制因为一般的系统调用系统函数的话会浪费一定的时间去请求 Redis的安装搭建
1.Windows操作系统的安装搭建
Redis 官方网站没有提供 Windows 版的安装包但可以通过 GitHub 来下载 Windows 版 Redis 安装包
下载地址https://github.com/tporadowski/redis/releases
注意Windows 安装包是某位民间“大神”根据 Redis 源码改造的并非 Redis 官方网站提供 下载完成后打开相应的文件夹您会看到如下图所示的文件目录 创建Redis临时服务
1) 启动服务端程序
如上图所示双击 Redis 服务端启动程序 redis-server.exe您会看到以下界面 上图中显示一些 Redis 的相关信息比如 Redis 的版本号以及默认端口号(6379)。注意为了实现后续操作请您保持服务端开启状态否则客户端无法正常工作 2) 启动客户端程序
启动服务端后双击客户端启动程序 redis-cli.exe得到如下界面
得到如上界面说明 Redis 本地客户端与服务端连接成功 命令创建Redis服务
上述方式虽然简单快捷但是显然不是程序员的操作下面介绍通过命令启动 Redis 服务端并将 Redis 服务添加到 Windows 资源管理器实现开机后自动启动。
1) 注册Redis服务
通过 CMD 命令行工具进入 Redis 安装目录将 Redis 服务注册到 Windows 服务中执行以下命令
# redis-server.exe --service-install redis.windows.conf --loglevel verbose
执行完后得到以下输出说明注册成功。
[1868] 07 Jan 15:00:08.223 # Granting read/write access to NT AUTHORITY\NetworkService on: D:\Redis-x64-5.0.10 D:\Redis-x64-5.0.10\
[1868] 07 Jan 15:00:08.230 # Redis successfully installed as a service.
2) 启动Redis服务
执行以下命令启动 Redis 服务命令如下
# redis-server --service-start
如下图所示 注意此时 Redis 已经被添加到 Windows 服务中因此不会再显示 Redis 服务端的相应的信息如下图所示 3) 启动Redis客户端
在 CMD 命令行输出 redis-cli 命令启动客户端如下所示 4) 检查是否连接成功
测试客户端和服务端是否成功连接。输出PING命令若返回PONG则证明成功连接。如下所示 通过上面的操作我们完成了 Redis 的安装。当然您也可以将 Redis 加入到环境变量中如下所示 注意根据自己的安装路径添加环境变量。
总结
下面对安装过程中涉及到的命令进行总结主要包括以下命令 安装服务redis-server --service-install
卸载服务redis-server --service-uninstall
开启服务redis-server --service-start
停止服务redis-server --service-stop
服务端启动时重命名redis-server --service-start --service-name Redis12.Linux操作系统的安装搭建
Yum源方式安装
[rootlocalhost ~]# yum -y install update # 更新yum源
[rootlocalhost ~]# yum -y install redis.x86_64 # 下载redis
[rootlocalhost ~]# redis-server # 启动redis服务端
[rootlocalhost ~]# ps aux | grep redis | grep -v grep # 查看redis的进程 Redis客户端启动语法:
#若设置了密码使用如下格式启动
# redis-cli -h [ip] -p [port] -a [password]
#简单格式
# redis-cli
[rootlocalhost ~]# redis-cli
127.0.0.1:6379 ping # 验证是否成功安装
PONG
127.0.0.1:6379 源码方式安装
[rootlocalhost ~]# wget https://download.redis.io/releases/redis-5.0.14.tar.gz
[rootlocalhost ~]# tar xvzf redis-5.0.14.tar.gz
[rootlocalhost ~]# cd redis-5.0.14/
[rootlocalhost redis-5.0.14]# make make install
[rootlocalhost redis-5.0.14]# cd
[rootlocalhost ~]#sed -i s/daemonize no/daemonize yes/g redis.conf # 开启后台模式将on改为yes
[rootlocalhost ~]# redis-server #放入后台执行
[rootlocalhost ~]# redis-cli
redis set name www.biancheng.net
OK
127.0.0.1:6379 get name
www.baidu.com [rootlocalhost ~]# mv redis-5.0.14 /usr/bin/redis
[rootlocalhost ~]# cd /usr/bin/redis/
[rootlocalhost redis]# mkdir -p /data/log/redis # 创建日志文件的存放路径
[rootlocalhost redis]# mkdir -p /data/redis/ # 本地数据库存放持久化数据的目录
修改配置文件
[rootlocalhost redis]# sed -i s/logfile /logfile \/data\/log\/redis\/redis.log/g redis.conf # 定义log文件
[rootlocalhost redis]# cat redis.conf | grep logfile
logfile /data/log/redis/redis.log
# 修改登录redis密码
[rootlocalhost redis]# sed -i s/# requirepass foobared/requirepass redis/g redis.conf
# 定义本地数据库存放持久化数据的目录
[rootlocalhost redis]# sed -i s/dir .\//dir \/data\/redis\//g redis.conf
Redis配置文件
配置文件名称
Windows---redis.windows.conf
Linux ---redis.conf
1.查看配置项
使用 Redis 的CONFIG命令来查看或者更改 Redis 的配置信息.语法格式如下:
127.0.0.1:6379 CONFIG GET 配置名称
eg:
# 获取日志等级的配置项
127.0.0.1:6379 CONFIG GET loglevel
# 查看所有的配置项
127.0.0.1:6379 CONFIG GET * 2.更改配置项
如果想要重新设置配置项,语法格式为:
127.0.0.1:6379 CONFIG SET 配置项名称 配置项参数值
eg:
127.0.0.1:6379 CONFIG SET loglevel notice
OK
127.0.0.1:6379 CONFIG GET loglevel
1) loglevel
2) notice 扩展: Redis的日志等级为: 1.debug会打印出很多信息适用于开发和测试阶段 2.verbose包含很多不太常用的信息但是比debug简短 3.notice适用于生产场景 4.warning警告信息 3.配置项说明
配置项参数说明daemonizeno/yes默认为 no表示 Redis 不是以守护进程的方式运行通过修改为 yes 启用守护进程pidfile文件路径当 Redis 以守护进程方式运行时会把进程 pid 写入自定义的文件中port6379指定 Redis 监听端口默认端口为 6379bind127.0.0.1绑定的主机地址timeout0客户端闲置多长秒后关闭连接若指定为 0 表示不启用该功能loglevelnotice指定日志记录级别支持四个级别debug、verbose、notice、warning默认为 noticelogfilestdout日志记录方式默认为标准输出databases16设置数据库的数量0-15个共16个Redis 默认选择的是 0 库可以使用 SELECT 命令来选择使用哪个数据库储存数据save[seconds] [changes]可以同时配置三种模式 save 900 1 save 300 10 save 60 10000表示在规定的时间内执行了规定次数的写入或修改操作Redis 就会将数据同步到指定的磁盘文件中。比如 900s 内做了一次更改Redis 就会自动执行数据同步rdbcompressionyes/no当数据存储至本地数据库时是否要压缩数据默认为 yesdbfilenamedump.rdb指定本地存储数据库的文件名默认为 dump.rdbdir./指定本地数据库存放目录slaveof masterip masterport主从复制配置选项当本机为 slave 服务时设置 master 服务的 IP 地址及端口在 Redis 启动时它会自动与 master 主机进行数据同步。requirepassfoobared 默认关闭密码配置项默认关闭用于设置 Redis 连接密码。如果配置了连接密码客户端连接 Redis 时需要通过password 密码认证。maxmemory bytes最大内存限制配置项指定 Redis 最大内存限制Redis 在启动时会把数据加载到内存中达到最大内存后Redis 会尝试清除已到期或即将到期的 Key当此方法处理 后若仍然到达最大内存设置将无法再进行写入操作但可以进行读取操作。appendfilenameappendonly.aof指定 AOF 持久化时保存数据的文件名默认为 appendonly.aof。glueoutputbufyes设置向客户端应答时是否把较小的包合并为一个包发送默认开启状态 4.常见配置案例 NETWORK网络 bind 127.0.0.1 #绑定的 IP
protected-mode no #保护模式
port 6379 #端口设置 GENERAL通用 daemonize yes # 以守护进程的方式运行,默认是no
pidfile /var/run/redis_6379.pid # 如果是后台启动,需要指定pid文件
# 日志级别
# debug(调试日志,大量的信息)
# verbose(许多不太有用的信息,但是不是debug级别)
# notice(适度信息可能是您在生产中想要的)
# warning(警告信息)
loglevel notice
logfile # 日志文件的位置
databases 16 # 数据库的数量默认是 16
always-show-logo yes # 是否总是显示 LOG SNAPSHOTTING快照 # 持久化,在规定的时间内,执行了多少次操作则会持久化到磁盘
# Redis是内存数据库,如果没有持久化,那么数据断电即丢失
……
# 如果 900s 内,至少有 1 个 key 进行了修改进行持久化操作
save 900 1
# 如果 300s 内,至少有10个key进行了修改,进行持久化操作
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes # 如果持久化出错,是否还要继续工作
rdbcompression yes # 是否压缩rdb文件,需要消耗一些cpu资源
rdbchecksum yes # 保存rdb文件的时候,进行错误的检查校验
dir ./ # rdb文件保存的目录 SECURITY 安全 可以设置Redis密码,默认是没有密码
[rootlocalhost ~]# redis-cli
127.0.0.1:6379 ping
PONG
127.0.0.1:6379 config get requirepass # 获取 redis 密码
1) requirepass
2)
127.0.0.1:6379 config set requirepass 123456 # 设置 redis 密码
OK
127.0.0.1:6379 ping
(error) NOAUTH Authentication required. # 发现所有的命令都没有权限了
127.0.0.1:6379 auth 123456 # 使用密码登录
OK
127.0.0.1:6379 config get requirepass
1) requirepass
2) 123456
127.0.0.1:6379 CLUENTS 限制 # maxclients 10000 设置能连接上redis的最大客户端数量
# maxmemory bytes redis设置最大的内存容量
maxmemory-policy noeviction # 内存达到上限之后的处理策略- noeviction当内存使用达到阈值的时候所有引起申请内存的命令会报错- allkeys-lru在所有键中采用lru算法删除键直到腾出足够内存为止- volatile-lru在设置了过期时间的键中采用lru算法删除键直到腾出足够内存为止- allkeys-random在所有键中采用随机删除键直到腾出足够内存为止- volatile-random在设置了过期时间的键中随机删除键直到腾出足够内存为止- volatile-ttl在设置了过期时间的键空间中具有更早过期时间的key优先移除 APPEND ONLY 模式 AOF 配置 appendonly no # 默认是不开启 AOF 模式的默认使用 rdb 方式持久化大部分情况下rdb 完全够用
appendfilename appendonly.aof # 持久化的文件的名字
# appendfsync always # 每次修改都会 sync 消耗性能
appendfsync everysec # 每秒执行一次 sync 可能会丢失这 1s 的数据。
# appendfsync no # 不执行 sync 这个时候操作系统自己同步数据速度最快