Redis介绍及应用

Redis简介

Redis(Remote Dictionary Server)是用C语言开发的一个开源的高性能键值对数据库。它的所有数据都是保存在内存中的,这也就决定了其读写速度之快,是其它硬盘保存数据的系统所无法匹敌的。
官方曾经给出过一组测试数据,50个并发执行100,000个请求。读的速度是110000次/s,写的速度是81000次/s,正是由于其有着如此高的性能,所以Redis在企业中最大的一个应用是作为缓存服务器使用,当然它也可以作为数据存储和消息中间件来用。

Redis下载

Reids官网地址:http://redis.io
中文网地址:https://www.redis.net.cn/
GitHub地址:https://github.com/MSOpenTech/redis/tags

Redis主要配置

daemonize no
	Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
pidfile /var/run/redis.pid  
	当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以
通过pidfile指定
port 6379  
	Redis监听端口,默认端口为6379
bind 127.0.0.1  
	绑定的主机地址,只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求
timeout 300  
	当客户端闲置多长时间后关闭连接,如果指定为0,表示一直连接
loglevel verbose  
	指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默
认为verbose
logfile stdout  
	日志记录方式,默认为标准输出
databases 16
	设置数据库的数量,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定
数据库id
save <seconds> <changes> 
	指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
	  Redis默认配置文件中提供了三个条件:
	  save 900 1       900秒(15分钟)内有1个更改
	  save 300 10      300秒(5分钟)内有10个更改
	  save 60 10000    60 秒(1分钟)内有10000个更改
rdbcompression yes
	指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,
	如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
dbfilename dump.rdb  	指定本地数据库文件名,默认值为dump.rdb
dir ./			指定本地数据库存放目录
slaveof <masterip> <masterport>  
	设置当本机为slave服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动
从master进行数据同步
requirepass foobared
	设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH
 <password>命令提供密码,默认关闭
masterauth <master-password>
	当master服务设置了密码保护时,slav服务连接master的密码
maxclients 128
	同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis
进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连
接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached
错误信息
maxmemory <bytes>
	redis可以使用的内存量。一旦到达内存使用上限,redis将会试图移除内部数据,移除
规则通过maxmemory-policy来指定。
	如果redis无法根据移除规则来移除内存中的数据,则会针对那些需要申请内存的指令
返回错误信息,但是对于无内存申请的指令,仍然会正常响应。
	如果是主redis,那么在设置内存使用上限时,需要在系统中留出一些内存空间给同步队
列缓存,只有在设置“不移除”的情况下,才不用考虑这个因素
maxmemory-policy noeviction
	内存淘汰策略:默认不进行移除
		allkeys-lru:使用LRU算法移除key
		volatile-lru:使用LRU算法移除key,只对设置了过期时间的键
		allkeys-random:移除随机的key
		volatile-random:在过期集合中移除随机的key,只对设置了过期时间的键
		volatile-ttl:移除那些TTL值最小的key,即那些最近要过期的key
		noeviction:不进行移除。针对写操作,只是返回错误信息
appendonly no
	指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁
盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。
	因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间
内只存在于内存中。默认为no
appendfilename appendonly.aof	
	指定更新日志文件名,默认为appendonly.aof
appendfsync everysec
	指定更新日志条件,共有3个可选值: 
		no:表示等操作系统进行数据缓存同步到磁盘(快)
		always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全) 
  		everysec:表示每秒同步一次(折中,默认值)

Redis数据类型

String(字符串):一个key对应一个value,其value值允许为二进制数据,顶线为512M。
Hash(哈希):string类型的field和value的映射表,特别适合用于存储对象。
List(列表):string类型的有序可重复的列表,底层是基于链表实现的。
  如果键不存在,创建新的链表;如果键已存在,新增内容;如果值全移除,对应的键也就消失了。
  链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。
Set(集合):string类型的无序不可重复集合,底层是基于哈希表实现的。
Zset(有序集合):string类型元素的集合,且不允许重复的成员。底层是基于哈希表和跳跃表实现的。
  每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。

Redis持久化策略

什么是持久化?
  Redis的数据都是存在在内存之中的,那么这样一旦出现宕机,势必会导致数据的丢失,这就需要持久化操作,也就是要将redis在内存中的数据写到硬盘上保存。
  注意,redis虽然有持久化操作,但是其全部数据依旧都在内存中存在,也就是说硬盘上的只是为了安全和备份。
  Redis提供了两种数据持久化的方式,分别是RDB和AOF。
RDB(Redis DataBase)
  这是Redis默认的持久化方案。
  它通过配置文件来设定一些条件,一旦当条件满足时,redis就会触发RDB快照机制,将当前时刻redis在内存中的数据全部持久化到磁盘的一个文件中。
  当RDB持久化条件满足时,redis会创建一条子线程专门负责数据的持久化,(也就是将当前内存中的数据写到磁盘),这个过程中redis会创建一个新的rdb备份文件,而不会改变原有的rdb文件。当新的rdb文件备份完毕以后,redis会用新的替换旧的备份文件。
AOF(Append Only File)
  AOF就是redis会记录每次的写操作。但是写操作一般都是有缓冲的,不会立即写入磁盘,但是可以通过调用系统的fsync()函数强制写入。根据这一特性,redis提供了一个配置来决定什么时候来调用系统的fsync()函数。
  AOF就是记录每次redis的写操作,然后通过指定的条件将记录下来的操作写到磁盘文件中。

Redis集群

  redis是单线程,但是一般的作为缓存使用的话,redis足够了,因为它的读写速度太快了。
  但是在实际的生产过程中,单服的redis依旧有着低容错,低扩展的问题,这种情况下就需要redis集群。
  相比单服的redis,集群有以下些好处:

  1. 容错性
      在一个或多个节点出现宕机的情况下,集群内部通过投票的机制能够快速的进行选举和不停机的情况下进行服务持续提供。
  2. 扩展性
      相比单服在升级性能过程中,集群也能够很好的实现缓存的性能升级
  3. 性能提升
      性能的提升其实在扩展过程中,就能够随之的体现出来。

搭建步骤

  1. 首先创建单节点redis
  2. 将单节点复制6份,主要复制的是conf文件,配置redis的配置文件
    port 7000 //端口
    bind 本机ip //根据本机所在的IP或hostname去配制
    daemonize yes //redis后台运行
    pidfile /var/run/redis_7000.pid //pidfile文件
    cluster-enabled yes //开启集群
    cluster-config-file nodes_7000.conf //集群的配置
    cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
  3. 依次启动每个节点
  4. 安装ruby库,为集群创建脚本提供环境
    yum install ruby rubygems
    gem install redis-4.0.0.rc1.gem
  5. 使提供的脚本创建redis集群
    ./redis-trib.rb create --replicas 1
    192.168.145.121:7001 192.168.145.121:7002
    192.168.145.121:7003 192.168.145.121:7004
    192.168.145.121:7005 192.168.145.121:7006
  6. 测试
    redis-cli -h ip -p port -c

Redis应用场景

缓存:缓存一些访问量大,但是又不经常修改的数据,如导航栏、广告位;
秒杀:可以将秒杀的数据先存入redis,等秒杀结束,再慢慢转入db中;
分布式session存储:分布式环境下,用其来存储登录用户的信息来模仿session的效果;
临时验证码存储:手机验证码发送之后,可以将验证码存入redis等待校验,如果超过一定时间没校验,自动销毁;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JustDoSelf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值