Redis的基础知识

REDIS非关系型数据库----NoSQL–Not Only SQL

一、关系型数据库和非关系型数据库:

1、关系型数据库:SQL

关系型数据库是一个结构化的数据库,创建在关系模型(二维表格)基础上,一般面向于记录。R-R图
E-R图:实体-关系-属性。
关系型数据库结构:主要以“二维表结构”方式存储数据\实体属性的,“相互关联”一种数据库。
SQL语句,即标准数据查询语言,就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。
主流的关系型数据库:Oracle、MySQL、SQL Server、Microsoft、DB2等。

2、非关系型数据库:NoSQL

NoSQL(Not Only SQL),意为不仅仅是SQL,是非关数据库的总称。
除了主流关系数据库以外的,都认为是非关。
主流非关:Redis、MongoDB、Hbase、Memcached、Postgresql(PG)等。除了Hbase都可能涉及到。
Redis正常学
Memcached mangoDB PostGresql需要学习和理解这些数据库是作用在哪里的-放在哪,能做什么-场景。

拓展:TSDB数据库:时序数据库

应用范围更为广泛,起源于工业和医学方面。心电图等
在一定时间内,随着时间点的推移,时间单位上的数据不断变化,并且连接成一条线。
IT行业:主要用于监控。

3、关系和非关的区别:

①数据存储方式不同:主要差异所在!

关系型:天然的表格式,存储在数据表的行和列。表之间可以关联协作存储,读写都很容易。
非关系:大块的组合在一起,通常储存在数据集中,类似于文档、键值对或者图结构。你的数据及特性是选择数据存储和提取方式的首要影响因素。
关系型:依赖于E-R图,以表格形式存储。
非关系:除了表格形式,通常以大块的形式组合在一起进行存储。基础单元PE(4字节)—LVM。

②扩展方式不同:最大的差别!***

为了支持日益增长的需求当然要扩展!
SQL数据库是纵向扩展,即提高处理能力,使用速度更快的计算机,这样处理就更快了。因为数据库存储在表中,需要通过提升计算机性能提升多个表操作性能的瓶颈。虽然扩展空间大,但是最早是有上限的。
NoSQL是横向扩展的。因为非关系型数据库存储天然是分布式的。可以通过添加更多的普通数据库服务器(节点)给资源池来分担,理论上无上限。
关系:纵向,提升计算机性能来扩展。
强化自身,内核—五大负载,系统—软件层面
非关:横向,增加节点给资源池扩展。

③对事务性的支持性不同:

如果需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性上是最佳选择,SQL支持对事物原子性细粒度控制,而且易于回滚。
虽然NoSQL也可以使用事物操作,但是稳定性方面没法和SQL比,NoSQL真正的亮点在于操作的扩展性和大数据量处理。
关系:适合高事务性要求和需要控制执行计划的任务。
非关:适合高扩展性和大数据量处理方面。—>高德,疫情行程轨迹(定位,实时监控,汇总)

4、非关系型数据库产生的背景:

可用于应对Web2.0纯动态网站类型的三高问题。
①High performance------对数据库高并发读写需求;
②HugeStorage-----------对海量数据高效存储与访问需求;
③High Scalability && High Availability----高扩展性与高可用性需求。

关系和非关都有自己的特点和适用场景,结合会给web2.0的数据库发展带来新的思路。让关系关注在关系上,非关关系在存储上。
例如:在读写分离的MySQL数据库环境中,可以把经常访问的数据存储在非关中,提升访问速度。
关系:保存位置–磁盘。
非关:保存位置–内存/缓存(效率、速度快)。
特殊的是Redis。因为Redis可以将内存中的数据保存在磁盘,重启时候可以再次加载。
MySQL 高热数据–> Redis
web -->Redis --> MySQL
CPU --> 内存/缓存 --> 磁盘

总结:

1、关系型数据库:
实例–>数据库–>表–>记录行、数据字段–>存储数据

2、非关系型数据库:
实例–>数据库–>集合–>键值对
workdir=/usr/local/mysql
非关不需要手动建数据库和集合(表)。

