Redis(1)

初识Redis

揆诸现实,Redis是众多公司使用的工具,本篇将带大家进入Redis的世界,了解它的前世今生,众多特性,典型应用场景,安装配置,如何用好等,最后会对Redis发展过程中的重要版本进行说明.

盛赞Redis

Redis的初心,最初就是用来作为一个"消息中间件"的消息队列(消息队列).也就是之前我们在多线程中讲到的分布式系统下的生产者消费者模型. 当前很少会直接使用Redis作为消息中间件(业界会又更多专业的中间件使用).

而现在Redis基本都是作为一个基于键值对的NoSQL数据库,与很多键值对数据库不同的是,Redis中的值可以是由string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合),Bitmaps(位图)等多种数据结构和算法组成,因此Redis可以满足很多的应用场景.

Redis和MySQL

MySQL最大的问题在于,访问速度比较慢,很多互联网产品中,对于性能要求是很高. 而Redis作为数据库使用,它的最大的优势就是--快!!(定性的角度,可以知道Redis快很多,但是很难定量衡量). 但和MySQL相比,最大的劣势,是它的存储空间是有限的. 虽然有不少互联网产品,对于性能的要求比较高的.更多的互联网产品对于性能要求没那么高.

而Redis是在分布式系统中,才能发挥威力的.如果只是单机程序,直接通过变量存储数据的方式,是比Redis更优的选择.(Redis就是基于网络,可以把自己内存中的变量给别的进程,甚至别的主机使用).

Redis特性

Redis之所以受到如此多公司的青睐,必然有其过人之处,下面介绍一下Redis的重要特性.

速度快

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

1.Redis的所有数据都是存放在内存中的,就比访问硬盘的数据库要快很多.

2.Redis核心功能都是比较简单的逻辑,核心功能都是比较简单的操作内存的数据结构.

3.从网络角度上,Redis使用了IO多路复用的方式(使用一个线程,管理很多个socket~)

4.Redis使用的是单线程模型,减少了不必要的线程之间的竞争开销 .(有人可能会问,多线程不是更快吗? 实际上,多线程提高效率的前提是,CPU密集型的任务. 使用多个线程可以充分利用CPU多核资源. 但是Redis的核心任务,主要就是操作内存的数据结构,不会吃很多CPU).

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

MySQL主要是通过"表"的方式来存储组织数据的.属于"关系型数据库".

Redis主要是通过"键值对"的方式来存储组织数据的.属于"非关系型数据库".

丰富的功能

Redis还提供了许多额外的功能.

提供了键过期功能,可以用来实现缓存.

提供了发布订阅功能,可以用来实现消息系统.

支持Lua脚本功能,可以利用Lua创造出新的Redis命令.

提供了简单的事务功能,能在一定程度上保证事务的特性.

提供了流水线功能,这样客户端能将一批命令一次性传到Redis,减少了网络的开销.

简单稳定

Redis的简单主要表现在三个方面.首先,Redis的源码很少,早期版本的代码只有2万行左右,3.0版本以后由于添加了集群特性,代码增至5万行左右.相对于很多的NoSQL数据库来说代码量相对要少很多,也就意味着它很容易被"吃透". 其次,Redis使用单线程模型,这样不仅使得Redis服务端处理模型变得简单, 而且也使得客户端开发变得简单.最后, Redis不需要依赖于操作系统中的类库,Redis自己实现了事件处理的相关功能.

但与简单相对的是Redis具备相当的稳定性,在大量使用的过程中,很少出现因为Redis自身BUG而宕掉的情况.

客户端语言多

Redis提供了简单的TCP通信协议,很多编程语言可以很方便地接入Redis,并且由于Redis受到广泛的认可,所以支持Redis的客户端语言也很多,几乎涵盖了主流的编程语言.

持久化(Persistence)

Redis是把数据存储在内存上的,而内存的数据是"易失"的.(由于进程退出/系统重启可能会导致丢失). 因此Redis会把数据存储在硬盘上. 内存为主,硬盘为辅.(硬盘相当于对内存的数据备份了一下).如果Redis重启了,就会在重启时加载硬盘中的备份数据,使Redis的内存恢复到重启前的状态.

主从复制

Redis提供了复制功能,实现了多个相同数据的Redis副本.复制功能是分布式Redis的基础.后续我们会对Redis的复制功能详细讲解. 主从服务架构如下:

从结点就相当于主节点的备份了.

**Redis可以做什么?**先不着急继续深入,让我们移步到分布式系统的演化来了解,敬请期待!

相关推荐
G_whang39 分钟前
centos7下docker 容器实现redis主从同步
redis·docker·容器
一个程序员_zhangzhen40 分钟前
sqlserver新建用户并分配对视图的只读权限
数据库·sqlserver
zfj32143 分钟前
学技术学英文:代码中的锁:悲观锁和乐观锁
数据库·乐观锁··悲观锁·竞态条件
吴冰_hogan1 小时前
MySQL InnoDB 存储引擎 Redo Log(重做日志)详解
数据库·oracle
.生产的驴1 小时前
SpringBoot 对接第三方登录 手机号登录 手机号验证 微信小程序登录 结合Redis SaToken
java·spring boot·redis·后端·缓存·微信小程序·maven
nbsaas-boot1 小时前
探索 JSON 数据在关系型数据库中的应用:MySQL 与 SQL Server 的对比
数据库·mysql·json
cmdch20171 小时前
Mybatis加密解密查询操作(sql前),where要传入加密后的字段时遇到的问题
数据库·sql·mybatis
程序员学习随笔1 小时前
PostgreSQL技术内幕21:SysLogger日志收集器的工作原理
数据库·postgresql
Sun_12_21 小时前
SQL注入(SQL lnjection Base)21
网络·数据库
秦时明月之君临天下1 小时前
PostgreSQL标识符长度限制不能超过63字节
数据库·postgresql