redis简介及安装

一、redis基本概念

1. Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
2. Redis的外围由一个键、值映射的字典构成。与其他非关系型数据库主要不同在于:Redis中值的类型 [1] 不仅限于字符串,还支持其他抽象数据类型
3. redis优点
1)异常快: Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执行81000次的读取/获取(GET)操作
2)支持丰富的数据类型:Redis支持开发人员常用的大多数数据类型,例如列表,集合,排序集和散列等等。这使得Redis很容易被用来解决各种问题,因为我们知道哪些问题可以更好使用地哪些数据类型来处理解决
3)操作具有原子性:所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值
4)多实用工具:Redis是一个多实用工具,可用于多种用例,如:缓存,消息队列(Redis本地支持发布/订阅),应用程序中的任何短期数据,例如,web应用程序中的会话,网页命中计数等
4. Redis的单线程执行模型
1)Redis对于命令的执行是串行的,也就是单线程的,在同一时刻只会执行一条命令
2)Redis以单线程执行命令,但其速度很快,原因在于
	(1)操作的数据全部存储在内存中,而内存中的数据读写操作是非常快的。(主要原因)
	(2)采用非阻塞IO
	(3)单线程执行避免了线程间的切换和竞态消耗
3)单线程执行需要注意的一些问题
	(1)Redis在同一时刻只能执行一条命令,其他命令将会进行排列等待
	(2)不要执行速度很慢的命令,比如keys/flushall/flushdb等命令
5. NoSQL
1)什么是 NoSQL
	(1)NoSQL = Not Only 仅仅 是 SQL) , 也解释为non-relational(非关系型数据库)。在 NoSQL 数据库中数据之间是无联系的,无关系的。数据的结构是松散的,可变的	
2)为什么使用 NoSQL	
	关系型数据库的瓶颈:
	(1)无法应对每秒上万次的读写请求,无法处理大量集中的高并发操作。关系型数据的是 IO 密集的应用。硬盘 IO 也变为性能瓶颈
	(2)表中存储记录数量有限,横向可扩展能力有限,一张表最大二百多列。纵向数据可承受能力也是有限的,一张表的数据到达百万级, 读写的速度就会逐渐的下降。面对海量数据,必须使用主从复制,分库分表。这样的系统架构是难以维护的。大数据查询 SQL 效率极低,数据量到达一定程度时,查询时间会呈指数级别增长
	(3)无法简单地通过增加硬件、服务节点来提高系统性能。数据整个存储在一个数据库中的。多个服务器没有很好的解决办法,来复制这些数据
	(4)关系型数据库大多是收费的,对硬件的要求较高。软件和硬件的成本花费比重较大
3)NoSQL 的优势
	(1)大数据量,高性能	
		a. 这得益于它的无关系性,数据库的结构简单。关系型数据库(例如 MySQL)使用查询缓存。这种查询缓存在更新数据后, 缓存就是失效了。在频繁的数据读写交互应用中。缓存的性能不高
	(2)灵活的数据模型	
		a. NoSQL 无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。尤其在快速变化的市场环境中,用户的需求总是在不断变化的
	(3)高可用	
		a. NoSQL 在不太影响性能的情况,就可以方便的实现高可用的架构
		b. NoSQL 能很好的解决关系型数据库扩展性差的问题。弥补了关系数据(比如 MySQL)在某些方面的不足,在某些方面能极大的节省开发成本和维护成本
		c. MySQL 和NoSQL 都有各自的特点和使用的应用场景,两者结合使用。让关系数据库关注在关系上,NoSQL 关注在存储上
	(4)低成本
		a. 这是大多数分布式数据库共有的特点,因为主要都是开源软件
4)NoSQL 的劣势
	(1)无关系,数据之间是无联系的
	(2)不支持标准的 SQL,没有公认的 NoSQL 标准
	(3)没有关系型数据库的约束,大多数也没有索引的概念
	(4)没有事务,不能依靠事务实现ACID
	(5) 没有丰富的数据类型(数值,日期,字符,二进制,大文本等)

二、redis安装

1. 官网下载:     								wget http://download.redis.io/releases/redis-5.0.0.tar.gz
2. 解压:         								tar -zxvf redis-5.0.0.tar.gz
3. 切换目录:     								cd redis-5.0.0
4. 编译:         								make
5. 编译完成,进入src:							cd src
6. 进行Redis安装:           					make install
7. 移动常用指令文件到目录下 					cp redis-cli /home/redis/redis-5.0.0
										    	cp redis-server /home/redis/redis-5.0.0
										    	cp redis-benchmark /home/redis/redis-5.0.0
8. reids启动									./redis-server
9. 测试redis启动					
	1)客户端连接 								./redis-cli (redis-cli -h host -p port -a password)
	2)监听redis服务                            ps -ef | grep redis	
	3)监听特定端口                             netstat -lntp | grep 6379
10. 配置redis为后台驻留程序         			vim redis.conf   daemonize no 改成 daemonize yes	
11. 将Redis的命令所在目录添加到系统参数PATH中   
	1)修改profile文件                          vi /etc/profile
	2)末尾添加                                 export PATH="$PATH:/home/redis/redis-5.0.0"
	3)马上应用这个文件                         . /etc/profile
