「进击Redis」一、初识Redis

2,795 阅读6分钟

遇见

 依稀记得那年还是个刚刚入行的少年、那时头发还是那么浓密、那时还没有格子寸衫...,想到以前那浓密的毛发,眼角总是泛着泪花(别打了,别打了,我写)。
入职后的几天,头顶依稀还有几根头发的好哥哥过来就跟我说,这里有个老项目,你熟悉一下,明天开始接新需求开发。都不给我反驳的余地,那我能怎么办呢,那还用说嘛,萌新三连(好的、好的、好的),像极了我的前领导在领导前的样子(希望不要被他看到吧)。
含着泪打开项目,一个个新的技术扑脑而来,啊,我吐了。但是当我面向百度输入 Redis 的时,我震惊了,从此头也不回的走上了这条掉头发之路。
反手就是一个 Antirez(Redis 作者)yyds。

初识

 Redis 是一种基于键值对(key-value) 的 NoSQL 数据库,与很多键值对数据库不同的是,Redis 中的值可以是string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog(基数统计)、GEO(地理信息定位) 等多种数据结构和算法组成,因此 Redis 可以满足很多的应用场景。
而且因为 Redis 所有数据操作都在内存中,所以它的读写性能非常惊人。不仅如此,Redis 还可以将内存的数据利用快照和日志的形式保存到硬盘上,这样在发生类似断电或者机器故障的时候,内存中的数据不会“丢失”。除了上述功能以外,Redis 还提供了键过期、发布订阅、事务、流水线、Lua 脚本等附加功能。 就是它

小故事

 又到了我最喜欢的环节。2008 年,Redis 的作者 antirez(Salvatore Sanfilippo)在开发一个叫 LLOOGG 的网站时,需要实现一个高性能的队列功能,最开始是使用 MySQL 来实现的,但后来发现无论怎么优化 SQL 语句都不能使网站的性能提高上去,再加上自己囊中羞涩,于是他决定自己做一个专属于 LLOOGG 的数据库,这个就是 Redis 的前身。
后来,Salvatore Sanfilippo 将 Redis1.0 的源码开放到 GitHub 上,可能连他自己都没想到,Redis 后来如此受欢迎。

相关链接

官方网站
作者博客
源码地址

特性

1. 读写速度快

 官方给出的数字是读写性能可以达到 10 万/秒,当然这也取决于服务器的配置。
Redis 读写性能高的原因:
1). 基于内存操作。
2). 用 C 语言实现,C 语言实现的程序“距离”操作系统更近,执行速度相对会更快。
3). 使用单线程加上 I/O 多路复用模型,避免了多线程环境下产生的并发竞争问题。
4). 作者自身对源码严格的打磨。代码量较其他数据库来说量很小。

2. 基于键值对存储

 根据 key-value 的映射关系生成类似于字典的功能,比如像 Java(世界上最好的语言,没有之一)中的 Map。
而且 Redis 中的值不仅可以是字符串,还可以是具体的数据结构或者算法

3. 多样化的功能

 除了提供常用的 5 中基础数据类型,还提供以下的功能:
1). 键过期,可以用来实现缓存、分布式锁等。
2). 提供了基础的发布订阅能力,可以用来实现消息系统,但是一般系统都会选择用像 rabbitMQ 专门的消息中间件。
3). 支持 Lua 脚本功能,像 Redisson 分布式锁框架底层用的就是 Lua 脚本来实现的。
4). 支持持久化,Redis 本身是基于内存的,所以提供了 AOF 和 RDB 两种方式来持久化。
5). 支持高可用,Redis 集群模式提供了主从复制、哨兵模式和 cluster 模式,当然主从和哨兵一般是配合使用的。
6). 等等(狗头护脸)....后续都会一个个来的,好哥哥们别急

使用场景

1. 能做什么

1). 缓存,这个功能是绝大多数系统用的主要原因,可以缓存热点数据,分摊数据库压力。
2). 排行榜系统,提供列表和有序集合,可以合理利用这种数据结构实现排行。
3). 计数器应用,比如像统计访问量或者播放量,Redis 天然支持计数功能而且计数的性能也非常好。
4). 社交网络,赞/踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交网站的必备功能,Redis 提供的数据结构可以相对比较容易地实现这些功能。
5). 消息队列系统,基于 Redis 发布订阅,可以实现基础的消息队列功能,不过还是建议用专门的消息中间件。

2. 不能做什么

 Redis 是基于纯内存操作的,虽说现在的内存已经足够便宜,但是数据规模量很大时,使用 redis 存储的话经济成本会很大。另外,如果是基于主从复制来做高可用的话,从库拷贝了主库的全量数据,也就意味着能存储的数据量是有限的。
其次的话,在冷热数据(访问)上来讲,存储热数据可以提高系统的吞吐量,而如果存储冷数据的话就基本上是对于内存的一种浪费。

碎碎念

 在 2020 年的最后一个月,突发萌生了写博客想法。也是经过了一系列的挣扎之后还是决定要坚持写下去。
一方面在写博客的过程中能发现自身对于某个知识点的盲区,加深技术点的理解,提高技术能力的深度。
其次学习、理解一个技术点和把这个技术点通过文字输出反馈出来完全不一样,能很大程度上的提高我的语言表达能力。
最后通过分享能和很多巨佬(后续就叫好哥哥)进行碰撞(思维,肉体打不过啊),每每碰撞后总是醍醐灌顶,一个字那就是妙啊。
然后后续会分享 Redis 这一块的东西,基本就是从 0 到 1 这种,夸张点说就是从入门到精通(诶诶诶,别打脸,别打脸),希望好哥哥们喜欢。
最后的最后,我是娱乐博主,欢迎大家来碰撞(肉弹冲击),冲冲冲......

本期就到这啦,有不对的地方欢迎好哥哥们评论区留言,另外求关注、求点赞\color{#FF0000}{求关注、求点赞}

下一篇:Redis 安装与配置