Tag Archives: Redis

How to install redis server on CentOS

Where to buy 🚀 aged domains and backlinks 🔥 from Best-SEO-Domains | 0083-0608

Where to buy 🚀 aged domains and backlinks 🔥 from Best-SEO-Domains | 0083-0608

In this tutorial we will learn, how to install redis server on CentOS 7 / RHEL 7 . The abbreviation of redis is REmote DIctionary Server. It is one the of the most popular open source,advanced key-value cache and store.

Project URL : http://redis.io/

Follow the given below steps to install redis server on CentOS 7 and Red Hat Enterprise Linux 7.

Install wget utility

Install wget command

yum install wget

Install EPEL repo

First we will install the EPEL repo. For more detail on EPEL repo, we suggest you to read our this post.

Because our system has x86_64 Operating System architecture, we will use only epel repo package for x86_64 . Search epel repo package as per your Operating System architecture(EPEL URL)

wget -r --no-parent -A 'epel-release-*.rpm' http://dl.fedoraproject.org/pub/epel/7/x86_64/e/

rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-*.rpm

It will create two epel’s repo file inside /etc/yum.repos.d
These are –
1. epel.repo
2.epel-testing.repo

[root@localhost ~]# ls -l /etc/yum.repos.d/
total 28
-rw-r--r--. 1 root root 1612 Jul  4 07:00 CentOS-Base.repo
-rw-r--r--. 1 root root  640 Jul  4 07:00 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 1331 Jul  4 07:00 CentOS-Sources.repo
-rw-r--r--. 1 root root  156 Jul  4 07:00 CentOS-Vault.repo
-rw-r--r--. 1 root root  957 Sep  2 12:14 epel.repo
-rw-r--r--. 1 root root 1056 Sep  2 12:14 epel-testing.repo
[root@localhost ~]#

Install redis server

Now use yum command to install redis server

yum install redis

Two important redis server configuration file’s path
1. /etc/redis.conf
2. /etc/redis-sentinel.conf

Now start the redis server after this.

systemctl start redis.service

Check the running status of redis server

systemctl status redis.service

To test the installation of Redis, use below given command

redis-cli ping

If the response output is PONG, it means installation is completed successfully.

[root@localhost ~]# redis-cli ping
PONG
[root@localhost ~]#

Start/Stop/Restart/Status and Enable redis server

To start redis server

systemctl start redis.service

To stop redis server

systemctl stop redis.service

To restart redis server

systemctl restart redis.service

To get running status of redis server

systemctl status redis.service

To enable redis server at system’s booting time.

systemctl enable redis.service

To disable redis server at system’s booting time.

systemctl disable redis.service

Listening Port Of Redis Server

Redis Server listens by default at port number 6379. Use below given ss command. (To learn more about ss command)

[root@localhost ~]# ss -nlp|grep redis
tcp    LISTEN     0      128            127.0.0.1:6379                  *:*      users:(("redis-server",19706,4))
[root@localhost ~]#

Note: On minimal installed CentOS 7/ RHEL 7,you wont get netstat command. Instead of netstat command, use ss command which is by default available on system.

Learn Redis : http://redis.io/documentation

Who is using redis: Who is using Redis

Redis配置文件参数说明

from:http://sharadchhetri.com/2014/10/04/install-redis-server-centos-7-rhel-7/

Redis 备份、容灾及高可用实战

Where to buy 🚀 aged domains and backlinks 🔥 from Best-SEO-Domains | 0083-0608

Where to buy 🚀 aged domains and backlinks 🔥 from Best-SEO-Domains | 0083-0608

一、Redis简单介绍

Redis是一个高性能的key-value非关系型数据库,由于其具有高性能的特性,支持高可用、持久化、多种数据结构、集群等,使其脱颖而出,成为常用的非关系型数据库。

