缓存概念

缓存是为了调理速度不共同的两个或多个不同的物质的速度,在中心对速度较慢的一方起到加快效果,比方CPU的一级、二级缓存是保存了CPU最近常常拜访的数据,内存是保存CPU常常拜访硬盘的数据,并且硬盘也有大小不一的缓存,乃至是物理服务器的raid 卡有也缓存,都是为了起到加快CPU 拜访硬盘数据的目的,由于CPU的速度太快了,CPU需求的数据由于硬盘往往不能在短时刻内满意CPU的需求,因而CPU缓存、内存、Raid 卡缓存以及硬盘缓存就在必定程度上满意了CPU的数据需求,即CPU 从缓存读取数据能够大幅进步CPU的工作功率。

体系缓存

buffer与cache:

  • buffer: 缓冲也叫写缓冲,一般用于写操作,能够将数据先写入内存再写入磁盘,buffer 一般用于写缓冲,用于解决不同介质的速度不共同的缓冲,先将数据临时写入到里自己最近的地方,以进步写入速度,CPU会把数据先写到内存的磁盘缓冲区,然后就以为数据现已写入完结看,然后由内核在后续的时刻在写入磁盘,所以服务器突然断电会丢掉内存中的部分数据。

  • cache: 缓存也叫读缓存,一般用于读操作,CPU读文件从内存读,假如内存没有就先从硬盘读到内存再读到CPU,将需求频频读取的数据放在里自己最近的缓存区域,下次读取的时分即可快速读取

缓存保存方位及分层结构

  • 用户层:浏览器DNS缓存,运用程序DNS缓存,操作体系DNS缓存客户端
  • 署理层:CDN,反向署理缓存
  • Web层:Web服务器缓存
  • 运用层:页面静态化
  • 数据层:数据分布式缓存,库
  • 体系层:操作体系cache
  • 物理层:磁盘cache, Raid Cache

DNS缓存

浏览器的DNS缓存默以为60秒,即60秒之内在拜访同一个域名就不在进行DNS解析。

运用层缓存

Nginx、PHP等web服务能够设置运用缓存以加快响运用户请求,另外有些解释性言语,比方:PHP/Python/Java不能直接运转,需求先编译成字节码,但字节码需求解释器解释为机器码之后才干履行,因而字节码也是一种缓存,有时分还会呈现程序代码上线后字节码没有更新的现象。所以一般上线新版前,需求先将运用缓存整理,再上线新版。

另外能够运用动态页面静态化技术,加快拜访,比方:将拜访数据库的数据的动态页面,提前用程序生成静态页面文件html 电商网站的商品介绍,谈论信息非实时数据等皆可运用此技术完成。

数据层缓存

分布式缓存服务:

  • Redis
  • Memcached

数据库:

  • MySQL 查询缓存
  • innodb缓存、MYISAM缓存

硬件缓存

  • CPU缓存(L1的数据缓存和L1的指令缓存)、二级缓存、三级缓存
  • 磁盘缓存:Disk Cache
  • 磁盘阵列缓存:Raid Cache,可运用电池防止断电丢掉数据

联系型数据库与非联系型数据库

联系型数据库

  • 联系型数据库是一个结构化的数据库,创立在联系模型(二维表格模型)基础上,一般面向于记载。
  • SQL句子(规范数据查询言语)便是一种根据联系型数据库的言语,用于履行对联系型数据库中数据的检索和操作。
  • 干流的联系型数据库包括Oracle、 MySQL、SQL Server、Microsoft Access、 DB2、PostgreSQL 等。

以上数据库在运用的时分必须先建库建表规划表结构,然后存储数据的时分按表结构去存,假如数据与表结构不匹配就会存储失利。

非联系型数据库

  • NoSQL(NoSQL=NotonlysQL),意思是“不仅仅是SQL”,对错联系型数据库的总称。
  • 除了干流的联系型数据库外的数据库,都以为对错联系型。
  • 不需求预先建库建表定义数据存储表结构,每条记载能够有不同的数据类型和字段个数(比方微信群聊里的文字、图片、视频、音乐等)。
  • 干流的NOSQL 数据库有Redis、MongBD、 Hbase(分布式非联系型数据库,大数据运用)、Memcached、ElasticSearch(简称ES,索引型数据库)、TSDB(时续型数据库) 等。

