redis的概述和部署

Posted 遙遙背影暖暖流星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis的概述和部署相关的知识,希望对你有一定的参考价值。

一、关系型数据库与非关系型数据库

1 关系型数据库

在这里插入代码片

关系型数据库是一个结构化的数据库,创建在关系模型基础上,一般面向于记录

他借助于集合代数等数学概念和方法来处理数据库中的数据

关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表以及之间的联系组成的一个数据组织

sql语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库的检索和操作

包括Oracle、mysql、SQL Server、Microsoft Access、DB2等

2 、非关系型数据库

非关系型数据库,nosql (not only sql),意思是不仅仅是sql,是非关系型数据库的总称

主流的nosql数据库有redis、mongbd、hbase、couhdb等等,以上这些数据库,他们的存储方式、存储结构以及使用的场景都是完全不同的

换言之,除了主流的关系型数据库以外的数据库,都被认为是非关系型的

3 、非关系型数据库产生背景

huge storage————对海量数据提高存储与访问需求
high scalability && high availability ————对数据库高可扩展性与高可用性需求
high scalability && high availability ————对数据库高可扩展性与高可用性需求

关系型数据库已经诞生很久了,为何还会产生nosql,这里简单介绍一下nosql产生的背景.

随着web2.0网站的技术的发展和应用关系型数据库在应对web2.0网站时开始暴露处理能力上不足的问题,只要表现三方面:处理高并发,处理海量信息存储以及新的高可用性能

web2.0网站会根据用户的个性化信息来实时生成动态页面和提供动态信息,因此,无法使用动态页面静态化技术,所以数据库的并发负载会非常高,一般会达到10000次/s以上的读写请求,而关系型数据库对于上万次的查询请求还可以勉强支撑,但是出现上万次的写数据请求,硬盘的IO就已经无法承受了,对于普通的BBS网站,往往也会存在高并发的写数据请求,比如社会大热点新闻时,可能因为流量过大导致微博短平台出现短时间的热搜瘫痪

huge storage————对海量数据提高存储与访问需求
类似于facebook、friendfeed这样的SNS网站,每天会产生大量的用户动态信息,如friendfeed,一个月就会产生2.5亿条用户动态信息,对于关系型数据库来说,在一个包含2.5亿条记录的表中执行sql查询,效率是非常低的

high scalability && high availability ————对数据库高可扩展性与高可用性需求

在web架构中,数据库是最难进行横向扩展的。当应用系统的用户量与访问量与日俱增时,数据库没法像web服务一样,简单得通过添加硬件和服务器节点来扩展其性能和负载能力的,尤其对于一些需要24小时不间断对外提供服务的网站来说,数据库的升级与扩展往往伴随着停机维护与数据迁移,其工作量十分庞大

关系型数据库和非关系型数据库都有各自的特点与应用场景,两者的紧密结合将会给web2.0的数据库发展带来新的思路,让关系数据库关注在关系上,非关系型数据库关注在存储上。

例如,在读写分离的mysql数据库环境中,可以把经常访问的数据存储在非关系型数据库中,提升访问速度


