设为首页 收藏本站
查看: 462|回复: 0

[经验分享] 为什么要用Redis-Python & Golang 学习

[复制链接]

尚未签到

发表于 2018-11-2 08:16:02 | 显示全部楼层 |阅读模式
  最近阅读了《Redis开发与运维》,非常不错。这里对书中的知识整理一下,方便自己回顾一下Redis的整个体系,来对相关知识点查漏补缺。
  我按照五点把书中的内容进行一下整理:
  ·    为什么要选择Redis:介绍Redis的使用场景与使用Redis的原因;
  ·    Redis常用命令总结:包括时间复杂度总结与具体数据类型在Redis内部使用的数据结构;
  ·    Redis的高级功能:包括持久化、复制、哨兵、集群介绍;
  ·    理解Redis:理解内存、阻塞;这部分是非常重要的,前面介绍的都可以成为术,这里应该属于道的部分。;
  ·    开发技巧:主要是一些开发实战的总结,包括缓存设计与常见坑点。
  先来开启第一部分的内容,对 Redi s来一次重新打量。
  本系列内容基于:redis-3.2.12
Redis 不是万金油
  在面试的时候,常被问比较下 Redis 与 Memcache 的优缺点,个人觉得这二者并不适合一起比较,一个是非关系型数据库不仅可以做缓存还能干其它事情,一个是仅用做缓存。常常让我们对这二者进行比较,主要也是由于Redis最广泛的应用场景就是 Cache。那么 Redis 到底能干什么?又不能干什么呢?
Redis 都可以干什么事儿
  缓存,毫无疑问这是 Redis 当今最为人熟知的使用场景。再提升服务器性能方面非常有效;
  排行榜,如果使用传统的关系型数据库来做这个事儿,非常的麻烦,而利用 Redis 的SortSet 数据结构能够非常方便搞定;
  计算器/限速器,利用 Redis 中原子性的自增操作,我们可以统计类似用户点赞数、用户访问数等,这类操作如果用 MySQL,频繁的读写会带来相当大的压力;限速器比较典型的使用场景是限制某个用户访问某个 API 的频率,常用的有抢购时,防止用户疯狂点击带来不必要的压力;
  好友关系,利用集合的一些命令,比如求交集、并集、差集等。可以方便搞定一些共同好友、共同爱好之类的功能;
  简单消息队列,除了 Redis 自身的发布/订阅模式,我们也可以利用 List 来实现一个队列机制,比如:到货通知、邮件发送之类的需求,不需要高可靠,但是会带来非常大的 DB 压力,完全可以用 List 来完成异步解耦;
  Session 共享,以 PHP 为例,默认 Session 是保存在服务器的文件中,如果是集群服务,同一个用户过来可能落在不同机器上,这就会导致用户频繁登陆;采用 Redis 保存 Session后,无论用户落在那台机器上都能够获取到对应的 Session 信息。
Redis 不能干什么事儿
  Redis 感觉能干的事情特别多,但它不是万能的,合适的地方用它事半功倍。如果滥用可能导致系统的不稳定、成本增高等问题。
  比如,用 Redis 去保存用户的基本信息,虽然它能够支持持久化,但是它的持久化方案并不能保证数据绝对的落地,并且还可能带来 Redis 性能下降,因为持久化太过频繁会增 大Redis 服务的压力。
  简单总结就是数据量太大、数据访问频率非常低的业务都不适合使用 Redis,数据太大会增加成本,访问频率太低,保存在内存中纯属浪费资源。
DSC0000.jpg

选择总需要找个理由
  上面说了 Redis 的一些使用场景,那么这些场景的解决方案也有很多其它选择,比如缓存可以用 Memcache,Session 共享还能用 MySql 来实现,消息队列可以用 RabbitMQ,我们为什么一定要用 Redis 呢?
  速度快,完全基于内存,使用C语言实现,网络层使用 epoll 解决高并发问题,单线程模型避免了不必要的上下文切换及竞争条件;
  注意:单线程仅仅是说在网络请求这一模块上用一个请求处理客户端的请求,像持久化它就会重开一个线程/进程去进行处理
  丰富的数据类型,Redis 有 8 种数据类型,当然常用的主要是 String、Hash、List、Set、 SortSet 这 5 种类型,他们都是基于键值的方式组织数据。每一种数据类型提供了非常丰富的操作命令,可以满足绝大部分需求,如果有特殊需求还能自己通过 lua 脚本自己创建新的命令(具备原子性);
DSC0001.jpg

  除了提供的丰富的数据类型,Redis 还提供了像慢查询分析、性能测试、Pipeline、事务、Lua 自定义命令、Bitmaps、HyperLogLog、发布/订阅、Geo 等个性化功能。
  Redis 的代码开源在 GitHub,代码非常简单优雅,任何人都能够吃透它的源码;它的编译安装也是非常的简单,没有任何的系统依赖;有非常活跃的社区,各种客户端的语言支持也是非常完善。另外它还支持事务(没用过)、持久化、主从复制让高可用、分布式成为可能。
DSC0002.jpg

  做为一个开发者,对于我们使用的东西不能让它成为一个黑盒子,我们应该深入进去,对它更了解、更熟悉。今天简单说了下 Redis 的使用场景,以及为什么选择了 Redis 而不是其它。下次对 Redis 的内部数据结构及常用命令的时间复杂度进行总结。
  点击阅读原文


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-629596-1-1.html 上篇帖子: redis-10947928 下篇帖子: Centos 7 使用shell 实现redis快速安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表