初识Redis

目录

前言

Redis的产生

Redis的特性

速度快

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

丰富的功能

简单稳定

客户端语言多

持久化

主从复制(Replication)

高可用(High Availability)和分布式 (Distributed) 

Redis可以做什么  

缓存 

消息队列 

排行榜 

Redis不能做什么 

结尾总结 


前言

Redis是⼀种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同的是,Redis中的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此Redis可以满⾜很多的应⽤场景,⽽且因为Redis会将所有数据都存放再内存中,所以它的读写性能⾮常惊⼈。不仅如此,Redis还可以将内存的数据利⽤快照和⽇志的形式保存到硬盘上,这样在发⽣类似断电或者机器故障的时候,内存中的数据不会“丢失”。除了上述功能以外,Redis还提供了键过期、发布订阅、事务、流⽔线、Lua脚本等附加功能。总之,如果在合适的场景使⽤好Redis,它就会像⼀把瑞⼠军⼑⼀样所向披靡。

Redis的产生

2008年,Redis的作者Salvatore Sanfilipp在开发一个叫做LLOOGG的网站的时候,需要一个高性能的队列功能,最开始他使用的是MySQL,但是后来发现怎么优化SQL语句,网站的性能都上不去,于是自己打造了一个专属的数据库,这就是Redis的前身。 

Redis的特性

Redis的8个重要特性。

速度快

正常情况下,Redis执⾏命令的速度⾮常快,官⽅给出的数字是读写性能可以达到10万/秒,当然这也取决于机器的性能,但这⾥先不讨论机器性能上的差异,只分析⼀下是什么造就了Redis如此之快,可以⼤概归纳为以下四点:

  • Redis的所有数据都是存放在内存中的,表1-1是⾕歌公司2009年给出的各层级硬件执⾏速度,所以把数据放在内存中是Redis速度快的最主要原因。
  • Redis是⽤C语⾔实现的,⼀般来说C语⾔实现的程序“距离”操作系统更近,执⾏速度相对会更快。
  • Redis使⽤了单线程,预防了多线程可能产⽣的竞争问题。(Redis在6.0版本引⼊了多线程机制,但主要也是在处理⽹络和IO,不涉及到数据命令,即命令的执⾏仍然采⽤了单线程模式。)
  • 作者对于Redis源代码可以说是精打细磨,曾经有⼈评价Redis是少有的集性能和优雅于⼀⾝的开源代码。 

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

正如前言所说,Redis中基于键值对的数据结构,类似于C++里的map、Java里的map、Python里的dict等等,这种存储方式的查找的时间复杂度可以认为是O(1)

丰富的功能

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

简单稳定

这主要体现在三个方面:

第一点:早期的Redis版本代码大概只有2w行左右,3.0版本由于添加了集群特性,增加到5w行左右,相对于很多NoSQL数据库来说代码量相对少很多,这也就意味着很多普通的开发人员就能够吃透它

第二点:Redis使用单线程模型,这样不仅使得Redis服务端处理模型变得简单,而且也使得客户端开发变得简单。

第三点:Redis不需要依赖于操作系统中的类库,Redis自己实现了事件处理的相关功能

简单的同时Redis具有相当的稳定性,在大量使用过程中,很少出现因为Redis本身Bug导致宕机的情况

客户端语言多

Redis提供了简单的TCP通信协议,很多编程语言可以很方便的接入到Redis。又由于Redis收到社区和各大公司的广泛认可,所以支持Redis客户端语言的也非常多,几乎涵盖了主流的变成语言,例如:C、C++、Java、PHP等

持久化

通常数据放在内存中使很不安全的,因为内存只要一掉电,那么所有保存在内存中的数据就消失了,因此Redis也提供了持久化的方法,将内存中的数据能够保存到硬盘当中,这里持久化可以使用RDB 或 AOF 的策略 

主从复制(Replication)

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

高可用(High Availability)和分布式 (Distributed) 

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

Redis可以做什么  

 首先我们要知道Redis 是把数据存储在内存上,所以不应该让他保存大量的用户数据

缓存 

大型的网站往往都会使用缓存机制,合理使用缓存能够加快数据的访问速度,而且能够有效的缓解后端数据源的压力。同时Redis提供了键值对过期时间,并且也能领过控制最大内存和内存溢出过后的淘汰策略。 

消息队列 

消息队列可以说是大型网站的必备基础组件,因为其具有业务解耦、非实施业务削峰等特性。Redis提供了发布订阅功能和阻塞队列功能,虽然和专业的比起来不够强大,但是对于一般的消息队列他能够满足

排行榜 

 就是像微博热搜top100 那样子类型的排行榜,Redis提供了列表和有序集合的结构,合理使用这些数据结构能够很方便的构造出各种排行榜系统

计数器应用 

例如视频的播放次数、点赞、点踩、收藏之类的,每次点赞都是对其数据做加1的操作。这种次数十分频繁的事情对于传统关系型数据库的性能是一种挑战,Redis天然支持计数功能并且性能也非常好,可以说是计数器系统的重要选择

Redis不能做什么 

每个技术都有自己的应用场景,Redis并不是万金油~~

Redis的数据是存放在内存中的,如果数据量非常大,例如每天有几千万的用户行为数据,使用Redis来存储的话基本就是一个无底洞,这是挑战内存极限的活

数据也分为冷数据和热数据,如果将冷数据放在Redis中的话,基本上就是一种对内存资源的浪费,而热资源放在Redis中的话就能够很好的加快用户的读取效率,可以大大减轻后端存储的负载 

结尾总结 

Redis是一门基于KV的NoSQL数据库,它把数据存储在内存上的策略能够达到非常高的读写速度,但同样也有局限性,需要结合实际场景来使用 

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pythoncjavac++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值