【Redis】初识 Redis

1. 认识 Redis

  • Redis 是一种基于键值对的 NoSQL 数据库, 与很多键值对数据库不同的是, Redis中的值可以是由 string、Hash、list、set、zset(有序集合)、bitmaps(位图)等多种数据结构和算法组成,因此Redis可以满足很多的应用场景。
  • Redis会将所有数据都存放在内存中,所以它的读写性能非常惊人。
  • Redis 还可以将内存的数据利用快照和日志的形式保存到硬盘上,内存中的数据不易丢失。
  • Redis还提供了键过期、发布订阅、事务等附加功能

2. Redis的特性

2.1 速度快

正常情况下,Redis 执⾏命令的速度⾮常快,官⽅给出的数字是读写性能可以达到 10 万 / 秒。


Redis速度快的原因分析:

  • Redis的所有数据都是存放在内存中的
  • Redis 是用C语言实现的, 一般来说 C语言 实现的程序 “距离” 操作系统更近, 执行速度相对会更快
  • Redis 使用了单线程, 预防了多线程可能产生的竞争问题
  • 作者对于 Redis 源代码精打细磨

2.2. 基于键值对的数据结构服务器

Redis 的全称是 REmote Dictionary Server,它主要提供了 5 种数据结构:字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(ordered set /zet),同时在字符串的基础之上演变出了位图(Bitmaps)和 HyperLogLog 两种神奇的 ”数据结构“,并且随着 LBS(Location Based Service,基于位置服务)的不断发展,Redis 3.2. 版本种加⼊有关 GEO(地理信息定位)的功能,总之在这些数据结构的帮助下,开发者可以开发出各种 “有意思” 的应⽤。

2.3. 丰富的功能

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

2.4. 简单稳定

  • Redis 的简单主要表现在三个⽅⾯。⾸先,Redis 的源码很少,早期版本的代码只有 2 万⾏左右,3.0 版本以后由于添加了集群特性,代码增⾄ 5 万⾏左右,相对于很多 NoSQL 数据库来说代码量相对要少很多,也就意味着普通的开发和运维⼈员完全可以 “吃透” 它。
  • 其次,Redis 使⽤单线程模型,这样不仅使得 Redis 服务端处理模型变得简单,⽽且也使得客⼾端开发变得简单。
  • 最后,Redis 不需要依赖于操作系统中的类库(例如 Memcache 需要依赖 libevent 这样的系统类库),Redis ⾃⼰实现了事件处理的相关功能。
  • 但与简单相对的是 Redis 具备相当的稳定性,在⼤量使⽤过程中,很少出现因为 Redis ⾃⾝ BUG⽽导致宕掉的情况。

2.5. 客⼾端语⾔多

Redis 提供了简单的 TCP 通信协议,很多编程语⾔可以很⽅便地接⼊到 Redis,并且由于 Redis 受到社区和各⼤公司的⼴泛认可,所以⽀持 Redis 的客⼾端语⾔也⾮常多,⼏乎涵盖了主流的编程语⾔,例如 C、C++、Java、PHP、Python、NodeJS 等,后续我们会对 Redis 的客⼾端使⽤做详细说明。

2.6. 持久化(Persistence)

通常看,将数据放在内存中是不安全的,⼀旦发⽣断电或者机器故障,重要的数据可能就会丢失,因此 Redis 提供了两种持久化⽅式:RDB 和 AOF,即可以⽤两种策略将内存的数据保存到硬盘中(如图 1-1 所⽰),这样就保证了数据的可持久性.

2.7. 主从复制(Replication)

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

2.8. ⾼可⽤(High Availability)和分布式(Distributed)

Redis 提供了⾼可⽤实现的 Redis 哨兵(Redis Sentinel),能够保证 Redis 结点的故障发现和故障⾃动转移。也提供了 Redis 集群(Redis Cluster),是真正的分布式实现,提供了⾼可⽤、读写和容量的扩展性。

3. Redis的使用场景

3.1 Redis 可以做什么?

  1. 缓存

缓存机制⼏乎在所有⼤型⽹站都有使⽤,合理地使⽤缓存不仅可以加速数据的访问速度,⽽且能够有效地降低后端数据源的压⼒。Redis 提供了键值过期时间设置,并且也提供了灵活控制最⼤内存和内存溢出后的淘汰策略。可以这么说,⼀个合理的缓存设计能够为⼀个⽹站的稳定保驾护航。

  1. 排⾏榜系统

排⾏榜系统⼏乎存在于所有的⽹站,例如按照热度排名的排⾏榜,按照发布时间的排⾏榜,按照各种复杂维度计算出的排⾏榜,Redis 提供了列表和有序集合的结构,合理地使⽤这些数据结构可以很⽅便地构建各种排⾏榜系统。

  1. 计数器应⽤

计数器在⽹站中的作⽤⾄关重要,例如视频⽹站有播放数、电商⽹站有浏览数,为了保证数据的实时性,每⼀次播放和浏览都要做加 1 的操作,如果并发量很⼤对于传统关系型数据的性能是⼀种挑战。Redis 天然⽀持计数功能⽽且计数的性能也⾮常好,可以说是计数器系统的重要选择。

  1. 社交⽹络

赞 / 踩、粉丝、共同好友 / 喜好、推送、下拉刷新等是社交⽹站的必备功能,由于社交⽹站访问量通常⽐较⼤,⽽且传统的关系型数据不太合适保存这种类型的数据,Redis 提供的数据结构可以相对⽐较容易地实现这些功能。

  1. 消息队列系统

消息队列系统可以说是⼀个⼤型⽹站的必备基础组件,因为其具有业务解耦、⾮实时业务削峰等特性。Redis 提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列⽐还不够⾜够强⼤,但是对于⼀般的消息队列功能基本可以满⾜。

3.2 Redis 不适合做什么?

对于存储数据来说, Redis是存储在内存中的, 因此 Redis 不适合存储大量的数据, 而且是冷数据

相关推荐

  1. Redis Redis

    2024-04-04 02:16:03       13 阅读
  2. 第一节 Redis

    2024-04-04 02:16:03       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-04 02:16:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-04 02:16:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-04 02:16:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-04 02:16:03       20 阅读

热门阅读

  1. 【动态规划】【背包问题】基础背包

    2024-04-04 02:16:03       14 阅读
  2. 【Kotlin】Sequence简介

    2024-04-04 02:16:03       14 阅读
  3. 东方 - 循环(2) - 求和计数

    2024-04-04 02:16:03       12 阅读
  4. android跳转到系统设置wifi界面

    2024-04-04 02:16:03       13 阅读
  5. Vue.js组件精讲 开篇:Vue.js的精髓——组件

    2024-04-04 02:16:03       11 阅读
  6. PHP教程_PHP5函数str_replace替换字符串中的字符

    2024-04-04 02:16:03       15 阅读
  7. 跟我学c++高级篇——常见的反射框架

    2024-04-04 02:16:03       13 阅读
  8. 设计模式|状态机模式(State Machine Pattern)

    2024-04-04 02:16:03       20 阅读
  9. OAuth 2.0(Open Authorization 2.0)授权框架入门介绍

    2024-04-04 02:16:03       14 阅读