二、Redis简介:

Redis是一个开源的、使用C语言编写的NoSQL数据库。
Redis基于内存运行并支持持久化-存储在磁盘,采用key-value键值对的存储形式,是目前分部署架构中不可或缺的一环。
支持–可用可不用
Redis服务器程序是单进程模型。
Redis服务在一台服务器上可以同事启动多个Redis进程,Redis的实际处理速度则是完全依靠于主进程的执行效率。
若在服务器上只运行一个Redis进程,当多个客户端同时访问时,服务器的处理能力是会有一定程度的下降;若在同一台服务器上开启多个Redis进程,Redis在提高并发处理能力的同事会给服务器的CPU造成很大压力。
即:生产环境中,根据实际需求决定开启多少个Redis进程。
PS:建议可以开2个进程:
原因:
①备份;
②抗高并发的同时不给CPU太大的压力;
高并发要求高:多进程
CPU资源紧张:单进程

PS:
主进程产生后,系统会给主进程分配一个资源池,由主进程产生的子进程和线程与主进程公用这一个资源池pool。
—>好处:资源共享、信息共享、消耗的资源少。
如果开启多个主进程,每个主进程都有自己的资源池。当一个请求过来,如果需要用到主进程A和B中各一个子进程,需要在2个主进程之间相互切换,非常消耗CPU资源,也会给本地服务器CPU带来很大压力。
因此默认以单进程方式作为Redis开启运行主体。
生产中,建议2个进程。一个主进程A,一个主备进程B。
2个主进程之间切换,专业说法叫:上下文切换。
*****多进程开启根据公司生产环境实际需求。

1、Redis优点:
①具有极高的数据读写速度:数据读取的速度最高可达到110000次/S,写入高达81000次/S。若CPU资源紧张,单进程即可。
②支持丰富的数据类型:支持key-value、strings、lists、hashes-散列值,sets及ordered sets等数据类型操作。***
PS:
string 字符串(可以为整形、浮点和字符串,统称为元素)
list 列表(实现队列,元素不唯一,先入先出原则)
set 集合(各不相同的元素)
ordered sets 有序集合
③支持数据的持久化!!!可以将数据存储在磁盘中,重启后继续加载使用。
④原子性:Redis所有操作都是原子性的。
⑤支持数据备份:即主从模式的数据备份。

Redis作为基于内存运行的数据库,缓存是其最常应用的场景之一。
除此之外,Redis常用场景还包括获取最新的N歌数据的操作、排行榜类应用、计数器应用、存储关系、实时分析系统、日志记录。不止做MySQL缓存。

三、Redis部署:

1、环境准备:

systemctl stop firewalld
systemctl status firewalld
setenforce 0

在这里插入图片描述
----->Linux系统环境三板斧

yum -y install gcc gcc-c++ make
yum repolist  ----->重新加载yum
yum -y install gcc*

----->安装依赖环境

2、上传压缩包:redis-5.0.7.tar.gz

3、源码安装:

cd /opt
tar zxvf redis-5.0.7.tar.gz
cd /redis-5.0.7
make
make PREFIX=/usr/local/redis install

PS:由于Redis源码包自带Makefile文件,不需要./configure,直接make make install。

4、执行脚本文件设置配置文件:install_server.sh

cd /opt/redis-5.0.7/utils
./install_server.sh
--->一直回车默认到
Please select the redis executable path [] /usr/local/redis/bin/redis-server  ----->必须手撕,一次性输入成功。
Selected config:
Port           : 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/redis/bin/redis-cli  客户端命令工具

5、查看服务是否启动:netstat

netstat -antp | grep 6379

在这里插入图片描述

6、软连接优化:

