跟着官网学Redis之初识Redis

1. 跟着官网学Redis之初识Redis

1.1 什么是Redis?

Redis如今在Java后端开发圈子中可谓是家喻户晓的“红人”,那么到底什么是Redis呢?

我们先来看下官网的介绍:https://redis.io/

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting,
LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster。

谷歌翻译后内容如下:

  • Redis是一种开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理
  • 它支持数据结构,例如String字符串,Hashes哈希,Lists 列表,Sets 集合,带范围查询的ZSets (排序集合),bitmap,hyperloglogs(超日志),带有半径查询和流的地理空间索引(GEO坐标算法索引查询)。
  • Redis具有内置的复制,Lua脚本,LRU逐出,事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区提供高可用性。

总结就是:

Redis 是基于内存的K-V 存储系统,拥有缓存,数据库,消息中间件等多种功能,支持多种数据类型,支持集群高可用。

1.2 为什么用Redis?

关于这个问题,其实我也曾深感疑惑,先说Redis基于内存存储,然后支持String,Hash,List,Set,ZSet 这一点,速度快。

难道这就是我们使用它的理由么?

如果只是这样,那和在我们的应用程序中直接使用JDK 自带的String, List,Set 等集合在内存中使用又有何不同呢?

直到我粗略地读完这本书之后,才有所感悟。

一方面,Redis 随着微服务的兴起,成为非常著名和强大的分布式共享内存存储系统。

拥有了redis,两个微服务就可以实现跨进程内存共享,而且支持快速动态扩容,如果使用了redis的云服务的话。

另一方面redis 封装了大量的数据结构和算法,强大到可以满足各种复杂场景的业务需求,可以让需求实现更简单。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

PS:找不到这本书的扫码加入星球,私聊我。

1.3 Redis 到底支持几种数据类型?

先说结论:

Redis 5.0 版本之后Redis 支持的数据类型已经从过去的5种增加到了9种:strings(字符串),hashes(哈希),lists(列表),sets(集合)及sorted sets(有序集合),bitmaps,hyperloglogs,geospatial indexes,streams。

如果不信的话,打开官网我们可以看到介绍中有这么一句话:

It supports data structures such as strings, hashes, lists, sets,sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams

从上面我们可以看出,除了之前的strings(字符串),hashes(哈希),lists(列表),sets(集合)及sorted sets(有序集合) 5种基础数据类型之外,Redis 还开始支持bitmaps,hyperloglogs,geospatial indexes和stream 类型,每种数据结构都适用于解决特定的问题。

总结表如下:

数据类型描述
strings二进制安全的字符串
Hashes由键值对组成。适合存储对象型数据。Redis中的每个hash可以存储 2^32个键值对,键值都是字符串的哈希表
Lists基于Linked List实现,插入顺序排序的字符串元素集合。基本是链表。
Sets无序不重复集合
Sorted sets(zset)也是有序不重复集合,不过不同的是每个元素都会关联一个double类型的分数并通过score进行排序。
bitmapsbitmaps不是实际的数据类型,而是在String类型上定义的一组面向位的操作。由于字符串是二进制安全的,最大长度是512MB,转换成位可以设置 2^32不同的位。位图的最大优点之一,存储信息时可以节省大量空间。 bitmaps(可以实现类似布隆过滤器的功能结构),
hyperloglogs是用来做基数统计的算法。用于估计一个set中元素数量的概率性的数据结构
geospatial indexes地理空间索引
StreamsRedis 5.0引入的一种新数据类型,是一个新的强大的支持多播的可持久化的消息队列

1.4 Redis的使用场景有哪些?

那么Redis 的使用场景有那些呢?

在这里插入图片描述
在这里插入图片描述

重点:

  • String类型可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M
  • Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。这与我们熟知的在一个关系数据库实例中可以创建多个数据库类似,所以可以将其中的每个字典都理解成一个独立的数据库。

1.5 Redis 的优缺点

优点缺点
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。一个键最大能存储512M
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。如果使用不当可能造成内存撑爆,系统崩溃,CPU 负载过高。
原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。-
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。-

1.6 Redis与其他的mongo DB 等key-value 存储引擎有什么不同?

  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。
  • Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。
  • 在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。
  • 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

2. 参考资料

技术宅星云 CSDN认证博客专家 Java MySQL Redis
技术宅星云(网名),英文名fairy,先后曾在惠普,北京中国航信工作, 目前担任北京蛙跳科技有限公司后端高级开发工程师,负责公司短视频App应用后台,擅长JAVA后端技术,CSDN博客专家。
©️2020 CSDN 皮肤主题: 终极编程指南 设计师:CSDN官方博客 返回首页
实付 59.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值