此外,Redis的使用场景也比较多。

  1. 会话缓存(Session Cache)
    Redis缓存会话有非常好的优势,因为Redis提供持久化,在需要长时间保持会话的应用场景中,如购物车场景这样的场景中能提供很好的长会话支持,能给用户提供很好的购物体验。
  2. 全页缓存
    在WordPress中,Pantheon提供了一个不错的插件wp-redis,这个插件能以最快的速度加载你曾经浏览过的页面。
  3. 队列
    Reids提供list和set操作,这使得Redis能作为一个很好的消息队列平台来使用。我们常通过Reids的队列功能做购买限制。比如到节假日或者推广期间,进行一些活动,对用户购买行为进行限制,限制今天只能购买几次商品或者一段时间内只能购买一次。也比较适合适用。
  4. 排名
    Redis在内存中对数字进行递增或递减的操作实现得非常好。所以我们在很多排名的场景中会应用Redis来进行,比如小说网站对小说进行排名,根据排名,将排名靠前的小说推荐给用户。
  5. 发布/订阅
    Redis提供发布和订阅功能,发布和订阅的场景很多,比如我们可以基于发布和订阅的脚本触发器,实现用Redis的发布和订阅功能建立起来的聊天系统。

此外还有很多其它场景,Redis都表现的不错。

二、Redis使用中单点故障问题

正是由于Redis具备多种优良特新,且应用场景非常丰富,以至于Redis在各个公司都有它存在的身影。那么随之而来的问题和风险也就来了。Redis虽然应用场景丰富,但部分公司在实践Redis应用的时候还是相对保守使用单节点部署,那为日后的维护带来了安全风险。

在2015年的时候,曾处理过一个因为单点故障原因导致的业务中断问题。当时的Redis都未采用分布式部署,采用单实例部署,并未考虑容灾方面的问题。

当时我们通过Redis服务器做用户购买优惠商品的行为控制,但后来由于未知原因Redis节点的服务器宕机了,导致我们无法对用户购买行为进行控制,造成了用户能够在一段时间内多次购买优惠商品的行为。

这种宕机事故可以说已经对公司造成了不可挽回的损失了,安全风险问题非常严重,作为当时运维这个系统的我来说有必要对这个问题进行修复和在架构上的改进。于是我开始了解决非分布式应用下Redis单点故障方面的研究学习。

三、非分布式场景下Redis应用的备份与容灾

Redis主从复制现在应该是很普遍了。常用的主从复制架构有如下两种架构方案。

常用Redis主从复制

  • 方案一

Redis这是最常见的一种架构,一个Master节点,两个Slave节点。客户端写数据的时候是写Master节点,读的时候,是读取两个Slave,这样实现读的扩展,减轻了Master节点读负载。

  • 方案二

Maste

  • 这种架构同样是一个Master和两个Slave。不同的是Master和Slave1使用keepalived进行VIP转移。Client连接Master的时候是通过VIP进行连接的。避免了方案一IP更改的情况。

Redis主从复制优点与不足

  • 优点
  1. 实现了对master数据的备份,一旦master出现故障,slave节点可以提升为新的master,顶替旧的master继续提供服务
  2. 实现读扩展。使用主从复制架构, 一般都是为了实现读扩展。Master主要实现写功能,  Slave实现读的功能
  • 不足
    架构方案一
    当Master出现故障时,Client就与Master端断开连接,无法实现写功能,同时Slave也无法从Master进行复制。

架构

此时需要经过如下操作(假设提升Slave1为Master):

  1. 在Slave1上执slaveof no one命令提升Slave1为新的Master节点。
  2. 在Slave1上配置为可写,这是因为大多数情况下,都将slave配置只读。
  3. 告诉Client端(也就是连接Redis的程序)新的Master节点的连接地址。
  4. 配置Slave2从新的Master进行数据复制。

架构方案二
当master出现故障后,Client可以连接到Slave1上进行数据操作,但是Slave1就成了一个单点,就出现了经常要避免的单点故障(single point of failure)。

 

之后需要经过如下操作:

  1. 在Slave1上执行slaveof no one命令提升Slave1为新的Master节点
  2. 在Slave1上配置为可写,这是因为大多数情况下,都将Slave配置只读
  3. 配置Slave2从新的Master进行数据复制

可以发现,无论是哪种架构方案都需要人工干预来进行故障转移(failover)。需要人工干预就增加了运维工作量,同时也对业务造成了巨大影响。这时候可以使用Redis的高可用方案-Sentinel

四、Redis Sentinel介绍

