vlambda博客
学习文章列表

微服务框架【第6期】--SpringBoot整合Redis基础

微服务框架【第6期】--SpringBoot整合Redis基础

导读:

    大家好,我是老田。今天我们开始梳理SpringBoot中如何整合Redis非关系型数据库。今天还是先从基础开始,先梳理下Redis的基础命令。整个Redis部分分3个部分。

1.NOSQL简介

NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。

NoSQL属于非关系型的数据库,没有表的概念,目的只是存储数据。

2.使用NoSQL的原因

随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。比较典型的问题例如:

  • High performance - 对数据库高并发读写的需求

  • Huge Storage - 对海量数据的高效率存储和访问的需求

  • High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求

NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

3.NOSQL数据库的四大分类

  • 键值(Key-Value)存储数据库

    • 相关产品:Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB

    • 典型应用:内容缓存,主要用于处理大量数据的高访问负载。

    • 数据模型:一系列键值对

    • 优势:快速查询

    • 劣势:存储的数据缺少结构化

  • 列存储数据库相关产品:Cassandra, HBase, Riak

    • 典型应用:分布式的文件系统

    • 数据模型:以列簇式存储,将同一列数据存在一起

    • 优势:查找速度快,可扩展性强,更容易进行分布式扩展

    • 劣势:功能相对局限

  • 文档型数据库

    • 相关产品:CouchDB、MongoDB

    • 典型应用:Web应用(与Key-Value类似,Value是结构化的)

    • 数据模型:一系列键值对

    • 优势:数据结构要求不严格

    • 劣势:查询性能不高,而且缺乏统一的查询语法

  • 图形(Graph)数据库

    • 相关数据库:Neo4J、InfoGrid、Infinite Graph

    • 典型应用:社交网络

    • 数据模型:图结构

    • 优势:利用图结构相关算法。

    • 劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。

4.NOSQL和关系型数据库比较

优点:

  1. 成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。

  2. 查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。

  3. 存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。

  4. 扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。

缺点:

  1. 维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。

  2. 不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本。

  3. 不提供关系型数据库对事务的处理。

关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,让NoSQL数据库对关系型数据库的不足进行弥补。一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的数据。

5.Redis概述

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:

  1. 字符串类型

  2. 散列类型

  3. 列表类型

  4. 集合类型

  5. 有序集合类型

官方提供测试数据:50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s 。数据仅供参考,根据服务器配置会有不同结果。

Redis 优势:

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。

  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

6.Redis应用场景

  1. 缓存——热数据

    热点数据(经常会被查询,但是不经常被修改或者删除的数据)。

  2. 计数器

    诸如统计点击数等应用。由于单线程,可以避免并发问题,保证不会出错,而且100%毫秒级性能。

  3. 消息系统

    消息队列是大型网站必用中间件,如ActiveMQ、RabbitMQ、Kafka等流行的消息队列中间件,主要用于业务解耦、流量削峰及异步处理实时性低的业务。Redis提供了发布/订阅及阻塞队列功能,能实现一个简单的消息队列系统。另外,这个不能和专业的消息中间件相比。

  4. 社交网络

    点赞、踩、关注/被关注、共同好友等是社交网站的基本功能,社交网站的访问量通常来说比较大,而且传统的关系数据库类型不适合存储这种类型的数据,Redis提供的哈希、集合等数据结构能很方便的的实现这些功能。

  5. 排行榜

    很多网站都有排行榜应用的,如京东的月度销量榜单、商品按时间的上新排行榜等。Redis提供的有序集合数据类构能实现各种复杂的排行榜应用。

  6. 限流

    采用redis的key过期策略,将业务id和业务值存起来设置一定的过期时间,等请求再次进入时,如果有值,就认为是重复性请求,过滤掉

  7. 分布式会话

    集群模式下,在应用不多的情况下一般使用容器自带的session复制功能就能满足,当应用增多相对复杂的系统中,一般都会搭建以Redis等内存数据库为中心的session服务,session不再由容器管理,而是由session服务及内存数据库管理。

7.Redis命令操作

redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构

value的数据结构:

  • 字符串类型 string

    • 存储:set key value

    • 获取:get key

    • 删除:del key

  • 哈希类型 hash :map格式  

    • hget key field: 获取指定的field对应的值

    • hgetall key:获取所有的field和value

    • 存储:hset key field value

    • 获取:

    • 删除:hdel key field

  • 列表类型 list :linkedlist格式。支持重复元素

    • lpop key:删除列表最左边的元素,并将元素返回

    • rpop key:删除列表最右边的元素,并将元素返回

    • lrange key start end :范围获取

    • 添加:

    • 获取:

    • 删除:

    1. lpush key value: 将元素加入列表左边

    2. rpush key value:将元素加入列表右边

  • 集合类型 set  :不允许重复元素

    • 存储:sadd key value

    • 获取:smembers key:获取set集合中所有元素

    • 删除:srem key value:删除set集合中的某个元素

  • 有序集合类型 sortedset:不允许重复元素,且元素有顺序

    • 存储:zadd key score value

    • 获取:zrange key start end [withscores]

    • 删除:zrem key value

  • 通用命令

    • keys * : 查询所有的键

    • type key :获取键对应的value的类型

    • del key:删除指定的key value



博观而约取,厚积而薄发!


--END--