专栏首页转行程序员Redis探险 -《Redis开发与运维》笔记,精华分享。

Redis探险 -《Redis开发与运维》笔记,精华分享。

最近看完了《Redis开发与运维》分享给大家。

全面讲解Redis基本功能及其应用,并结合线上开发与运维监控中的实际使用案例,深入分析并总结了实际开发运维中遇到的“陷阱”,以及背后的原因, 包含大规模集群开发与管理的场景、应用案例与开发技巧,为高效开发运维提供了大量实际经验和建议。本书不要求读者有任何Redis使用经验,对入门与进阶DevOps的开发者提供有价值的帮助。主要内容包括:Redis的安装配置、API、各种高效功能、客户端、持久化、复制、高可用、内存、哨兵、集群、缓存设计等,Redis高可用集群解决方案,Redis设计和使用中的问题,最后提供了一个开源工具:Redis监控运维云平台CacheCloud。

用心之作。唯一个人认为可以再优化的是,监控软件的安装,很多配置都默认写在一些文件,导致自定义安装目录时带来部分不变,,,但是依然不能妨碍书本身的精品。大力推荐 ,不管是 redis 新手 老手,都能学到很多。

Redis相关书籍里面内容属于特别上乘的。书中有好多以前没有发现和注意的细节点,而且内容的连贯性,深度等各个点都写的非常的好,书中也会提及很多开发人员对redis认知的盲区,该书能更好的让你做好redis相关的工作,在授之以鱼之时也授之以渔。最近也作为我强力推荐的一本redis好书在推荐给身边的朋友看。

初识Redis

单线程面向快速执行场景的内纯数据库

特性

  1. 数据结构:string字符串(位图bitmaps,hyperloglog),hash哈希表,list列表,set集合,zset有序集合
  2. 单线程模型
  3. 持久化方式:RDB,AOF
  4. 主从复制

5种数据类型

String

字符串类型是Redis最基础的数据结构。首先键都是字符串类型的, 而且其他几种数据结构都是在字符串的基础上构建的。字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串(JSON/XML等))、数字(整数、浮点数)、甚至是二进制、但是值最大不能超过512M。

List

类似 Java 中的 List ,按照插入顺序排序的字符串链表,在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除

Set Set 就是一个集合,集合的概念就是一堆不重复值的组合。利用 Redis 提供的 Set 数据结构,可以存储一些集合性的数据。比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。因为 Redis 非常人性化的为集合提供了求交集、并集、差集等操作,那么就可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。

Sorted Set

和Sets相比,Sorted Sets是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列,比如一个存储全班同学成绩的 Sorted Sets,其集合 value 可以是同学的学号,而 score 就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。另外还可以用 Sorted Sets 来做带权重的队列,比如普通消息的 score 为1,重要消息的 score 为2,然后工作线程可以选择按 score 的倒序来获取工作任务。让重要的任务优先执行。

Hash 在 Memcached 中,我们经常将一些结构化的信息打包成 hashmap,在客户端序列化后存储为一个字符串的值(一般是 JSON 格式),比如用户的昵称、年龄、性别、积分等。这时候在需要修改其中某一项时,通常需要将字符串(JSON)取出来,然后进行反序列化,修改某一项的值,再序列化成字符串(JSON)存储回去。简单修改一个属性就干这么多事情,消耗必定是很大的,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而 Redis 的 Hash 结构可以使你像在数据库中 Update 一个属性一样只修改某一项属性值

全局命令

  • keys *:查看所有键
  • dbsize:键的总数
  • exists key:查看键是否存在
  • del key:删除键
  • expire key seconds:键过期
  • type key::查看键的数据类型

单线程架构

命令到达服务端后,按队列依次单线程执行

纯内存存储、 IO多路复用技术、单线程架构是造就 Redis高性能的三个因素。

epoll I/O多路复用提升IO性能

redis快的原因:

  1. 纯内存访问
  2. I/O多路复用:epoll
  3. 单线程避免线程竞争

keys全量遍历键可能导致redis阻塞,可以在从节点上执行,或者使用渐进式的scan代替(可能漏掉期间进行的更新)

应用场景

  • 缓存。
  • 排行榜系统。redis提供了列表和有序集合支持。
  • 计数器应用。
  • 社交网络。
  • 消息队列系统。redis提供了订阅发布和阻塞队列功能,虽然和专业的消息队列软件比不够强大,但是可以满足一般的消息队列需求

Pipeline概念

edis客户端执行一条命令分为如下四个过程:1)发送命令2)命令排队3)命令执行4)返回结果其中1到4称为 Round Trip Time( RTT,往返时间)。Pipeline(流水线)机制能将一组 Redis命令进行组装,通过一次 RTT传输给 Redis,再将这组 Redis命令的执行结果按顺序返回给客户端。Redis命令真正执行的时间通常在微秒级别,所以才会有 Redis性能瓶颈是网络这样的说法。

持久

  1. RDB持久化方式会在一个特定的间隔保存那个时间点的一个数据快照。
  2. AOF持久化方式则会记录每一个服务器收到的写操作。在服务启动时,这些记录的操作会逐条执行从而重建出原来的数据。写操作命令记录的格式跟Redis协议一致,以追加的方式进行保存。

本文分享自微信公众号 - 转行程序员(be_coder)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 王炸吐血整理60个Redis面试题,全网最全了

    单进程单线程模式,采用队列模式将并发访问变为串行访问。Redis本身没有锁的概念,Redis对于多个客户端连接并不存在竞争,利用setnx实现锁。

    王炸
  • 志玲姐姐宣布结婚的一刹那,对一个单身程序员的冲击究竟有多大。

    2019年6月6日 下午6:06分 全民女神林志玲宣布结婚,这是一条爆炸新闻,究竟有多炸??,一会儿我再给你分析,看到这条消息的这一刻,我的心里也一阵悲叹,为什...

    王炸
  • 一个月真的可以学会一门语言吗?

    知乎上总看到有人提这个问题, 我想转行,我要学多久才能学会,分享下我到经历,以便你评估一下自身来不来得及,别人是没办法帮你评估的。

    王炸
  • 在Windows上以服务方式运行 MSOPenTech/Redis

    ServiceStack.Redis 使用教程里提到Redis最好还是部署到Linux下去,Windows只是用来做开发环境,现在这个命题发生改变了,在Wind...

    张善友
  • 从阿里、腾讯的面试真题中总结了这11个Redis高频面试题

    现在大家的工作生活基本已经是回归正轨了,最近也是迎来了跳槽面试季,有些人已经拿到了一两个offer了。

    程序员追风
  • Redis【入门】就这一篇!

    在我们日常的Java Web开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及...

    我没有三颗心脏
  • Redis【入门】就这一篇!

    我没有三颗心脏
  • Redis常见面试题

    string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

    JAVA葵花宝典
  • 最高50万QPS! 腾讯云新发布Redis 4.0标准版突破性能极限

    Redis在缓存应用场景中拥有不可取代的地位,被广泛应用于数据缓存、游戏存储、分布式会话存储、实时分析和机器学习等场景。腾讯云在Redis数据库领域的不断突破,...

    用户6148407
  • Redis中的慢查询

    在关系型数据库中如Oracle、Mysql中都提供了慢查询的功能。说的简单一点就是可以通过设置数据库的相关参数来记录命令的执行时间。记录的规则就是当命令的执行时...

    吉林乌拉

扫码关注云+社区

领取腾讯云代金券