资讯专栏INFORMATION COLUMN

SegmentFault 技术周刊 Vol.37 - 分布式缓存利器:Redis

binaryTree / 3587人阅读

摘要:持久化到中反向代理的负载均衡基于的集群搭建如何实现从中订阅消息转发到客户端的扩展是阻塞式,使用订阅发布模式时,会导致整个进程进入阻塞。缓存是用于解决高并发场景下系统的性能及稳定性问题的银弹。

Redis 是由意大利程序员 Salvatore Sanfilippo(昵称:antirez)开发的一款内存高速缓存数据库。Redis 全称为 Remote Dictionary Server(远程数据服务),使用 C 语言编写,是一个 key-value 存储系统,支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash等。

Redis 以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库,在服务器中常用来存储一些需要频繁调取的数据,这样可以大大节省系统直接读取磁盘来获得数据的I/O开销,更重要的是可以极大提升速度。

Redis 的应用非常广泛,可谓服务器中的一件利器,现在我们就来一步步学习 Redis 吧。

Redis 安装

Redis简介、数据类型应用场景

Redis,一个开源的 key-value,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)。>

Redis 使用C语言开发,支持的客户端语言也非常丰富,如C、C#、C++、Object-C、PHP、Python、 Java、Perl、Lua等。Redis 支持 master-slave(主-从)模式应用,支持数据的持久化,可以将内存中的数据村春在硬盘中,重启、断电的时候并不会丢失数据。

Redis的11种Web应用场景简介

下面列出11种Web应用场景,在这些场景下可以充分的利用Redis的特性,大大提高效率。

在主页中显示最新的项目列表

删除和过滤

排行榜及相关问题

按照用户投票和时间排序

过期项目处理

计数

特定时间内的特定项目

实时分析正在发生的情况,用于数据统计与防止垃圾邮件等

Pub/Sub

队列

缓存

走进Redis:Redis的安装、使用以及集群的搭建

一、Redis的安装

二、Redis的启动与基本操作

三、Redis的持久化方案

四、Redis集群的搭建

五、使用Java操作Redis

【Redis】Redis安装+主从部署

Redis开机启动配置

redis Q&A

Redis 入门

10分钟快速入门Redis

Redis安装

服务管理

更改配置

基本操作

支持的数据类型

开启通知

开启远程登录连接

提供的原生监控

配置说明

Redis快速入门及应用

Redis的使用难吗?不难,Redis用好容易吗?不容易。Redis的使用虽然不难,但与业务结合的应用场景特别多、特别紧,用好并不容易。我们希望通过一篇文章及Demo,即可轻松、快速入门并学会应用。

redis 学习笔记

这篇 redis 学习笔记主要介绍 redis 的数据结构和数据类型,并讨论数据结构的选择以及应用场景的优化。

【Redis】Redis常用命令

一、全局命令

二、针对key的操作

三、 Hash操作

四、列表List操作

五、Set操作(不可重复)

六、ZADD操作(有序集合)

七、pub/sub(发布、订阅)

八、Transaction(事务)

九、Connection(连接)

十、Server(服务器)

Redis--主从复制--主从切换

配置文件

redis持久化

主从复制

sentinel 主从切换

Redis 实现队列

场景说明:

用于处理比较耗时的请求,例如批量发送邮件,如果直接在网页触发执行发送,程序会出现超时

高并发场景,当某个时刻请求瞬间增加时,可以把请求写入到队列,后台在去处理这些请求

抢购场景,先入先出的模式

redis & redis-cluster

redis在年初发布了3.0.0,官方支持了redis cluster,也就是集群。redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。

Redis中5种数据结构的使用场景介绍

这篇文章主要介绍了Redis中5种数据结构的使用场景介绍,本文对Redis中的5种数据类型String、Hash、List、Set、Sorted Set做了讲解,需要的朋友可以参考下。

[Redis源码阅读]sds字符串实现