12. redis获取所有配置信息命令                   redis中执行:CONFIG get *   

三、redis配置文件解析(redis.conf)

1. INCLUDES
1)Redis只有一个配置文件,如果多个人进行开发维护,那么就需要多个这样的配置文件,这时候多个配置文件就可以在此通过 include /path/to/local.conf 配置进来,而原本的 redis.conf 配置文件就作为一个总闸
2. MODULES
1)redis3.0的爆炸功能是新增了集群,而redis4.0就是在3.0的基础上新增了许多功能,其中这里的 自定义模块配置就是其中之一。通过这里的 loadmodule 配置将引入自定义模块来新增一些功能
3. NETWORK
1)bind:绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址。这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接。如果bind选项为空的话,那会接受所有来自于可用网络接口的连接
2)port:指定redis运行的端口,默认是6379。由于Redis是单线程模型,因此单机开多个Redis进程的时候会修改端口
3)timeout:设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接。默认值为0,表示不关闭
4)tcp-keepalive :单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,官方给出的建议值是300s,如果设置为0,则不会周期性的检测
4. GENERAL
1)daemonize:设置为yes表示指定Redis以守护进程的方式启动(后台启动)。默认值为 no
2)pidfile:配置PID文件路径,当redis作为守护进程运行的时候,它会把 pid 默认写到 /var/redis/run/redis_6379.pid 文件里面
3)loglevel :定义日志级别。默认值为notice,有如下4种取值	      
	(1)debug(记录大量日志信息,适用于开发、测试阶段)
      (2)verbose(较多日志信息)
      (3)notice(适量日志信息,使用于生产环境)
      (4)warning(仅有部分重要、关键信息才会被记录)
4)logfile :配置log文件地址,默认打印在命令行终端的窗口上
5)databases:设置数据库的数目。默认的数据库是DB 0 ,可以在每个连接上使用select  <dbid> 命令选择一个不同的数据库,dbid是一个介于0到databases - 1 之间的数值。默认值是 16,也就是说默认Redis有16个数据库
5. SNAPSHOTTING
1)save:这里是用来配置触发 Redis的持久化条件,也就是什么时候将内存中的数据保存到硬盘。默认如下配置
	(1)save 900 1:表示900 秒内如果至少有 1 个 key 的值变化,则保存
	(2)save 300 10:表示300 秒内如果至少有 10 个 key 的值变化,则保存
	(3)save 60 10000:表示60 秒内如果至少有 10000 个 key 的值变化,则保存	
	ps: 当然如果你只是用Redis的缓存功能,不需要持久化,那么你可以注释掉所有的 save 行来停用保存功能。可以直接一个空字符串来实现停用:save ""
2)stop-writes-on-bgsave-error :默认值为yes。当启用了RDB且最后一次后台保存数据失败,Redis是否停止接收数据。这会让用户意识到数据没有正确持久化到磁盘上,否则没有人会注意到灾难(disaster)发生了。如果Redis重启了,那么又可以重新开始接收数据了
3)rdbcompression ;默认值是yes。对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能,但是存储在磁盘上的快照会比较大
4)rdbchecksum :默认值是yes。在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能
5)dbfilename :设置快照的文件名,默认是 dump.rdb
6)dir:设置快照文件的存放路径,这个配置项一定是个目录,而不能是文件名。使用上面的 dbfilename 作为保存的文件名	
6. REPLICATION
1)slave-serve-stale-data:默认值为yes。当一个 slave 与 master 失去联系,或者复制正在进行的时候,slave 可能会有两种表现
	(1)如果为 yes ,slave 仍然会应答客户端请求,但返回的数据可能是过时,或者数据可能是空的在第一次同步的时候	
	(2)如果为 no ,在你执行除了 info he salveof 之外的其他命令时,slave 都将返回一个 "SYNC with master in progress" 的错误
