[纸上谈兵][Redis]初识Redis

目录

Redis特性

Redis可以做什么

Redis不可以做什么

用好Redis建议


Redis(Remote Dirctionary  Server) ,一种基于键值对(key-value)的NoSQL数据库。

Redis特性

1.速度快

     Redis执行命令速度非常快,官方给出的数字是读写性能可达到10万/秒。

    为什么Redis如此快?

  • Redis所有的数据都是存储在内存中的

       内存的速度是非常快的,这个我相大家都有所了解。

  • Redis使用了单线程架构,预防了多线程可能产生的竞争

       单线程避免了上下文频繁切换问题,没有多线程的竞争,性能会很好。

       Redis单线程并非代表整个Redis实例是一个线程,而且指Redis负责存取这块的线程只有一个。

       为什么使用单线程模型?

               1、Redis的瓶颈不是cpu的运行速度,而往往是网络带宽和机器的内存大小。

               2、单线程切换开销小,容易实现既然单线程容易实现。

       如果CPU成为瓶颈怎么办?

                使用多个Redis实例即可。

  • I/O多路复用模型

       IO多路复用(IO Multiplexing):即经典的Reactor设计模式,有时也称为异步阻塞IO,Java中的Selector和Linux中的epoll都是这种模型

       关于I/O多路复用模型在此不多说,后面会有文章单聊这块,一个坑。

  • Redis使用了C语言

        一般来说,C语言实现的程序"距离"操作系统更进一些,执行速度相对更快

  • Redis源码的精打细磨

2.值支持多种数据结构

    主要提供了5种数据结构:字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(zset)。

    在字符串基础上演进出了位图(Bitmaps)和HyperLogLog两种神奇的数据结构。

    随着LBS(Location Based Service,基于位置服务)的不断发展,Redis 3.2版本中加入有关GEO(地理信息定位)的功能。

3.功能丰富

  • 提供了键过期功能,可以用来实现缓存
  • 提供了发布订阅功能,可以用来实现消息系统
  • 支持Lua脚本功能,可以利用Lua创造出新的Redis命令
  • 提供了简单的事务功能,能在一定程度上保证事务特性
  • 提供了流水线(Pipeline)功能,这样客户端能将一批命令一次性传到Redis,减少网络开销

4.简单稳定

  • 简单

       表现在以下三方面:1、源码少。2、单线程模型,使服务端处理模型简单,也使客户端开发简单。3、不需要依赖操作系统类库,实现了自己的事件处理功能(Memcache需要依赖libevent这样的类库)。

  • 稳定

      很少因为自身bug而宕机

5.客户端语言多

   支持Java、PHP、Python等主流编程语言

6.持久化

   数据在内存中一旦发生断电或机器故障,重要数据可能会丢失。

   Redis提供两种持久化方案:RDB和AOF。

7.主从复制

    Redis提供了复制功能,实现多个相同数据的Redis副本,复制功能是分布式Redis基础。

8.高可用分布式

   Redis从2.8版本开始提供了高可用的Redis Sentinel,它能够保证Redis节点的故障发现和故障自动转移。

   Redis从3.0版本正式提供了分布式实现Redis Cluster,它是Redis真正的分布式实现,提供了高可用、读写和容量的扩展。

   其它第三方的集群我会在后续的文章中继续,先挖个坑。

Redis可以做什么

  • 缓存

       合理使用缓存不仅可以增加数据的访问速度,而且能够有效的降低后端数据库源的压力。

       Redis提供了键值过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。

  • 排行榜系统

       Redis提供了列表和有序集合数据结构,合理使用这些数据结构可以很方便的构建各种排行榜单。

       之前我做过一个排行榜单相关功能,后面会再出文章把如何实现的整理一下,先挖个坑。

  • 计数器应用

        计数功能,例如视频网站播放数、浏览数等,为保证实时性,每次播放和浏览加1。

        Redis天然支持数据计数功能且计数性能也非常好。

  • 社交网络

        社交网站访问量比较大且部分功能传统关系数据库存储不太适合,例如:赞/踩,粉丝等。

        Redis提供的数据结构可以相对比较容易的实现。

  • 消息队列系统

        消息队列具有业务解耦,非实时业务削峰等特性,可以说是一个大型网站必备功能。

         Redis提供了发布订阅功能和阻塞队列的功能,与专业的消息队列相比功能还不够强大,但用于一般的消息队列功能基本可以满足。

  • session共享

       tomcat中就存在插件可以让session数据都存储在Redis中

Redis不可以做什么

  • 数据规模

       数据规模分为大规模和小规模。

       虽然内存已经足够便宜,但将大规模数据放在Redis中,经济成本非常高。

  • 冷热数据

       数据分为冷数据和热数据。热数据是指频繁操作的数据(查询也是一种操作),反之为冷数据。

       冷数据放在Redis中,基本上是对内存的一种浪费,虽然目前内存很便宜。

       热数据放在Redis中加速读写,也可以减轻后端的存储负载,可以说事半功能。

 

用好Redis建议

  • 不要当黑盒使用,开发与运维同样重要
  • 阅读源码

参考

《Redis开发与运维》

https://zhuanlan.zhihu.com/p/81195864


版权声明:本文为c364902709原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。