Redis Sentinel为Redis提供了高可用方案。从实践方面来说,使用Redis Sentinel可以创建一个无需人为干预就可以预防某些故障的Redis环境。
Redis Sentinel设计为分布式的架构,运行多个Sentinel进程来共同合作的。运行多个Sentinel进程合作,当多个Sentinel同一给定的master无法再继续提供服务,就会执行故障检测,这会降低误报的可能性。

五、Redis Sentinel功能

Redis Sentinel在Redis高可用方案中主要作用有如下功能:

  • 监控
    Sentinel会不断的检查master和slave是否像预期那样正常运行
  • 通知
    通过API,Sentinel能够通知系统管理员、程序监控的Redis实例出现了故障
  • 自动故障转移
    如果master不像预想中那样正常运行,Sentinel可以启动故障转移过程,其中的一个slave会提成为master,其它slave会重新配置来使用新的master,使用Redis服务的应用程序,当连接时,也会被通知使用新的地址。
  • 配置提供者
    Sentinel可以做为客户端服务发现的认证源:客户端连接Sentinel来获取目前负责给定服务的Redis master地址。如果发生故障转移,Sentinel会报告新的地址。

六、Redis Sentinel架构

Redis

七、Redis Sentinel实现原理

Sentinel集群对自身和Redis主从复制进行监控。当发现Master节点出现故障时,会经过如下步骤:

  • 1)Sentinel之间进行选举,选举出一个leader,由选举出的leader进行failover
  • 2)Sentinel leader选取slave节点中的一个slave作为新的Master节点。对slave选举需要对slave进行选举的方法如下:a) 与master断开时间
    如果与master断开的时间超过down-after-milliseconds(sentinel配置) * 10秒加上从sentinel判定master不可用到sentinel开始执行故障转移之间的时间,就认为该slave不适合提升为master。b) slave优先级
    每个slave都有优先级,保存在redis.conf配置文件里。如果优先级相同,则继续进行。c) 复制偏移位置
    复制偏移纪录着从master复制数据复制到哪里,复制偏移越大表明从master接受的数据越多,如果复制偏移量也一样,继续进行选举

    d) Run ID
    选举具有最小Run ID的Slave作为新的Master
    流程图如下:

  • 3)  Sentinel leader会在上一步选举的新master上执行slaveof no one操作,将其提升为master节点
  • 4)Sentinel leader向其它slave发送命令,让剩余的slave成为新的master节点的slave
  • 5)Sentinel leader会让原来的master降级为slave,当恢复正常工作,Sentinel leader会发送命令让其从新的master进行复制
    以上failover操作均有sentinel自己独自完成,完全无需人工干预。

总结

使用sentinel实现了Redis的高可用,当master出现故障时,完全无需人工干预即可实现故障转移。避免了对业务的影响,提高了运维工作效率。
在部署sentinel的时候,建议使用奇数个sentinel节点,最少三个sentinel节点。

写在最后

由于sentinel知识点比较多,这里仅给大家进行介绍,让大家有个了解,想了解更多可与我联系。谢谢。

from:http://www.yunweipai.com/archives/22663.html

瞬时高并发(秒杀/活动)Redis方案