联系型数据库和非联系型数据库差异:

(1)数据存储方法不同

联系型和非联系型数据库的主要差异是数据存储的方法。

  • 联系型数据天然便是表格局的,因而存储在数据表的行和列中。数据表能够彼此相关协作存储,也很简略提取数据。
  • 与其相反,非联系型数据不合适存储在数据表的行和列中,而是大块组合在一起。非联系型数据一般存储在数据集中,就像文档、键值对或许图结构。你的数据及其特性是挑选数据存储和提取方法的首要影响要素。(很简略切换数据类型,一个数据集傍边有多种数据类型)

(2)扩展方法不同

SQL和NoSQL数据库最大的不同可能是在扩展方法上,要支撑日益增长的需求当然要扩展。

  • 要支撑更多并发量,SQL数据库是纵向扩展,也便是说进步处理才干,运用速度更快速的计算机,这样处理相同的数据集就更快了。由于数据存储在联系表中,操作的功能瓶颈可能触及很多个表,这都需求经过进步计算机功能来战胜。尽管SQI数据库有很大打展空间,但最终肯定会到达纵向扩展的上限。(数据一般存储在本地的文件体系中。读能够经过读写别离、负载均衡来分摊功能,但读写仍然很耗费IO功能)
  • 而NoSQL数据库是横向扩展的。由于非联系型数据存储天然便是分布式的,NoSQL数据库的扩展能够经过给资源池添加更多一般的数据库服务器(节点)来分担负载。(数据分布存储在不同服务器上,能够并发地读写,加快功率)

小贴士:

  • 横向扩展:加服务器。(比较廉价)
  • 纵向扩展:进步硬件装备,比方换更高功能的CPU、加CPU核数、硬盘、磁盘IO、内存条。(除硬盘外,其他需求停机才干加)

(3)对业务性的支撑不同

  • 假如数据操作需求高业务性或许复杂数据查询需求操控履行计划,那么传统的SQL数据库从功能和稳定性方面考虑是你的最佳挑选。SQL数据库支撑对业务原子性细粒度操控,并且易于回滚业务。
  • 尽管NoSQL数据库也能够运用业务操作,但稳定性方面没法和联系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。
  • 非联系型数据库在业务的处理和稳定性方面,不如联系型数据库。但读写功能好、易于扩展,处理大数据方面占优势。

联系型数据库:特别合适高业务性要求和需求操控履行计划的任务,业务细粒度操控更好。

非联系型数据库:业务操控会稍显弱势,其价值点在于高扩展性和大数据量处理方面。

非联系型数据库发生布景

可用于应对Web2.0纯动态网站类型的三高问题。

(1)High performance —— 对数据库高并发读写需求。

(2)Hugestorage——对海量数据高效存储与拜访需求。

(3)HighScalability&&HighAvailability——对数据库高可扩展性与高可用性需求。

联系型数据库和非联系型数据库都有各自的特色与运用场景,两者的紧密结合将会给web2.0的数据库发展带来新的思路。让联系型数据库重视在联系上和对数据的共同性确保,非联系型数据库重视在存储和高功率上。例如,在读写别离的MySQI数据库环境中,能够把常常拜访的数据(即高热数据)存储在非联系型数据库中,提升拜访速度

2.5 总结

联系型数据库:

  • 实例–>数据库–>表(table)–>记载行(row)、数据字段(column)

非联系型数据库:

  • 实例–>数据库–>调集(collection) –>键值对(key-value)

  • 非联系型数据库不需求手动建数据库和调集(表)。

Redis简介

Redis (长途字典服务器)是一个 开源的、运用C言语编写的NoSQL 数据库。

Redis 根据内存运转并支撑耐久化,选用key-value (键值对)的存储方法,是现在分布式架构中不行或缺的一环。

Redis服务器程序是单进程模型,也便是在一台服务器上能够一起发动多个Redis进程,Redis的实际处理速度则是彻底依托于主进程的履行功率。

  • 若在服务器上只运转一个Redis进程,当多个客户端一起拜访时,服务器的处理才干是会有必定程度的下降;
  • 若在同一台服务器上敞开多个Redis进程,Redis在进步并发处理才干的一起会给服务器的CPU形成很大压力。