ln -s /usr/local/redis/bin/* /usr/local/bin/  可执行程序文件放入路径环境变量的目录便于识别

7、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 

8、修改配置参数:/etc/redis/6379.conf

vim /etc/redis/6379.conf
bind 127.0.0.1 192.168.65.xxx   //70行,添加监听主机地址
port 6379                       //93行,默认监听端口
daemonize yes                   //137行,启用守护进程
pidfile /var/run/redis_6379.pid //159行,指定PID文件
loglevel notice                 //167行,日志级别
logfile /var/log/redis_6379.log //172行,指定日志文件
-----wq
/etc/init.d/redis_6379 restart  //重启服务

四、Redis命令工具:

redis-server:用于启动Redis的工具
redis-benchmark:用于检测Redis在本机的运行效率
redis-check-aof:修复AOF持久化文件
redis-check-rdb:修复RDB持久化文件
redis-cli:Redis命令行工具

RDB和AOF是Redis服务中心持久化功能的两种形式;
redis-cli常用于登录Redis数据库。

五、redis-cli命令行工具(远程登录):

语法:
redis-cli -h host -p port -a password
-h:指定远程主机
-p:指定Redis服务的端口号
-a:指定密码,未设置数据库密码可以省略-a
若不添加任何选项表示,则使用127.0.0.1:6379连接本机上的Redis数据库
例子:
redis-cli -h 192.168.65.xxx -p 6379

六、redis-benchmark测试工具:

是官方自带的Redis性能测试工具,可以有效的测试Redis服务的性能。

基本的测试语法:redis-benchmark [选项] [选项值]
选项:
-h:指定服务器主机名
-p:指定服务器端口
-s:指定服务器socket
-c:指定并发连接数
-n:指定请求数
-d:以字节的形式指定SET\GET 值得数据大小
-k:1=keepalive 0=reconnect
-r:SET/GET/INCR使用随机key,SADD使用随机值
-p:通过管道传输请求
-q:强制退出redis
–csv:以CSV格式输出
-l:生成循环,永久执行测试
-t:仅运行以逗号分割的测试命令列表
-I:Idle模式,仅打开N个idle连接并等待

例子:
①向IP地址为192.168.65.xxx、端口为6379的Redis服务器发送100个并发连接与100000个请求测试性能:
redis-benchmark -h 192.168.65.xxx -p 6379 -c 100 -n 100000

②测试存取大小为100字节的数据包的性能:
redis-benchmark -h 192.168.65.xxx -p 6379 -q -d 100

③测试本机上Redis服务在进行set与lpush操作时的性能:
redis-benchmark -t set,lpush -n 100000 -q

七、Redis数据库常用命令:

set:存放数据,格式 set key value
get:获取数据,格式 get key

例子:
redis-cli
127.0.0.1:6379> set teacher lrz
OK
127.0.0.1:6379> get teacher
“lrz”
在这里插入图片描述
1、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 5

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开头后面包含任意二位的数据

2、exists命令可以判断键值是否存在:
127.0.0.1:6379> exists teacher //判断teacher键是否存在
(integer) 1 //1为存在
127.0.0.1:6379> exists tea
(integer) 0 //0为不存在

3、type命令是对已有key进行重命名:覆盖
格式:
rename 源key 目标key
PS:使用rename命令进行重命名时,无论目标key是否存在都进行重命名,且源key的值会覆盖目标key的值。在实际使用过程中,建议先用exists命令查看目标key是否存在,然后再决定是否执行rename命令,以免覆盖重要数据。

例子:
127.0.0.1:6379> keys v*
1)“v1”
2)“v22”
127.0.0.1:6379> rename v22 v2
OK
127.0.0.1:6379> keys v*
1)“v1”
2)“v2”

4、dbsize命令的作用是咔嚓当前数据库中key的数目:
127.0.0.1:6379> dbsize

5、使用config get requirepass命令查看密码(一旦设置密码,必须先验证密码,不然操作不可用)
127.0.0.1:6379> auth 123456
127.0.0.1:6379> config get requirepsaa

6、删除密码:
127.0.0.1:6379> auth 123123
127.0.0.1:6379> config set requirepass ‘’
PS:以上不设置,无法启动redis

八、总结:

Redis是一种非关数据库(内存/缓存)
Redis相较于其他非关数据库的优势在于:
①数据类型丰富:5种
②持久化–可将数据保存在磁盘中,形式为RDB和AOF

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值