大数据技术之Redis

203 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第 3 天,点击查看活动详情

Redis 是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。这篇文章我们主要讲述一下NoSQL数据库的概念以及Redis的基础知识。

1. NoSQL数据库

NoSQL,泛指非关系型数据库,是 Not only SQL 的缩写,大意为“不仅仅是SQL”,说明这项技术是传统关系型数据库的补充而非替代。在整个NoSQL技术栈中MemCache、Redis、MongoDB被称为NoSQL三剑客。NoSQL数据库的产生是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。我们和关系型数据库来做个对比。

image.png

基于此,我们可以得出结论:NoSQL数据库 的最大优势为 高性能、高可用性 和 可伸缩性

2. Redis简介

整个NoSQL技术栈中MemCache、Redis、MongoDB被称为NoSQL三剑客,我们这篇文章主要说一下 Redis。

2.1 概念

Redis 是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串(strings)散列(hashes)列表(lists)集合(sets)有序集合(sorted sets)范围查询bitmapshyperloglogs地理空间(geospatial)索引半径查询

Redis 内置了复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的磁盘持久化(persistence), 并通过Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(high availability)。

2.2 应用场景

1)缓存

使用Redis可以建立性能非常出色的缓存服务器,查询请求先在Redis中查找所需要的数据,如果能够查询到(命中)则直接返回,大大减轻关系型数据库的压力。

2)数据临时存储位置

使用token(令牌)作为用户登录系统时的身份标识,这个token就可以在Redis中临时存储。

3)分布式环境下解决 Session 不一致问题时的 Session库

Spring提供了一种技术解决分布式环境下Session不一致问题,叫SpringSession。而Redis就可以为SpringSession提供一个数据存储空间。

4)流式数据去重

在Redis中有一种数据类型是Set,和Java中的Set集合很像,不允许存储重复数据。借助这个特性我们可以在Redis中使用Set类型存储流式数据达到去重的目的。

3. Redis常用的数据结构

3.1 总体结构

Redis中的数据,总体上是键值对,不同数据类型指的是 键值对 中 值的类型

KeyValue
String
List
Set
Hash
Zset

3.2 String 类型

Redis中最基本的类型,它是key对应的一个单一值。二进制安全,不必担心由于编码等问题导致二进制数据变化。所以redis的string可以包含任何数据,比如jpg图片或者序列化的对象。Redis中一个字符串值的最大容量是512M。

3.3 List类型

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。说明它的底层是基于链表实现的,所以它操作时头尾效率高,中间效率低。

image.png

3.4 Set类型

Redis的Set是String类型的无序集合。它是基于哈希表实现的。

3.5 Hash类型

本身就是一个键值对集合。可以当做Java中的Map<String,String>对待。

3.6 ZSet类型

Redis ZSet 和 Set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。