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 存储系统,拥有缓存,数据库,消息中间件等多种功能,支持多种数据类型,支持集群高可用。
关于这个问题,其实我也曾深感疑惑,先说Redis基于内存存储,然后支持String,Hash,List,Set,ZSet 这一点,速度快。
难道这就是我们使用它的理由么?
如果只是这样,那和在我们的应用程序中直接使用JDK 自带的String, List,Set 等集合在内存中使用又有何不同呢?
直到我粗略地读完这本书之后,才有所感悟。
一方面,Redis 随着微服务的兴起,成为非常著名和强大的分布式共享内存存储系统。
拥有了redis,两个微服务就可以实现跨进程内存共享,而且支持快速动态扩容,如果使用了redis的云服务的话。
另一方面redis 封装了大量的数据结构和算法,强大到可以满足各种复杂场景的业务需求,可以让需求实现更简单。
PS:找不到这本书的扫码加入星球,私聊我。
先说结论:
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引入的一种新数据类型,是一个新的强大的支持多播的可持久化的消息队列那么Redis 的使用场景有那些呢?
重点:
String类型可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512MRedis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。这与我们熟知的在一个关系数据库实例中可以创建多个数据库类似,所以可以将其中的每个字典都理解成一个独立的数据库。