关系数据库:保存位置 磁盘
非关数据库(内存/缓存数据库):保存的位置是缓存/内存(效率、速度块〉特殊的是redis,因为redis可以将内存中的数据保存在磁盘中

高热数据保存在resis中,当web服务器过来访问的时候,读取redis中的高热数据。如果redis中没有数据,再从mysql数据库中读取数据。

Mysql  高热数据——》redis
web ——》redis——》mysql
类型:CPU——》内存/缓存—》磁盘

4、关系型数据库和非关系型数据库区别

(1)数据存储方式不同

关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。
与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块(一个小的块存储单元)组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。数据及其特性是选择数据存储和提取方式的首要影响因素。
关系型:依赖于关系模型E-R图,同时以表格式的方式存储数据
非关系型:除了以表格形式存储之外,通常会以大块的形式组合在一起进行存储数据

(2)扩展方式不同

SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。
要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来克服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。
而NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。

关系:纵向(天然表格式)
非关:横向(天然分布式)

(3)对事务性的支持不同

如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是最佳选择。SQL数据库支持对事务ACID原子性细粒度控制,并且易于回滚事务。
虽然NoSQL数据库也可以使用事务操作,但稳定性上面没法和关系型数库比较,所久他们真正闪亮的价值是在操作的扩展性和大数据量处理方面。
关系型:特别适合高事务性要求和需要控制执行计划的任务
非关系:此处会稍显弱势,其价值点在于高扩展性和大数据量处理方面

二、Redis概述
1、 redis 简介
Redis是一个开源的、使用C语言编写的NoSQL数据库。
Redis基于内存运行并支持持久化(支持存储在磁盘),采用key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环。
redis服务器程序是单进程模型,也就是在一台服务器上可以同时运行多个redis进程,而redis的实际处理速度则是完全依靠于主进程的执行效率

若是在服务器上只运行一个redis进程,当多个客户端同时访问,服务器的处理能力会有一定程度的下降;

若是在同一台服务器上开启多个redis进程,redis会提高并发处理能力的会给服务器的cpu造成很大的压力

也就是说在实际生产环境中,需要根据实际的需求来决定开启多少个redis进程

若对高并发要求更高一些,可能会考虑在同一台服务器上开启多个进程;

若CPU资源比较紧张,采用单进程即可

2 、Redis的优点
比较对象sql数据库和其他nosql数据库
①具有极高的数据读写速度:数据读取的速度最高可达到110000 次/s,数据写入速度最高可达到81000 次/s。
②支持丰富的数据类型:支持key-value、Strings、Lists、Hashes(散列值)、Sets 及ordered Sets等数据类型操作。

string  字符串     (可以为整形、浮点和字符型,统称为元素)
list      列表      (实现队列,元素不唯一,先入先出原则)
set      集合:      (各不相同的元素)
hash hash散列值:    ( hash的key必须是唯一的)
set /ordered ets    集合/有序集合

三.部署步骤

1、Redis安装部署

将数据包上传到/opt

cd /opt
tar xzf redis-5.0.7.tar.gz
yum install -y gcc gcc-c++ make 

cd /opt/ redis-5.0.7/
make
make PREFIX=/usr/local/redis install  #编译安装


执行脚本,配置Redis服务所需要的相关配置文件

cd /opt/redis-5.0.7/utils
./install_server.sh
[root@localhost utils]# ./install_server.sh #这个脚本在安装包的utils内
Please select the redis port for this instance: [6379] 	#回车,此处是端口号
Please select the redis config file name [/etc/redis/6379.conf] 	#回车,此处是配置文件位置
Please select the redis log file name [/var/log/redis_6379.log]  #回车,此处是日志文件位置
Please select the data directory for this instance [/var/lib/redis/6379] 	#回车,数据文件存放位置
Please select the redis executable path [] 	#扩展路径,需要自己输入/usr/local/redis/bin/redis-server,不可以删除,写的时候注意
Is this ok? Then press ENTER to go on or Ctrl-C to abort.		#回车
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/bin/redis-cli                           ####客户端命令行工具
Installation successful!	#完成
[root@localhost utils]# cd /etc/redis/
[root@localhost redis]# ls
6379.conf		#主配置文件

创建环境变量

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                  #状态

[root@localhost redis]# /etc/init.d/redis_6379   start
[root@localhost redis]# redis-cli  #可以登录
127.0.0.1:6379> exit
[root@localhost redis]# vim /etc/redis/6379.conf 
 bind 127.0.0.1 192.168.100.8                  #修改70行,添加监听的本机地址(只改了这一个)
#其他配置说明
port 6379                                    #93行,Redis默认的监听端口
daemonize yes                                #137行,启用守护进程
pidfile /var/run/redis_6379.pid              #159行,指定PID文件
loglevel notice                              #167行,日志级别
logfile /var/log/redis_6379.log              #172行,指定日志文件

[root@localhost redis]# /etc/init.d/redis_6379 restart
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...
[root@localhost redis]# redis-cli -h 192.168.100.8 -p 6379   #利用监听地址登录

2、其他命令工具

redis-server:用于启动Redis 的工具
redis-benchmark:用于检测Redis在本机的运行效率
redis-check-aof:修复AOF持久化文件
redis-check-rdb:修复RDB持久化文件
redis-cli: Redis 命令行工具.
# rdb和aof 是redis服务中持久化功能的两种形式  RDB AOF
# redis-cli 常用于登陆至 redis数据库

3、redis-benchmark 测试工具

-h:指定服务器主机名。
-p:指定服务器端口。
-s:指定服务器socket(套接字)
-c:指定并发连接数。
-n:指定请求数。
-d:以字节的形式指定 SET/GET值的数据大小。
-k: 1=keep alive  O=reconnect
-r: SET/GET/INCR 使用随机key,SADD使用随机值。
-P:通过管道传输<numreq>请求。
-q:强制退出redis。仅显示query/sec值。
--csv:以cSv格式输出。
-l:生成循环,永久执行测试。
-t:仅运行以逗号分隔的测试命令列表。
-I : Idle模式。仅打开N个idle连接并等待。

redis-benchmark -h 192.168.100.8 -p 6379 -c 100 -n 100000 
#向IP地址为192.168.80.1、端口为6379 的Redis服务器发送100个并发连接与100000个请求测试性能


redis-benchmark -h 192.168.100.8  -p 6379  -q  -d 100
#测试存取大小为100字节的数据包的性能、


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

redis中的一些命令

set key名 键值 
get key名 
keys *   #查看所有的键127.0.0.1:6379> type k1 
string            //表示字符串
127.0.0.1:6379> type mylist 
list             //列表


rename  源key  目标key  #重命名并覆盖

在这里插入代码片
127.0.0.1:6379> dbsize 
(integer) 9   #查看库中有多少个键


127.0.0.1:6379> config set requirepass 123456 //设置密码
OK
127.0.0.1:6379> auth 123456      //认证
OK
127.0.0.1:6379> config get requirepass  //获取密码
1) "requirepass"
2) "123456"

以上是关于redis的概述和部署的主要内容,如果未能解决你的问题,请参考以下文章

Redis(主从复制哨兵模式集群)概述及部署

NoSQL之redis概述+部署

Redis(主从复制哨兵模式集群)概述及部署

SpringBoot使用SchedulingConfigurer实现多个定时任务多机器部署问题

SpringBoot使用SchedulingConfigurer实现多个定时任务多机器部署问题

Redis数据库安装部署及基本操作!