跟着官网学Redis之初识Redis

    科技2024-10-09  22

    跟着官网学Redis之初识Redis

    1. 跟着官网学Redis之初识Redis1.1 什么是Redis?1.2 为什么用Redis?1.3 Redis 到底支持几种数据类型?1.4 Redis的使用场景有哪些?1.5 Redis 的优缺点1.6 Redis与其他的mongo DB 等key-value 存储引擎有什么不同? 2. 参考资料

    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图片或者序列化的对象,一个键最大能存储512MRedis是一个字典结构的存储服务器,而实际上一个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. 参考资料

    Redis 官网Redis 菜鸟教程Redis5.0支持的九种数据类型及使用场景整理- Redis学习对redis的新认知 九种数据类型 技术宅星云 认证博客专家 Java Spring MySQL 技术宅星云(网名),英文名fairy,博客专家,先后曾在外企惠普,央企中航信工作, 目前担任北京蛙跳科技有限公司后端高级开发工程师,负责公司短视频应用后台,擅长JAVA后端技术.
    Processed: 0.014, SQL: 8