网站后台管理系统模块,如何看待百度竞价排名,python和php做网站,返佣贵金属交易所网站建设目录
一、缓存的相关知识
1#xff09;缓存的概念
2#xff09;系统缓存
buffer与cache#xff1a;
3#xff09;缓存保存位置及分层结构
DNS缓存
应用层缓存
数据层缓存
分布式缓存服务#xff1a;
数据库#xff1a;
硬件缓存
二、关系型数据与非关系型数据…目录
一、缓存的相关知识
1缓存的概念
2系统缓存
buffer与cache
3缓存保存位置及分层结构
DNS缓存
应用层缓存
数据层缓存
分布式缓存服务
数据库
硬件缓存
二、关系型数据与非关系型数据库
1关系型数据库
2非关系型数据库
3关系型数据库和非关系型数据库区别
1数据存储方式不同
2扩展方式不同
3对事务性的支持不同
4非关系型数据库产生背景
5NOSQL 与 SQL的数据记录对比
三、redis的相关知识
1redis的简介 2redis的五大数据类型
3redis的优缺点
Redis缺点
4Redis的适用场景
5Redis采用单线程的原因
6redis运行速度快的原因
7Redis与memcached比较
四、redis的安装配置
1redis的源码编译安装
2redis的服务管理 五、redis的命令工具
1redis-cliRedis 命令行工具
2redis-benchmark 测试工具
(1)并发连接与100000 个请求处理性能测试
2数据包的存取的性能测试
3 键值对的创建速度测试
编辑
六、redis的简单操作
1redis键值对的存取
2redis键值列表的获取
1获取全部列表
2获取以某字符为开头任意长度的键
3获取以某字符为开头后面为指定长度的键
添加测试数据
3判断键是否存在
4删除键
5查看键存储的数据类型
6rename 重命名
7renamenx 重命名
8dbsize查看键数目
9设置和清空密码
设置和查看密码
清空密码
七、Redis多数据库操作
1多数据库间切换select
2多数据库间移动数据
3清除数据库内数据
八、redis的常见错误与解决方案
1Redis常见运维故障
2Redis故障排查 一、缓存的相关知识
1缓存的概念
缓存是为了调节速度不一致的两个或多个不同的物质的速度在中间对速度较慢的一方起到加速作用比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据内存是保存CPU经常访问硬盘的数据而且硬盘也有大小不一的缓存甚至是物理服务器的raid 卡有也缓存都是为了起到加速CPU 访问硬盘数据的目的因为CPU的速度太快了CPU需要的数据由于硬盘往往不能在短时间内满足CPU的需求因此CPU缓存、内存、Raid 卡缓存以及硬盘缓存就在一定程度上满足了CPU的数据需求即CPU 从缓存读取数据可以大幅提高CPU的工作效率
2系统缓存
buffer与cache
buffer 缓冲也叫写缓冲一般用于写操作可以将数据先写入内存再写入磁盘buffer 一般用于写缓冲用于解决不同介质的速度不一致的缓冲先将数据临时写入到里自己最近的地方以提高写入速度CPU会把数据先写到内存的磁盘缓冲区然后就认为数据已经写入完成看然后由内核在后续的时间在写入磁盘所以服务器突然断电会丢失内存中的部分数据cache 缓存也叫读缓存一般用于读操作CPU读文件从内存读如果内存没有就先从硬盘读到内存再读到CPU将需要频繁读取的数据放在里自己最近的缓存区域下次读取的时候即可快速读取
3缓存保存位置及分层结构
互联网应用领域缓存是服务响应速度提升的关键
用户层浏览器DNS缓存,应用程序DNS缓存,操作系统DNS缓存客户端代理层CDN,反向代理缓存Web层Web服务器缓存应用层页面静态化数据层分布式缓存,数据库系统层操作系统cache物理层磁盘cache, Raid Cache
DNS缓存
浏览器的DNS缓存默认为60秒即60秒之内在访问同一个域名就不在进行DNS解析。
应用层缓存
Nginx、PHP等web服务可以设置应用缓存以加速响应用户请求另外有些解释性语言比如PHP/Python/Java不能直接运行需要先编译成字节码但字节码需要解释器解释为机器码之后才能执行因此字节码也是一种缓存有时候还会出现程序代码上线后字节码没有更新的现象。所以一般上线新版前,需要先将应用缓存清理,再上线新版。
另外可以利用动态页面静态化技术,加速访问,比如:将访问数据库的数据的动态页面,提前用程序生成静态页面文件html 电商网站的商品介绍,评论信息非实时数据等皆可利用此技术实现
数据层缓存
分布式缓存服务
RedisMemcached
数据库
MySQL 查询缓存innodb缓存、MYISAM缓存
硬件缓存
CPU缓存L1的数据缓存和L1的指令缓存、二级缓存、三级缓存磁盘缓存Disk Cache磁盘阵列缓存Raid Cache可使用电池防止断电丢失数据
二、关系型数据与非关系型数据库
1关系型数据库
关系型数据库是一个结构化的数据库创建在关系模型(二维表格模型)基础上一般面向于记录SQL语句标准数据查询语言就是一种基于关系型数据库的语言用于执行对关系型数据库中数据的检索和操作主流的关系型数据库包括Oracle、 MySQL、SQL Server、Microsoft Access、 DB2、PostgreSQL 等
以上数据库在使用的时候必须先建库建表设计表结构然后存储数据的时候按表结构去存如果数据与表结构不匹配就会存储失败
2非关系型数据库
NoSQLNoSQLNotonlysQL意思是“不仅仅是SQL是非关系型数据库的总称。除了主流的关系型数据库外的数据库都认为是非关系型。不需要预先建库建表定义数据存储表结构每条记录可以有不同的数据类型和字段个数(比如微信群聊里的文字、图片、视频、音乐等)。主流的NOSQL 数据库有Redis、MongBD、 Hbase分布式非关系型数据库大数据使用、Memcached、ElasticSearch简称ES索引型数据库、TSDB时续型数据库 等
3关系型数据库和非关系型数据库区别
1数据存储方式不同
关系型和非关系型数据库的主要差异是数据存储的方式
关系型数据天然就是表格式的因此存储在数据表的行和列中。数据表可以彼此关联协作存储也很容易提取数据与其相反非关系型数据不适合存储在数据表的行和列中而是大块组合在一起。非关系型数据通常存储在数据集中就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。很容易切换数据类型一个数据集当中有多种数据类型
2扩展方式不同
SQL和NoSQL数据库最大的差别可能是在扩展方式上要支持日益增长的需求当然要扩展。
要支持更多并发量SQL数据库是纵向扩展也就是说提高处理能力使用速度更快速的计算机这样处理相同的数据集就更快了。因为数据存储在关系表中操作的性能瓶颈可能涉及很多个表这都需要通过提高计算机性能来克服。虽然SQI数据库有很大打展空间但最终肯定会达到纵向扩展的上限。数据一般存储在本地的文件系统中。读可以通过读写分离、负载均衡来分摊性能但读写仍然很消耗IO性能而NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。数据分布存储在不同服务器上可以并发地读写加快效率横向扩展加服务器。比较便宜纵向扩展提高硬件配置比如换更高性能的CPU、加CPU核数、硬盘、磁盘IO、内存条。除硬盘外其他需要停机才能加
3对事务性的支持不同
如果数据操作需要高事务性或者复杂数据查询需要控制执行计划那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。SQL数据库支持对事务原子性细粒度控制并且易于回滚事务虽然NoSQL数据库也可以使用事务操作但稳定性方面没法和关系型数据库比较所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面非关系型数据库在事务的处理和稳定性方面不如关系型数据库。但读写性能好、易于扩展处理大数据方面占优势
关系型数据库特别适合高事务性要求和需要控制执行计划的任务事务细粒度控制更好
非关系型数据库事务控制会稍显弱势其价值点在于高扩展性和大数据量处理方面
4非关系型数据库产生背景
可用于应对Web2.0纯动态网站类型的三高问题。
High performance —— 对数据库高并发读写需求Hugestorage——对海量数据高效存储与访问需求HighScalabilityHighAvailability——对数据库高可扩展性与高可用性需求
关系型数据库和非关系型数据库都有各自的特点与应用场景两者的紧密结合将会给web2.0的数据库发展带来新的思路。让关系型数据库关注在关系上和对数据的一致性保障非关系型数据库关注在存储和高效率上。例如在读写分离的MySQI数据库环境中可以把经常访问的数据即高热数据存储在非关系型数据库中提升访问速度。
5NOSQL 与 SQL的数据记录对比
关系型数据库:
实例--数据库--表(table)--记录行(row)、数据字段(column)
非关系型数据库:
实例--数据库--集合(collection) --键值对(key-value)非关系型数据库不需要手动建数据库和集合(表)。
三、redis的相关知识
1redis的简介
Redis是一个开源、基于内存、使用C语言编写的key-value数据库并提供了多种语言的API。它的数据结构十分丰富主要可以用于数据库、缓存、分布式锁、消息队列等...
Redis服务器程序是单进程模型也就是在一台服务器上可以同时启动多个Redis进程Redis的实际处理速度则是完全依靠于主进程的执行效率
若在服务器上只运行一个Redis进程当多个客户端同时访问时服务器的处理能力是会有一定程度的下降若在同一台服务器上开启多个Redis进程Redis在提高并发处理能力的同时会给服务器的CPU造成很大压力 2redis的五大数据类型
基础数据类型包括string字符串、list列表双向链表、hash散列键值对集合、set集合不重复和sorted set也可以称为Zset有序集合
结构类型结构存储的值结构的读写能力String可以是字符串、整数、浮点数对整个字符串或者字符串的其中一部分进行操作对整数和浮点数执行自增或者自减操作list一个链表链表上每个节点都包含了一个字符串从链表的两端推入或者弹出元素根据偏移量对链表进行修剪读取单个或多个元素根据值查找或者移除元素set包含字符串的无序收集器并且被包含的每个字符串都是独一无二各不相同的添加、获取、移除单个元素检查一个元素是否存在与集合中计算交集、并集、差集从集合里面随机获取元素hash包含键值对的无序散列表添加、获取、移除单个键值对获取所有键值对zset字符串成员与浮点数分值之间的有序映射元素的排列顺序由分值的大小决定添加、获取、删除单个元素根据分值范围或者成员来获取元素
3redis的优缺点
1具有极高的数据读写速度 数据读取的速度最高可达到110000 次/s数据写入速度最高可达到81000次/s。
2支持的数据结构 key-value支持丰富的数据类型Strings、 Lists、Hashes、 Sets 及Sorted Sets 等数据类型操作。
Strings 字符串型Lists 列表型Hashes 哈希散列Sets 无序集合Sorted Sets 有序集合或称zsets
redis也可以做消息队列可以通过Sorted Sets实现
3支持数据的持久化 可以将内存中的数据保存在磁盘中重启的时候可以再次加载进行使用。
4原子性 Redis所有操作都是原子性的。支持事务所有操作都作为事务
5支持数据备份 即 master-salve 模式的数据备份。支持主从复制
Redis缺点
缓存和数据库双写一致性问题缓存雪崩问题缓存击穿问题缓存的并发竞争问题
4Redis的适用场景
Redis作为基于内存运行的数据库是一个高性能的缓存一般应用在session缓存、 队列、排行榜、计数器、最近最热文章、最近最热评论、发布订阅等Redis适用于数据实时性要求高、数据存储有过期和淘汰特征的、不需要持久化或者只需要保证弱一致性、逻辑简单的场景
5Redis采用单线程的原因
首先要明确的是Redis单线程指的是网络IO和键值对读写是由一个线程来完成的但Redis持久化、集群数据等是由额外的线程执行的。了解Redis使用单线程之前可以先了解一下多线程的开销。
通常情况下使用多线程可以增加系统吞吐率或者可以增加系统扩展性但多线程通常会存在同时访问某些共享资源为了保证访问共享资源的正确性就需要有额外的机制进行保证这个机制首先会带来一定的开销。其实对于多线程并发访问的控制一直是一个难点问题如果没有精细的设计比如说只是简单地采用一个粗粒度互斥锁就会出现不理想的结果。即使增加了线程大部分线程也在等待获取访问共享资源的互斥锁并行变串行系统吞吐率并没有随着线程的增加而增加
此外
值得注意的是在Redis6.0中引入了多线程。在Redis6.0之前从网络IO处理到实际的读写命令处理都是由单个线程完成的但随着网络硬件的性能提升Redis的性能瓶颈有可能会出现在网络IO的处理上也就是说单个主线程处理网络请求的速度跟不上底层网络硬件的速度。针对此问题Redis采用多个IO线程来处理网络请求提高网络请求处理的并行度但多IO线程只用于处理网络请求对于读写命令Redis仍然使用单线程处理
6redis运行速度快的原因
Redis是基于内存的绝大部分请求都是内存操作十分的迅速Redis具有高效的底层数据结构为优化内存对每种类型基本都有两种底层实现方式
主要执行过程是单线程避免了不必要的上下文切换和资源竞争不存在多线程导致的CPU切换和锁的问题。
IO多路复用机制使其在网络IO操作中能并发处理大量的客户端请求从而实现高吞吐率。
IO多路复用机制是指一个线程处理多个IO流也就是常说的select/epoll机制。在Redis运行单线程的情况下该机制允许内核中同时存在多个监听套接字和已连接套接字。内核会一直监听这些套接字上的连接请求或数据请求。一旦有请求到达就会交给Redis线程处理这就实现了一个Redis线程处理多个IO流的效果进而提升并发性。
7Redis与memcached比较
比较的种类MemcachedRedis类型Key-value数据库Key-value数据库过期策略支持支持数据类型单一数据类型五大数据类型持久化不支持支持主从复制不支持支持虚拟内存不支持支持
四、redis的安装配置
1redis的源码编译安装
---------------------- Redis 安装部署 ----------------------------------------
//环境准备
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i s/enforcing/disabled/ /etc/selinux/config#修改内核参数
vim /etc/sysctl.conf
vm.overcommit_memory 1
net.core.somaxconn 2048sysctl -p//安装redis
yum install -y gcc gcc-c maketar zxvf /opt/redis-7.0.9.tar.gz -C /opt/
cd /opt/redis-7.0.9
make
make PREFIX/usr/local/redis install
#由于Redis源码包中直接提供了 Makefile 文件所以在解压完软件包后不用先执行 ./configure 进行配置可直接执行 make 与 make install 命令进行安装。#创建redis工作目录
mkdir /usr/local/redis/{conf,log,data}cp /opt/redis-7.0.9/redis.conf /usr/local/redis/conf/useradd -M -s /sbin/nologin redis
chown -R redis.redis /usr/local/redis/#环境变量
vim /etc/profile
PATH$PATH:/usr/local/redis/bin #增加一行source /etc/profile//修改配置文件
vim /usr/local/redis/conf/redis.conf
bind 127.0.0.1 192.168.73.105 #87行添加 监听的主机地址
protected-mode no #111行将本机访问保护模式设置no。如果开启了那么在没有设定bind ip且没有设密码的情况下Redis只允许接受本机的响应
port 6379 #138行Redis默认的监听6379端口
daemonize yes #309行设置为守护进程后台启动
pidfile /usr/local/redis/log/redis_6379.pid #341行指定 PID 文件
logfile /usr/local/redis/log/redis_6379.log #354行指定日志文件
dir /usr/local/redis/data #504行指定持久化文件所在目录
requirepass abc123 #1037行增加一行设置redis密码编译安装解压过程省略 2redis的服务管理
//定义systemd服务管理脚本
vim /usr/lib/systemd/system/redis-server.service
[Unit]
DescriptionRedis Server
Afternetwork.target[Service]
Userredis
Groupredis
Typeforking
TimeoutSec0
PIDFile/usr/local/redis/log/redis_6379.pid
ExecStart/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
ExecReload/bin/kill -s HUP $MAINPID
ExecStop/bin/kill -s QUIT $MAINPID
PrivateTmptrue[Install]
WantedBymulti-user.target#启动服务
systemctl start redis-server
systemctl enable redis-servernetstat -lntp | grep 6379 五、redis的命令工具
工具作用redis-server用于启动redis的工具redis-benchmark用于检测redis在本机的运行效率redis-check-aof修复AOF持久化文件redis-check-rdb修复RDB持久化文件redis-cliredis命令行工具
1redis-cliRedis 命令行工具
redis-cli -h host -p port [-a password]-h指定远程主机机-p指定Redis服务的端口号-a指定密码未设置数据库密码可以省略-a选项#-a选项若不添加任何选项表示使用127.0.0.1:6379连接本机上的Redis数据库#登录本机redis-cli#远程登录redis-cli -h 192.168.73.50 -p 6379 [-a 密码] 2redis-benchmark 测试工具
redis-benchmark是官方自带的Redis性能测试工具可以有效的测试Redis服务的性能
基本的测试语法redis-benchmark [选项] [选项值]-h指定服务器主机名。-p指定服务器端口。-s指定服务器 socket-c指定并发连接数。-n指定请求数。-d以字节的形式指定SET/GET值的数据大小。-klkeep alive 0reconnect -rSET/GET/INCR 使用随机key,SADD使用随机值-P通过管道传输numreg请求-q强制退出redis仅显示query/sec值--csv以CSV格式输出-l生成循环,永久执行测试-t仅运行以逗号分隔的测试命令列表-IIdle模式仅打开N个idle连接并等待
(1)并发连接与100000 个请求处理性能测试
redis-benchmark -h 192.168.73.50 -p 6379 -a abc123 -c 100 -n 100000 2数据包的存取的性能测试 redis-benchmark -h 192.168.73.50 -p 6379 -a abc123 -q -d 100 3 键值对的创建速度测试 redis-benchmark -t set,lpush -n 100000 -q 六、redis的简单操作
命令作用set存放数据get获取数据keys *查看所有的keykeys k查看k开头后面任意一位的数据exists判断键是否存在存在1不存在0del删除键type查看键对应的value值类型rename key1 key2改名不管key2是否存在都会改名成功。如果存在key1的值会覆盖key2得值renamenx key1 key2改名若key2不存在可以改名成功。若key2存在则不进行改名dbsize查看当前数据库中key的数目
1redis键值对的存取
set存放数据命令格式为 set key valueget获取数据命令格式为 get key 2redis键值列表的获取
键值的设置
192.168.73.105:6379 set v1 1
OK
192.168.73.105:6379 set v2 2
OK
192.168.73.105:6379 set v3 3
OK
192.168.73.105:6379 set k1 4
OK
192.168.73.105:6379 set k2 5
OK
192.168.73.105:6379 set k3 6
OK1获取全部列表 2获取以某字符为开头任意长度的键
keys v*
keys k* 3获取以某字符为开头后面为指定长度的键
添加测试数据
192.168.73.105:6379 set v123 123
OK
192.168.73.105:6379 set v11 11
OK
192.168.73.105:6379 set v1124 1124
keys v?
keys v??
keys v???
keys v???? 3判断键是否存在
exists 键 #返回结果 为0 则为不存在返回为1即为存在 4删除键
del 键 5查看键存储的数据类型 type 键 6rename 重命名
使用rename命令进行重命名时无论目标key是否存在都会进行重命名且源key的值会覆盖目标key的值在实际使用过程中建议先用exists命令查看目标key 是否存在然后再决定是否执行rename 命令以避免覆盖重要数据
命令格式 rename 源key 目标key 7renamenx 重命名
——会检查目标键名是否已存在
renamenx 命令的作用是对已有key进行重命名并检测新名是否存在如果目标key存在则不进行重命名。不覆盖
renamenx 源key 目标key 8dbsize查看键数目
dbsize 9设置和清空密码
设置和查看密码
#设置redis的登录密码
config set requirepass password
#查看redis的密码
config get requirepass 清空密码
#清空密码config set requirepass 七、Redis多数据库操作
Redis 支持多数据库Redis默认情况下包含16个数据库数据库名称是用数字0-15来依次命名的。
使用redis-cli连接Redis数据库后默认使用的是序号为0的数据库。
多数据库相互独立互不干扰
1多数据库间切换select 命令格式select 序号#使用redis-cli连接Redis数据库后默认使用的是序号为0的数据库。127.0.0.1:6379select 10 #切换至序号为10的数据库127.0.0.1:6379[10]select 15 #切换至序号为15的数据库127.0.0.1:6379[15]select 0 #切换至序号为0的数据库127.0.0.1:6379[0] 2多数据库间移动数据
move 键值 序号库的序号 3清除数据库内数据 FLUSHDB清空当前数据库数据FLUSHALL清空所有数据库的数据 八、redis的常见错误与解决方案
1Redis常见运维故障
使用 keys* 把库堵死。——建议使用别名把这个命令改名超过内存使用后,部分数据被删除。——这个有删除策略的,选择适合自己的即可没开持久化却重启了实例,数据全掉。——记得非缓存的信息需要打开持久化RDB的持久化需要 Vm.overcommit_memory1 否则会持久化失败没有持久化情况下,主从,主重启太快,从还没认为主挂的情况下,从会清空自己的数据人为重启主节点前,先关闭从节点的同步
2Redis故障排查
结合Redis 监控查看QPS、缓存命中率、内存使用率等信息确认机器层面的资源是否有异常故障时及时上机使用 redis-cli monitor 打印出操作日志然后分析事后分析此条失效和研发沟通确认是否有大Key在堵塞大Key也可以在日常的巡检中获得 和组内同事沟通确实是否有误操作和运维同事、研发一起排查流量是否正常是否存在被刷的情况