即:在实际生产环境中,需求根据实际的需求来决议敞开多少个Redis进程。若对高并发要求更高一些,可能会考虑在同一台服务器上敞开多个进程。若CPU资源比较紧张,选用单进程即可。

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

Redis具有以下几个长处:

(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缺陷

  1. 缓存和数据库双写共同性问题
  2. 缓存雪崩问题
  3. 缓存击穿问题
  4. 缓存## Redis的适用场景
  • Redis作为根据内存运转的数据库,是一个高功能的缓存,一般运用在session缓存、 行列、排行榜、计数器、最近最热文章、最近最热谈论、发布订阅等。
  • Redis适用于数据实时性要求高、数据存储有过期和筛选特征的、不需求耐久化或许只需求确保弱共同性、逻辑简略的场景。

Redis为什么这么快?

  • 1、Redis是一款纯内存结构,防止了磁盘 I/O 等耗时操作。(根据内存运转)

  • 2、Redis指令处理的中心模块为单线程,减少了锁竞赛,以及频频创立线程和毁掉线程的代价,减少了线程上下文切换的耗费。(单线程模型)

  • 3、选用了 I/O 多路复用机制,大大提升了并发功率。(epoll形式)

注:

linux体系中有两种I/O类型:磁盘I/O,网络请求I/O。

在Redis6.0中新添加的多线程也只是针对处理网络请求进程选用了多线性,而数据的读写指令,仍然是单线程处理的。

Redis与memcached比较

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

Redis装置部署

#封闭防火墙
systemctl stop firewalld
setenforce 0
#装置环境依靠包
yum install -y gcc gcc-c++ make
​
#上传软件包并解压
cd /opt/
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/
#开2核编译装置,指定装置途径为/usr/local/redis
make -j2 && make PREFIX=/usr/local/redis install
#由于Redis源码包中直接提供了Makefile 文件,所以在解压完软件包后,不必先履行./configure 进行装备,可直接履行make与make install指令进行装置。#履行软件包提供的install_server.sh 脚本文件,设置Redis服务所需求的相关装备文件
cd /opt/redis-5.0.7/utils
./install_server.sh
.......#一向回车
​
Please select the redis executable path [] /usr/local/redis/bin/redis-server
#这儿默以为/usr/local/bin/redis-server,需求手动修改为/usr/local/redis/bin/redis-server,注意要一次性正确输入
​
​
---------------------- 虚线内是注释 ----------------------------------------------------
Selected config:
Port: 6379                   #默许侦听端口为6379
Config file: /etc/redis/6379.conf        #装备文件途径
Log file: /var/log/redis_6379.log        #日志文件途径
Data dir : /var/lib/redis/6379         #数据文件途径
Executable: /usr/local/redis/bin/redis-server  #可履行文件途径
Cli Executable : /usr/local/bin/redis-cli    #客户端指令东西
-----------------------------------------------------------------------------------
​
#当install_server.sh 脚本运转完毕,Redis 服务就现已发动,默许监听端口为6379
netstat -natp | grep redis
​
#把redis的可履行程序文件放入途径环境变量的目录中便于体系辨认
ln -s /usr/local/redis/bin/* /usr/local/bin/
​
​
#Redis服务操控
/etc/init.d/redis_6379 stop   #停止
/etc/init.d/redis_6379 start  #发动
/etc/init.d/redis_6379 restart #重启
/etc/init.d/redis_6379 status  #检查状况
​
​
#修改装备文件,参数
vim /etc/redis/6379.conf
......
70 bind 127.0.0.1 192.168.72.60     #监听的IP地址
93 port 6379             #监听端口
137 daemonize yes           #运用看护进程的方法发动,即后台发动 
159 pidfile /var/run/redis_6379.pid  #Redis的进程号保存方位
172 logfile /var/log/redis_6379.log  #日志保存的方位
187 databases 16           #监听库的数量(编号0-15)
​
/etc/init.d/redis_6379 restart   #重启redis服务

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

修改装备文件 /etc/redis/6379.conf

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

Redis指令东西

东西 效果
redis-server 用于发动redis的东西
redis-benchmark 用于检测redis在本机的运转功率
redis-check-aof 修正AOF耐久化文件
redis-check-rdb 修正RDB耐久化文件
redis-cli redis指令行东西

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

redis-cli:Redis 指令行东西

语法: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.72.60 -p 6379 [-a 暗码]

redis-benchmark 测验东西

redis-benchmark是官方自带的Redis功能测验东西,能够有效的测验Redis服务的功能。

基本的测验语法:redis-benchmark [选项] [选项值]
​
-h:指定服务器主机名。
-p:指定服务器端口。
-s:指定服务器 socket
-c:指定并发衔接数。
-n:指定请求数。
-d:以字节的方法指定SET/GET值的数据大小。
-k:l=keep alive 0=reconnect 
-r:SET/GET/INCR 运用随机key,SADD运用随机值
-P:经过管道传输<numreg>请求
-q:强制退出redis,仅显示query/sec值
--csv:以CSV格局输出
-l:生成循环,永久履行测验
-t:仅运转以逗号分隔的测验指令列表
-I:Idle形式,仅翻开N个idle衔接并等候

示例1:

向IP地址为192.168.184.105、 端口为6379 的Redis 服务器发送100个并发衔接与100000 个请求测验功能。

redis-benchmark -h 192.168.184.103 -p 6379 -c 100 -n 100000

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

示例2:

测验存取大小为100字节的数据包的功能。

redis-benchmark -h 192.168.184.103 -p 6379 -q -d 100

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

示例3:

测验本机上Redis 服务在进行 set 与 lpush 操作时的功能。

redis-benchmark -t set,lpush -n 100000 -q

Redis数据库常用指令

指令 效果
set 寄存数据
get 获取数据
keys * 检查一切的key
keys k? 检查k开头后边恣意一位的数据
exists 判别键是否存在(存在1,不存在0)
del 删去键
type 检查键对应的value值类型
rename key1 key2 改名,不管key2是否存在都会改名成功。假如存在,key1的值会掩盖key2得值
renamenx key1 key2 改名,若key2不存在,能够改名成功。若key2存在则不进行改名
dbsize 检查当时数据库中key的数目

set、get 设置和获取键的值

set:寄存数据,指令格局为 set key value
get:获取数据,指令格局为 get key 
​
示例:
 [root@yuji ~]# redis-cli
127.0.0.1:6379> set teacher lisi
OK
127.0.0.1:6379> get teacher
"lisi"

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

keys 获取键值列表

keys指令能够获取符合规则的键值列表,一般情况能够结合 *、? 等选项来运用。

#先创立几个键
127.0.0.1:6379>set k1 1
127.0.0.1:6379>set k2 2
127.0.0.1:6379>set k3 3 
127.0.0.1:6379>set v1 4 
127.0.0.1:6379>set v5 5
127.0.0.1:6379>set v22 6
127.0.0.1:6379>set v33 7
​
127.0.0.1:6379>keys *    #检查当时数据库中一切键
127.0.0.1:6379>keys v*   #检查当时数据库中以v开头的键
127.0.0.1:6379>keys v?   #检查当时数据库中以v开头,后边包括恣意一位字符的键
127.0.0.1:6379>keys v??   #检查当时数据库中以v开头,后边包括恣意两位字符的键

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

exists 判别键是否存在exists 指令能够判别键是否存在。

回来1,表明键存在。

回来0,表明键不存在。

127.0.0.1:6379> exists teacher #判别teacher键是否存在,回来1表明存在
(integer) 1
127.0.0.1:6379> exists student #判别studen键是否存在,回来0表明存在
(integer) 0

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

del 删去键

del 指令能够删去当时数据库的指定key。

127.0.0.1:6379> get k1
"1"
127.0.0.1:6379> del k1   #删去k1键
(integer) 1
127.0.0.1:6379> get k1
(nil)
127.0.0.1:6379> exists k1  #k1键已不存在
(integer) 0

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

type 检查键存储的数据类型

type 指令能够获取 key 对应的 value 值类型。

127.0.0.1:6379> get k2
"2"
127.0.0.1:6379> type k2
string     

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

rename 重命名

rename 指令是对已有 key 进行重命名。(掩盖)

  • 运用rename指令进行重命名时,无论方针key是否存在都会进行重命名,且源key的值会掩盖方针key的值。

  • 在实际运用进程中,主张先用exists指令检查方针key 是否存在,然后再决议是否履行rename 指令,以防止掩盖重要数据。

指令格局: rename 源key 方针key

示例:

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

127.0.0.1:6379> keys *
 1) "k3"
 2) "v1"
 3) "v33"
 4) "v5"
 5) "mylist"
 6) "v22"
 7) "teacher"
 8) "key:__rand_int__"
 9) "counter:__rand_int__"
10) "k2"
11) "myset:__rand_int__"
127.0.0.1:6379> rename v33 v30   #将键v33重命名为v30
OK
127.0.0.1:6379> keys *
 1) "k3"
 2) "v1"
 3) "v30"
 4) "v5"
 5) "mylist"
 6) "v22"
 7) "teacher"
 8) "key:__rand_int__"
 9) "counter:__rand_int__"
10) "k2"
11) "myset:__rand_int__"

renamenx 会检查方针键名是否已存在

renamenx 指令的效果是对已有key进行重命名,并检测新名是否存在,假如方针key存在则不进行重命名。(不掩盖)

127.0.0.1:6379> keys *
 1) "k3"
 2) "v1"
 3) "v30"
 4) "v5"
 5) "mylist"
 6) "v22"
 7) "teacher"
 8) "key:__rand_int__"
 9) "counter:__rand_int__"
10) "k2"
11) "myset:__rand_int__"
127.0.0.1:6379> renamenx v1 k3   #由于k3键存在,所以重命名不成功。回来0表明履行不成功。
(integer) 0
127.0.0.1:6379> renamenx v1 v100    #重命名成功。回来1表明成功。
(integer) 1            
127.0.0.1:6379> keys *
 1) "k3"
 2) "v100"
 3) "v30"
 4) "v5"
 5) "mylist"
 6) "v22"
 7) "teacher"
 8) "key:__rand_int__"
 9) "counter:__rand_int__"
10) "k2"
11) "myset:__rand_int__"

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

dbsize检查键数目

dbsize 指令的效果是检查当时数据库中key的数目。

127.0.0.1:6379> dbsize    #检查键数目
(integer) 11         #总共11个键
127.0.0.1:6379>

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

设置和清空暗码

1、设置和检查暗码

运用config set requirepass password指令设置暗码。(一旦设置暗码,必须先验证经过暗码,不然一切操作不行用)

运用config get requirepass指令检查暗码。

127.0.0.1:6379> config set requirepass 123456  #设置暗码
OK
192.168.72.60:6379> config get requirepass
(error) NOAUTH Authentication required.   #设置暗码后,需求先验证暗码才干操作其他指令
127.0.0.1:6379> auth 123456         #验证暗码
OK
192.168.72.60:6379> config get requirepass #检查暗码 
1) "requirepass"
2) "123456"
​
​
#设置暗码后,运用暗码登录能够直接操作,不需求二次验证
[root@yuji ~]# redis-cli -h 192.168.72.60 -p 6379 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.72.60:6379> get teacher
"lisi"

清空暗码:

运用config set requirepass ''清空暗码。

192.168.184.103:6379> config set requirepass ''  #清空暗码
OK
192.168.184.103:6379> config get requirepass
1) "requirepass"
2) ""         #暗码已为空

Redis多数据库操作

Redis 支撑多数据库,Redis默许情况下包括16个数据库,数据库名称是用数字0-15来顺次命名的。

运用redis-cli衔接Redis数据库后,默许运用的是序号为0的数据库。

多数据库相互独立,互不干扰。

多数据库间切换select

指令格局:select 序号
​
#运用redis-cli衔接Redis数据库后,默许运用的是序号为0的数据库。
127.0.0.1:6379>select 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]>

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

多数据库间移动数据

指令格局:move 键值 序号
​
#示例:
127.0.0.1:6379> set k1 100  #在数据库0中设置键k1
OK
127.0.0.1:6379> get k1    #检查键k1的值,为100
"100"
127.0.0.1:6379> select 1    #切换至方针数据库1
OK 
127.0.0.1:6379[1]> get k1   #数据库1无法检查到k1的值
(nil)
127.0.0.1:6379[1]> select 0  #切换至方针数据库0
OK
127.0.0.1:6379> get k1     #检查方针数据是否存在
"100"
127.0.0.1:6379> move k1 1   #将数据库0中k1移动到数据库1中
(integer) 1
127.0.0.1:6379> select 1    #切换至方针数据库1
OK
127.0.0.1:6379[1]> get k1   #检查被移动数据
"100"
127.0.0.1:6379[1]> select 0  #切换到数据库0
OK
127.0.0.1:6379> get k1     #在数据库0中无法检查到k1的值
(nil)
​

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

清除数据库内数据

FLUSHDB:清空当时数据库数据
FLUSHALL:清空一切数据库的数据,慎用!!!

示例:

192.168.184.103:6379[1]> keys *    #数据库1中有3个键
1) "shop"
2) "k1"
3) "k2"
192.168.184.103:6379[1]> flushdb   #清空当时数据库的数据
OK
192.168.184.103:6379[1]> keys *    #数据库1已无数据
(empty list or set)
192.168.184.103:6379[1]> select 0   #切换到数据库0
OK
192.168.184.103:6379> keys *     #数据库0的数据仍然存在
 1) "k3"
 2) "v100"
 3) "v30"
 4) "v5"
 5) "mylist"
 6) "v22"
 7) "teacher"
 8) "key:__rand_int__"
 9) "counter:__rand_int__"
10) "k2"
11) "myset:__rand_int__"
192.168.184.103:6379>

DAY 71 数据库缓存服务——NoSQL之Redis配置与优化

Redis 运维的毛病与处理方法

Redis常见运维毛病

  1. 运用 keys* 把库堵死。——主张运用别名把这个指令改名。

  2. 超过内存运用后,部分数据被删去。——这个有删去战略的,挑选合适自己的即可。

  3. 没开耐久化,却重启了实例,数据全掉。——记住非缓存的信息需求翻开耐久化。

  4. RDB的耐久化需求 Vm.overcommit_memory=1 ,不然会耐久化失利。

  5. 没有耐久化情况下,主从,主重启太快,从还没以为主挂的情况下,从会清空自己的数据,人为重启主节点前,先封闭从节点的同步。

Redis毛病排查

  1. 结合Redis 监控检查QPS、缓存命中率、内存运用率等信息。
  2. 承认机器层面的资源是否有异常。
  3. 毛病时及时上机,运用 redis-cli monitor 打印出操作日志,然后分析(过后分析此条失效)。
  4. 和研制交流,承认是否有大Key在阻塞(大Key也能够在日常的巡检中取得) 和组内搭档交流,确实是否有误操作。
  5. 和运维搭档、研制一起排查流量是否正常,是否存在被刷的情况。

总结

1.常见的联系型数据库?

oracle、MySQL、SQL Server、Microsoft Access、DB2、PostgreSQL

2.常见的非联系型数据库?

Redis、MongBD、Hbase、Memcached、ElasticSearch(索引数据库)、TSDB(时刻序列数据库)

3.什么是Redis?

Redis(长途字典服务器)是一个开源的、运用c言语编写的NosQL数据库。

Redis 根据内存运转并支撑耐久化,选用key-value(键值对)的存储方法,是现在分布式架构中不行或的一环。

4.为什么需求Redis?

Redis 适用于数据实时性要求高、数据存储有过期和筛选特征的、不需求耐久化或许只需求确保弱共同性、逻辑简略的场景。

5.Redis如何功能测验?

运用 redis-benchmark 测验东西。

6.Redis默许数据类型:string

7.Redis为什么这么快?

  • 1、Redis是一款纯内存结构,防止了磁盘 I/O 等耗时操作。(根据内存运转)
  • 2、Redis指令处理的中心模块为单线程,减少了锁竞赛,以及频频创立线程和毁掉线程的代价,减少了线程上下文切换的耗费。(单线程模型)
  • 3、选用了 I/O 多路复用机制,大大提升了并发功率。(epoll形式)

8.Redis数据库指令

1)常用名指令

set 、get: 寄存、获取数据

del: 删去键

keys: 获取key,能够结合通配符 * 和 ?

exists: 判别key是否存在

type: 检查数据类型

rename和renamenx: 重命名的两种,后者会进行判别,存在则不改

dbsize: 检查当时数据库中key的数目

2)多数据库操作

select 序号 : 切换库名(16个数据库,数据库名称是用数字0-15)

move 键值 序号: 多数据库间移动数据

FLUSHDB : 清空当时数据库数据

FLUSHALL : 清空一切数据库的数据,慎用!!!