1,Redis
  • 丰富的数据结构(Data Structures)
    • 字符串(String)
      • Redis字符串能包含 任意类型的数据
      • 一个字符串类型的值最多能存储 512M字节的内容
      • 利用 INCR命令簇INCR, DECR, INCRBY)来把字符串当作 原子计数器使用
      • 使用 APPEND命令在字符串后添加内容
    • 列表(List)
      • Redis列表是简单的字符串列表,按照插入顺序排序
      • 你可以添加一个元素到列表的 头部(左边:LPUSH)或者 尾部(右边:RPUSH)
      • 一个列表最多可以包含232-1个元素(4294967295,每个表超过 40亿个元素
      • 在社交网络中建立一个时间线模型,使用 LPUSH去添加 新的元素用户时间线中,使用 LRANGE去检索一些 最近插入的条目
      • 你可以同时使用 LPUSHLTRIM去创建一个 永远不会超过指定元素数目列表并同时记住 最后的N个元素
      • 列表可以用来当作 消息传递基元(primitive),例如,众所周知的用来创建后台任务的Resque Ruby库
    • 集合(Set)
      • Redis集合是一个 无序的, 不允许相同成员存在的字符串合集( Uniq操作,获取某段时间所有数据 排重值
      • 支持一些服务端的命令从现有的集合出发去进行 集合运算,如合并( 并集:union),求交( 交集:intersection), 差集, 找出不同元素的操作(共同好友、二度好友)
      • 用集合跟踪一个独特的事。想要知道所有访问某个博客文章的独立IP?只要每次都用SADD来处理一个页面访问。那么你可以肯定重复的IP是不会插入的( 利用 唯一性,可以 统计访问网站的所有独立IP
      • Redis集合能很好的表示 关系。你可以创建一个tagging系统,然后用集合来代表单个tag。接下来你可以用SADD命令把所有拥有tag的对象的所有ID添加进集合,这样来表示这个特定的tag。如果你想要同时有3个不同tag的所有对象的所有ID,那么你需要使用 SINTER
      • 使用 SPOP或者 SRANDMEMBER命令 随机地获取元素
    • 哈希(Hashes)
      • Redis Hashes是字符串字段和字符串值之间的映射
      • 尽管Hashes主要用来表示对象,但它们也能够 存储许多元素
    • 有序集合(Sorted Sets)
      • Redis有序集合和Redis集合类似,是 不包含相同字符串的合集
      • 每个有序集合的成员都 关联着一个评分,这个评分用于把有序集合中的成员按最低分到最高分排列( 排行榜应用,取TOP N操作
      • 使用有序集合,你可以非常快地(O(log(N)))完成添加,删除和更新元素的操作
      • 元素是在插入时就排好序的,所以很快地通过 评分(score)或者 位次(position)获得一个 范围的元素(需要 精准设定过期时间的应用)
      • 轻易地访问任何你需要的东西:  有序的元素快速的存在性测试快速访问集合中间元素
      • 在一个 巨型在线游戏中建立一个 排行榜,每当有新的记录产生时,使用 ZADD 来更新它。你可以用 ZRANGE轻松地获取 排名靠前的用户, 你也可以提供一个用户名,然后用 ZRANK获取他在 排行榜中的名次。 同时使用 ZRANKZRANGE你可以获得与指定用户有相同分数的用户名单。 所有这些操作都非常迅速
      • 有序集合通常用来 索引存储在Redis中的数据。 例如:如果你有很多的hash来表示用户,那么你可以使用一个有序集合,这个集合的年龄字段用来当作评分,用户ID当作值。用 ZRANGEBYSCORE可以简单快速地检索到 给定年龄段的所有用户
  • 复制(Replication, Redis复制很简单易用,它通过配置允许slave Redis Servers或者Master Servers的复制品)
    • 一个Master可以有 多个Slaves
    • Slaves能 通过接口其他slave的链接,除了可以接受同一个master下面slaves的链接以外,还可以接受同一个结构图中的其他slaves的链接
    • redis 复制是在 master段非阻塞的,这就意味着master在同一个或多个slave端 执行同步的时候还可以 接受查询
    • 复制slave端也是非阻塞的,假设你在redis.conf中配置redis这个功能,当slave在执行的新的同步时,它仍可以用旧的数据信息来提供查询,否则,你可以配置当redis slaves去master失去联系是,slave会给发送一个客户端错误
    • 为了有多个slaves可以做只读查询, 复制可以重复2次,甚至多次,具有 可扩展性(例如:slaves对话与重复的排序操作,有多份数据冗余就相对简单了)
    • 他可以利用 复制去避免在master端保存数据,只要对master端redis.conf进行配置,就可以避免保存(所有的保存操作),然后通过slave的链接,来实时的保存在slave端
  • LRU过期处理(Eviction)
    • EVAL 和 EVALSHA 命令是从 Redis 2.6.0 版本开始的,使用内置的 Lua 解释器,可以对 Lua 脚本进行求值
    • Redis 使用 单个 Lua 解释器去运行所有脚本,并且, Redis 也保证脚本会以 原子性(atomic)的方式执行:  当某个脚本正在运行的时候,不会有其他脚本或 Redis 命令被执行。 这和使用 MULTI / EXEC  包围的事务很类似。 在其他别的客户端看来,脚本的效果(effect)要么是不可见的(not visible),要么就是已完成的(already completed)
    • LRU过期处理(Eviction)
      • Redis允许为每一个key设置不同的 过期时间,当它们到期时将自动从服务器上删除(EXPIRE)
  • 事务
    • MULTI 、 EXEC 、 DISCARD 和  WATCH 是 Redis  事务的基础
    • 事务是一个 单独的隔离操作:事务中的所有 命令都会 序列化、按顺序地执行。事务在 执行的过程中不会被其他客户端发送来的命令请求所打断
    • 事务中的命令要么全部被执行,要么全部都不执行EXEC 命令负责触发并执行事务中的所有命令
    • Redis 的 Transactions 提供的并 不是严格的 ACID 的事务
    • Transactions 还是提供了基本的 命令打包执行的功能: 可以保证一连串的命令是顺序在一起执行的,中间有会有其它客户端命令插进来执行
    • Redis 还提供了一个  Watch 功能,你可以 对一个 key 进行 Watch,然后再 执行 Transactions,在这过程中,如果这个  Watched 的值进行了修改,那么这个  Transactions 会发现并拒绝执行
  • 数据持久化
    • RDB
      • 特点
        • RDB持久化方式能够在 指定的时间间隔能对你的 数据进行快照存储
      • 优点
        • RDB是一个非常 紧凑的文件,它保存了 某个时间点得数据集,非常 适用于数据集的备份
        • RDB是一个紧凑的单一文件, 非常 适用于灾难恢复
        • RDB在保存RDB文件时父进程唯一需要做的就是 fork出一个子进程,接下来的 工作全部由 子进程来做,父进程不需要再做其他IO操作,所以RDB持久化方式可以 最大化redis的性能
        • 与AOF相比,在 恢复大的数据集的时候, RDB方式会更快一些
      • 缺点
        • 如果你希望在 redis意外停止工作(例如电源中断)的情况下 丢失的数据最少的话,那么 RDB不适合,Redis要完整的 保存整个数据集是一个比较 繁重的工作
        • RDB 需要经常fork子进程来保存数据集到硬盘上,当 数据集比较大的时候, fork的过程是非常耗时的,可能会导致Redis在一些毫秒级内不能响应客户端的请求.如果数据集巨大并且CPU性能不是很好的情况下,这种情况会持续1秒, AOF也需要fork,但是你可以 调节重写日志文件的频率来提高数据集的耐久度
    • AOF
      • 特点
        • AOF持久化方式记录 每次对服务器写的操作
        • redis重启的时候会 优先载入AOF文件恢复原始的数据,因为在通常情况下 AOF文件保存的数据集要比 RDB文件保存的 数据集要完整
      • 优点
        • 使用AOF 会让你的Redis 更加耐久: 你可以使用不同的 fsync策略无fsync,每秒fsync,每次写的时候fsync
        • AOF文件是一个只 进行追加的日志文件,所以不需要写入seek
        • Redis 可以在 AOF 文件体积 变得过大时, 自动地在后台对  AOF 进行重写
        • AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此  AOF 文件的内容非常 容易被人读懂, 对文件进行 分析(parse)也很轻松。  导出(export) AOF 文件也非常简单
      • 缺点
        • 对于 相同的数据集来说, AOF 文件的体积通常要 大于 RDB 文件的体积
        • 根据所使用的  fsync 策略, AOF 的速度可能会 慢于 RDB
    • 选择
      • 同时使用 两种持久化功能
  • 分布式
    • Redis Cluster (Redis 3版本)
    • Keepalived
      • Master挂了后VIP漂移到SlaveSlave 上 keepalived 通知redis 执行:slaveof no one ,开始提供业务
      • Master起来后VIP 地址不变Masterkeepalived 通知redis 执行slaveof slave IP host ,开始 作为从同步数据
      • 依次类推
    • Twemproxy
      • 快、轻量级、减少后端Cache Server连接数、易配置、支持ketama、modula、random、常用hash 分片算法
      • 对于客户端而言,r edis集群是透明的,客户端简单,遍于动态扩容
      • Proxy为 单点、处理一致性hash时,集群节点 可用性检测不存在脑裂问题
      • 高性能,CPU密集型,而 redis节点集群多CPU资源冗余,可部署在redis节点集群上,不需要额外设备
  • 高可用(HA)
    • Redis Sentinel(redis自带的集群管理工具 )
      • 监控(Monitoring): Redis Sentinel实时监控主服务器和从服务器运行状态
      • 提醒(Notification):当被监控的某个 Redis 服务器出现问题时, Redis Sentinel 可以向系统管理员发送通知, 也可以通过 API 向其他程序发送通知
      • 自动故障转移(Automatic failover): 当一个主服务器不能正常工作时,Redis Sentinel 可以将一个从服务器升级为主服务器, 并对其他从服务器进行配置,让它们使用新的主服务器。当应用程序连接到 Redis 服务器时, Redis Sentinel会告之新的主服务器地址和端口
    • 单M-S结构
      • 单M-S结构特点是在Master服务器中配置 Master Redis(Redis-1M)和 Master Sentinel(Sentinel-1M)
      • Slave服务器中配置 Slave Redis(Redis-1S)和 Slave Sentinel(Sentinel-1S)
      • 其中  Master Redis可以提供 读写服务,但是 Slave Redis只能提供 只读服务。因此,在业务压力比较大的情况下,可以选择将只读业务放在Slave Redis中进行
    • 双M-S结构
      • 双M-S结构的特点是在 每台服务器上配置一个 Master Redis,同时部署一个 Slave Redis。由两个 Redis Sentinel同时对 4个Redis进行监控两个Master Redis可以同时对应用程序提供 读写服务,即便其中一个服务器出现故障,另一个服务器也可以同时运行两个Master Redis提供读写服务
      • 缺点是 两个Master redis之间无法实现数据共享,不适合存在大量用户数据关联的应用使用
    • 单M-S结构和双M-S结构比较
      • 单M-S结构适用于 不同用户数据存在关联,但 应用可以实现读写分离的业务模式Master主要提供写操作,Slave主要提供读操作,充分利用硬件资源
      • 双(多)M-S结构适用于 用户间不存在或者存在较少的数据关联的业务模式读写效率是单M-S的两(多)倍,但 要求故障时单台服务器能够承担两个Mater Redis的资源需求
  • 发布/订阅(Pub/Sub)
  • 监控:Redis-Monitor
    • 历史redis运行查询: CPU、内存、命中率、请求量、主从切换
    • 实时监控曲线
2,数据类型Redis使用场景
  • String
    •   计数器应用
  • List
    • 最新N个数据的操作
    • 消息队列
    • 删除过滤
    • 实时分析正在发生的情况,用于 数据统计防止垃圾邮件(结合Set)
  • Set
    • Uniqe操作,获取某段时间所有数据 排重值
    • 实时系统,反垃圾系统
    • 共同好友、二度好友
    • 利用 唯一性,可以 统计访问网站的所有 独立 IP
    • 好友推荐的时候,根据 tag  求交集,大于某个 threshold 就可以推荐
  • Hashes
    • 存储、读取、修改用户属性
  • Sorted Set
    • 排行榜应用,取 TOP N操作
    • 需要 精准设定过期时间的应用(时间戳作为Score)
    • 带有 权重的元素,比如一个游戏的用户得分排行榜
    • 过期项目处理,按照时间排序
3,Redis解决秒杀/抢红包等高并发事务活动
  • 秒杀开始前30分钟把秒杀库存从数据库同步到Redis Sorted Set
  • 用户秒杀 库存放入秒杀限制数长度的 Sorted Set
  • 秒杀到 指定秒杀数后, Sorted Set不在接受秒杀请求,并显示返回标识
  • 秒杀活动完全结束后, 同步Redis数据到数据库,秒杀正式结束

Redis2.4.13 安装部署

Porn Sister Japan | Free Money | Cheat Money | Black Hat SEO ↑↑↑ Telegram: @seo7878 Rm9Ek↑↑↑
Porn Sister Japan | Free Money | Cheat Money | Black Hat SEO ↑↑↑ Telegram: @seo7878 Rm9Ek↑↑↑