2)slave-read-only:配置Redis的Slave实例是否接受写操作,即Slave是否为只读Redis。默认值为yes
3)repl-diskless-sync:主从数据复制是否使用无硬盘复制功能。默认值为no
4)repl-diskless-sync-delay:当启用无硬盘备份,服务器等待一段时间后才会通过套接字向从站传送RDB文件,这个等待时间是可配置的。  这一点很重要,因为一旦传送开始,就不可能再为一个新到达的从站服务。从站则要排队等待下一次RDB传送。因此服务器等待一段  时间以期更多的从站到达。延迟时间以秒为单位,默认为5秒。要关掉这一功能,只需将它设置为0秒,传送会立即启动。默认值为5
5)repl-disable-tcp-nodelay:同步之后是否禁用从站上的TCP_NODELAY 如果你选择yes,redis会使用较少量的TCP包和带宽向从站发送数据。但这会导致在从站增加一点数据的延时。  Linux内核默认配置情况下最多40毫秒的延时。如果选择no,从站的数据延时不会那么多,但备份需要的带宽相对较多。默认情况下我们将潜在因素优化,但在高负载情况下或者在主从站都跳的情况下,把它切换为yes是个好主意。默认值为no
7. SECURITY
1)rename-command:命令重命名,对于一些危险命令例如:flushdb(清空数据库)、flushall(清空所有记录)、config(客户端连接后可配置服务器)、keys(客户端连接后可查看所有存在的键),作为服务端redis-server,常常需要禁用以上命令来使得服务器更加安全,禁用的具体做法是是:rename-command FLUSHALL ""(也可以重命名为另一个名字)
8. CLIENTS
1)maxclients :设置客户端最大并发连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件。  描述符数-32(redis server自身会使用一些),如果设置 maxclients为0 。表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息
9. MEMORY MANAGEMENT
1)maxmemory:设置客户端最大并发连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件。描述符数-32(redis server自身会使用一些),如果设置 maxclients为0 。表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息
2)maxmemory-policy :当内存使用达到最大值时,redis使用的清除策略。有以下几种可以选择:
	(1)volatile-lru   利用LRU算法移除设置过过期时间的key (LRU:最近最少使用 Least Recently Used ) 
	(2)allkeys-lru   利用LRU算法移除任何key
	(3)volatile-random 移除设置过过期时间的随机key 
	(4)allkeys-random  移除随机key
	(5)volatile-ttl   移除即将过期的key(minor TTL) 
	(6)no-eviction   不移除任何key,只是返回一个写错误 ,默认选项
10. APPEND ONLY MODE
1)appendonly:默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,  可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入appendonly.aof文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。默认值为no
2)appendfilename :aof文件名,默认是"appendonly.aof"
3)appendfsync:aof持久化策略的配置;no表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快;always表示每次写入都执行fsync,以保证数据同步到磁盘;everysec表示每秒执行一次fsync,可能会导致丢失这1s数据
4)no-appendfsync-on-rewrite:在aof重写或者写入rdb文件的时候,会执行大量IO,此时对于everysec和always的aof模式来说,执行fsync会造成阻塞过长时间,no-appendfsync-on-rewrite字段设置为默认设置为no。如果对延迟要求很高的应用,这个字段可以设置为yes,否则还是设置为no,这样对持久化特性来说这是更安全的选择。   设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,建议yes。Linux的默认fsync策略是30秒。可能丢失30秒数据。默认值为no
5)auto-aof-rewrite-percentage:默认值为100。aof自动重写配置,当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件增长到一定大小的时候,Redis能够调用bgrewriteaof对日志文件进行重写。当前AOF文件大小是上次日志重写得到AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程
6)auto-aof-rewrite-min-size:64mb。设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写
7)aof-load-truncated:aof文件可能在尾部是不完整的,当redis启动的时候,aof文件的数据被载入内存。重启可能发生在redis所在的主机操作系统宕机后,尤其在ext4文件系统没有加上data=ordered选项,出现这种现象  redis宕机或者异常终止不会造成尾部不完整现象,可以选择让redis退出,或者导入尽可能多的数据。如果选择的是yes,当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。如果是no,用户必须手动redis-check-aof修复AOF文件才可以。默认值为 yes
11. LUA SCRIPTING
1)lua-time-limit:一个lua脚本执行的最大时间,单位为ms。默认值为5000
12. REDIS CLUSTER题
1)cluster-enabled:集群开关,默认是不开启集群模式
2)cluster-config-file:集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。 这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件。请确保与实例运行的系统中配置文件名称不冲突。默认配置为nodes-6379.conf
3)cluster-node-timeout :可以配置值为15000。节点互连超时的阀值,集群节点超时毫秒数
4)cluster-slave-validity-factor :可以配置值为10。在进行故障转移的时候,全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了,  导致数据过于陈旧,这样的slave不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长。判断方法是:比较slave断开连接的时间和(node-timeout * slave-validity-factor) + repl-ping-slave-period     如果节点超时时间为三十秒, 并且slave-validity-factor为10,假设默认的repl-ping-slave-period是10秒,即如果超过310秒slave将不会尝试进行故障转移
5)cluster-migration-barrier :可以配置值为1。master的slave数量大于该值,slave才能迁移到其他孤立master上,如这个参数若被设为2,那么只有当一个主节点拥有2 个可工作的从节点时,它的一个从节点会尝试迁移	
6)cluster-require-full-coverage:默认情况下,集群全部的slot有节点负责,集群状态才为ok,才能提供服务。  设置为no,可以在slot没有全部分配的时候提供服务。不建议打开该配置,这样会造成分区的时候,小分区的master一直在接受写请求,而造成很长时间数据不一致

参考网址

Linux下Redis的安装和部署

Redis详解(二)------ redis的配置文件介绍

注:文章是经过参考其他的文章然后自己整理出来的,有可能是小部分参考,也有可能是大部分参考,但绝对不是直接转载,觉得侵权了我会删,我只是把这个用于自己的笔记,顺便整理下知识的同时,能帮到一部分人。
ps : 有错误的还望各位大佬指正,小弟不胜感激

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值