通过详细地阅读sds的源码,不仅学习到sds的实现细节,还学习到了一些常用字符串操作函数的实现。如果只是仅仅看看数据结构的定义也可以初步了解,但是要深入了解的话还是需要详细的阅读具体函数的实现代码。还是那句,写代码的,需要阅读更多代码来增强灵感。

Redis 源码学习之 Redis 事务

Redis作为一个内存型数据库,同样支持传统数据库的事务特性。这篇文章会从源代码角度来分析Redis中事务的实现原理。

What

How

Why

Other

Redis 通信协议-了解 Redis 客户端实现原理

几乎所有的主流编程语言都有Redis的客户端(http://redis.io/clients),不考虑Redis非常流行的原因,如果站在技术的角度看原因还有两个:

客户端与服务端之间的通信协议是在 TCP 协议之上构建的。

客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 。

客户端和服务器发送的命令或数据一律以 rn (CRLF)结尾。

Redis制定了 RESP(REdis Serialization Protocol,Redis序列化协议)实现客户端与服务端的正常交互,这种协议简单高效,既能够被机器解析,又容易被人类识别。

Redis Shell

Redis提供了redis-cli、redis-server、redis-benchmark等Shell工具。它们虽然比较简单,但是麻雀虽小五脏俱全,有时可以很巧妙地解决一些问题。

Redis 服务器管理相关命令

查看客户端列表

获取/设置名称

客户端限制

关闭客户端

阻塞客户端

客户端回复设定

监控

其他配置

源码查看

INFO

Redis 图形化监控方案 RedisLive 介绍

作为一款开源的 Redis 图形化监控工具,RedisLive 提供对 Redis 实例的内存使用情况,接收的客户端命令,接收的请求数量以及键进行监控。RedisLive 的工作原理基于 Redis 的 INFO 和 MONITOR 命令,通过向 Redis 实例发送 INFO 和 MONITOR 命令来获取 Redis 实例当前的运行数据。

服务端指南 数据存储篇 | 聊聊 Redis 使用场景

缓存

会话缓存

时效性

访问频率

计数器

社交列表

记录用户判定信息

交集、并集和差集

热门列表与排行榜

最新动态

消息队列

redis五种常见使用场景下PHP实现

redis等nosql简单高效的解决了高并发场景下的一系列问题,并很大程度的解放了持久化DB的业务压力。

实现:

基于redis字符串string类型的简单缓存实现

基于redis列表list类型的简单队列实现

基于redis字符串setnx的悲观锁实现

基于redis事务的乐观锁实现

基于redis的发布订阅实现

redis的简单使用 异步发送邮件

你是否也困在redis,知其然不知其所以然~~ 项目中,到底怎么用?? 一个简单的实例,使用消息队列实现下yii异步发送邮件。

准备工作

同步与异步

邮件发送

使用redis watch实现秒杀抢购,避免超卖

涉及抢购、秒杀、抽奖、抢票等活动时,为了避免超卖,那么库存数量是有限的,但是如果同时下单人数超过了库存数量,就会导致商品超卖问题。那么我们怎么来解决这个问题呢?

redis 常用场景-慢慢完善中

获取最新插入的100记录

进阶

Redis拾遗

最近几天拜读了Josiah L. Carlson的《Redis in Action》,对Redis有了更深入的理解。不由感叹它真是应了”重剑无锋,大巧不工“。几种简单的数据结构,不同的组合与运用,竟然可以优雅的解决各种项目中常见的需求,甚至独立的支持很多应用的存储与业务逻辑。

这是接下来要写的一系列Redis文章的第一篇,介绍基本数据结构、持久化与事务,以及关于Redis性能的测试。

[深入学习Redis]RedisAPI的原子性分析

原子性是数据库的事务中的特性。在数据库事务的情景下,原子性指的是:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。【维基百科】

对于Redis而言,命令的原子性指的是:一个操作的不可以再分,操作要么执行,要么不执行。

Redis 集群方法

配置 Redis

安装 ruby

安装 rubygems

安装配置集群管理

[ERR] Sorry, can"t connect to node 127.0.0.1:6370

测试

Java Jedis 访问

Redis高级功能 - 慢查询日志

许多存储系统(如:MySQL)提供慢查询日志帮助开发与运维人员定位系统存在的慢操作.所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阈值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录到慢查询日志中,Redis也提供了类似的功能.

搭建Tomcat集群&通过Redis缓存共享session的一种流行方案

如果有一个Tomcat集群都能访问的公共session存取区就好了,基于这个概念,我们想到了使用Redis来做这个session公共存取区,这样子的话就有一个统一管理回话的地方了。

持久化Tomcat Session到Redis中

nginx反向代理的负载均衡

基于sentinel的redis集群搭建

如何实现从 Redis 中订阅消息转发到 WebSocket 客户端

PHP 的redis扩展是阻塞式 IO ,使用订阅/发布模式时,会导致整个进程进入阻塞。因此必须使用SwooleRedis异步客户端来实现。

负载均衡中使用Redis实现共享Session

首先要明确session和cookie的区别。浏览器端存的是cookie每次浏览器发请求到服务端是http 报文头是会自动加上你的cookie信息的。服务端拿着用户的cookie作为key去存储里找对应的value(session).

同一域名下的网站的cookie都是一样的。所以无论几台服务器,无论请求分配到哪一台服务器上同一用户的cookie是不变的。也就是说cookie对应的session也是唯一的。

所以,这里只要保证多台业务服务器访问同一个redis服务器(或集群)就行了。

面对缓存,我需要思考哪些问题?

缓存可以说是无处不在,比如 PC 电脑中的内存、CPU 中的二级缓存、HTTP 协议中的缓存控制、CDN 加速技术都是使用了缓存的思想来解决性能问题。

缓存是用于解决高并发场景下系统的性能及稳定性问题的银弹。

本文主要是讨论我们经常使用的分布式缓存 Redis 在开发过程中的相关思考。

redis持久化策略浅析

作为目前作为流行的cash,redis除了支持丰富的数据类型之外,还支持对内存中u数据的持久化,这样一来便可以防止因为一些崩溃情况(突然间断电、内存吃满)造成的整个内存数据的丢失,这对我们来说无疑是巨大的帮助。这里我们简单的了解一下redis持久化的策略。

redis实现数据持久化的两种策略:

rdb(redis database)-- 快照持久化

aof(append only file ) -- 只追加文件持久化

Redis集群实现原理探讨

Redis集群是一个distribute、fault-tolerant的Redis实现,主要设计目标是达到线性可扩展性、可用性、数据一致性。

Redis中bitmap的妙用

在Redis中我们经常用到set,get等命令,细心的你有没有发现,还有几个相似的命令叫setbit,getbit,它们是用来干嘛的?

BitMap是什么?就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省储存空间。

Redis 未授权访问漏洞利用

Redis 应用

使用Redis记录系统日志

在构建一个系统时,我们常常需要记录当前发生的事情,以及记录特定消息出现的频率,根据出现频率的高低来决定消息的排列信息,帮助我们找到重要的信息。

常见记录日志的方法有两种:

将日志记录在文件中。随时时间流逝将日志行不断添加到文件里面,并在一段时间后创建新的日志文件。这种方式为每个不同的服务创建不同的日志,由于服务轮换日志的机制不同,也缺少一种能够方便地聚合所有日志并对其进行处理的常见方法。

syslog服务。这种服务几乎运行在Linux服务器和Unix服务器的514号TCP端口和UDP端口上。syslog接受其他程序发来的日志消息,并将这个消息路由至存储在硬盘上的各个日志文件,并且负责旧日志的轮换和删除工作。甚至还可以将日志消息转发给其他服务来做进一步的处理。

Redis的发布与订阅

Redis的发布订阅功能由 PUBLISH、SUBSCRIBE、PSUBSCRIBE等命令组成。

通过执行SUBSCRIBE命令,客户端可以订阅一个或多个频道从而成为这些频道的订阅者(subscriber),当有其它客户端向被订阅的频道发送消息时,频道的所有订阅者都能收到这条消息。

购物网站的redis相关实现

需求:

(1)登录和cookie缓存

(2)使用redis实现购物车

(3)网页缓存

(4)数据行缓存

(5)网页分析

使用Redis Zset来处理活动常用排行榜(精确排行)

一个严格的排行榜,必须要满足每个人的排序都是有实际意义的,简单来说就是即使两个人的分数一样,那么也要分出先后来。

活动周期在92天以内的话,那么我们就可以使用200w加活动结束时间作为数字A来保证排行榜的顺序正确。

Redis分布式锁解决抢购问题

废话不多说,首先分享一个业务场景-抢购。一个典型的高并发问题,所需的最关键字段就是库存,在高并发的情况下每次都去数据库查询显然是不合适的,因此把库存信息存入Redis中,利用redis的锁机制来控制并发访问,是一个不错的解决方案。

一步步实现 Redis 搜索引擎

这是某购物网站的搜索条件:搜索总共分为6大类,每大类中又分了各个子类。这中间,各大类条件之间是取的交集,各子类中有单选、多选、以及自定义的情况,最终输出符合条件的结果集。

如果让你实现这样的一个搜索接口,你会如何实现?

途牛原创|无线中心运营研发Redis酷实践

Redis固然很赞,切记当你手上有一把锤子的时候,看所有的东西都是钉子,理解他,用好他。

运营研发-场景:

武器一览

CMS页面缓存

API限速器

性能分析

API状态统计

CMS智能提醒-异常线路

Redis在京东到家的订单中的使用

Redis作为一款性能优异的内存数据库,在互联网公司有着多种应用场景,下面介绍下Redis在京东到家的订单列表中的使用场景。主要从以下几个方面来介绍:

订单列表在Redis中的存储结构

Redis和DB数据一致性保证

Redis中的分布式锁

缓存防穿透和雪崩

Redis 应用案例 - 在问题中不断成长

本文翻译整理自 Andy Grunwald 发布的一篇文章,写的是作者所在公司使用 Redis 时遇到的问题,以及处理过程,在不断解决调整中积累了很多 Redis 的使用经验。

问题描述:

用户量快速增长,访问量在短时间内翻倍,由于前期容量规划做得比较好,硬件资源可以支撑,可是软件系统方面出现了大问题:

40% 的请求都会返回 HTTP 500: Internal Server Error

通过查看日志,发现错误是在 PHP <-> Redis 的连接处理上

使用 阿里巴巴 Canal 增量订阅&消费组件 同步 MySQL 数据到 Redis

早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元。

秒杀活动的设计

业务的基本说明

运营评估最高的并发会达到 10W(根据推广的力度,以及以往的经验)

业务现有的服务器架构 反向代理 4台,前端机 8台, db 2台(主从),redis 2台(主从)。

本期完
:)


欢迎关注 SegmentFault 微信服务号,获取最新讲堂及优惠信息。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/17661.html

相关文章

  • SegmentFault 技术周刊 Vol.39 - 什么!服务器炸了?

    摘要:有一次别人的云服务器被攻击,提供商竟然重启了物理机然后又诸多悲剧出现。造成微博服务短暂不可用。通过建立工具来诊断问题,并创建一种复盘事故的文化来推动并作出改进,防止未来发生故障。 showImg(https://segmentfault.com/img/bV0jif?w=900&h=385); 相信小伙伴们在上网或者玩游戏的时候一定都遇到过无法访问的情况。服务器炸了的原因有各种各样,下...

    1treeS 评论0 收藏0

发表评论

0条评论

binaryTree

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<