您的位置:首页 > 数据库 > Redis

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

2017-11-16 00:00 127 查看

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 使用场景

    1. 缓存

    2. 会话缓存

    3. 时效性

    4. 访问频率

    5. 计数器

    6. 社交列表

    7. 记录用户判定信息

    8. 交集、并集和差集

    9. 热门列表与排行榜

    10. 最新动态

    11. 消息队列

    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公共存取区,这样子的话就有一个统一管理回话的地方了。

    1. 持久化Tomcat Session到Redis中

    2. nginx反向代理的负载均衡

    3. 基于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 微信服务号,获取最新讲堂及优惠信息。

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    相关文章推荐