第一部分:Redis数据库的简介与应用

本文深入介绍了Redis数据库,作为NoSQL数据库的一种,Redis以其高性能、灵活的数据模型在海量数据处理中发挥作用。内容涵盖Redis的基础概念、应用场景,如缓存、排行榜、计数器等,并详细解析了String、List、Hash、Set和ZSet等多种数据类型的使用场景,如会话缓存、消息队列、社交网络功能等。此外,还探讨了Redis在分布式锁和分布式会话中的应用。
摘要由CSDN通过智能技术生成


以下是本篇文章正文内容,如有错误麻烦请指出。 谢谢 !!!


一、Redis简介

1、NoSql 数据库

  1. NoSQL: 即 Not-Only SQL( 泛指非关系型的数据库),作为关系型数据库的补充。
  2. 作用: 应对基于海量用户和海量数据前提下的数据处理问题。
  3. 特征:
    (1)可扩容,可伸缩
    (2)大数据量下高性能
    (3)灵活的数据模型
    (4)高可用
  4. 常见 Nosql 数据库:
    (1)Redis
    (2)memcache
    (3)HBase
    (4)MongoDB

2、不同数据库应对场景介绍

  • 解决方案(电商场景)
    在这里插入图片描述

3、Redis相关介绍

  • 角色: Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件

  • 概念: Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。

  • 特征:
    (1)数据间没有必然的关联关系
    (2)内部采用单线程机制进行工作
    (3)高性能。官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是81000次/s。

  • 支持多种类型的数据结构(常用的五种数据结构):

  • 字符串类型 String:

  1. String 是 Redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value;
  2. String 类型是二进制安全的,意思是 Redis 的 String 可以包含任何数据。比如 jpg 图片或者序列化的对象;
  3. String 类型是 Redis 最基本的数据类型,String 类型的值最大能存储 512MB。
  • 列表类型 List
  1. Redis 列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部(左边)或者尾部(右边)。
  • 散列类型 Hash
  1. Redis hash 是一个键值(key=>value)对集合,即编程语言中的Map类型;
  2. Redis hash 是一个 string 类型的 field 和 value 的映射表。
  • 集合类型 Set
  1. Redis 的 Set 是 String 类型的无序集合,集合成员是唯一的,这就意味着集合中不能出现重复的数据;
  2. Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
  • 有序集合类型 ZSet(Sorted_Set)
  1. Redis 有序集合和集合一样也是 String类型元素的集合,且不允许重复的成员;
  2. 不同的是每个元素都会关联一个Double类型的分数;
  3. Redis正是通过分数来为集合中的成员进行从小到大的排序。
  4. 有序集合的成员是唯一的,但分数(score)却可以重复。
  • 支持多种类型的数据结构(其它数据结构):
  • Bitmaps
  • Hyperloglogs
  • 地理空间(Geospatial)索引半径查询
  • 其他特点:
  • 内置了复制(Replication)
  • LUA脚本(Lua scripting)
  • LRU驱动事件(LRU eviction)
  • 事务(Transactions)
  • 不同级别的磁盘持久化(Persistence),可以进行数据灾难恢复
  • 通过 Redis 哨兵(Sentinel)和自动分区(Cluster)提供高可用性(High Availability)

二、Redis应用场景

1、场景介绍

  • 为热点数据加速查询(主要场景),如热点商品、热点新闻、热点资讯、推广类等高访问量信息等
  • 任务队列,如秒杀、抢购、购票排队等
  • 即时信息查询,如各位排行榜、各类网站访问统计、公交到站信息、在线人数信息(聊天室、网站)、设
    备信号等
  • 时效性信息控制,如验证码控制、投票控制等
  • 分布式数据共享,如分布式集群架构中的 session 分离
  • 消息队列
  • 分布式锁

2、八种不同应用场景说明

  • 缓存

  • 缓存现在几乎是所有中大型网站都在用的必杀技,合理的利用缓存不仅能够提升网站访问速度,还能大大降低数据库的压力;

  • Redis提供了键过期功能,也提供了灵活的键淘汰策略,所以现在Redis用在缓存的场合非常多。

  • 排行榜

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

  • 计数器

  • 什么是计数器,如电商网站商品的浏览量、视频网站视频的播放数等。为了保证数据实时效,每次浏览都得给+1,并发量高时如果每次都请求数据库操作无疑是种挑战和压力。

  • Redis提供的incr命令来实现计数器功能,内存操作,性能非常好,非常适用于这些计数场景。

  • 分布式会话

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

  • 分布式锁

  • 在很多互联网公司中都使用了分布式技术,分布式技术带来的技术挑战是对同一个资源的并发访问,如全局ID、减库存、秒杀等场景,并发量不大的场景可以使用数据库的悲观锁、乐观锁来实现。但在并发量高的场合中,利用数据库锁来控制资源的并发访问是不太理想的,大大影响了数据库的性能。可以利用Redis的setnx功能来编写分布式的锁,如果设置返回1说明获取锁成功,否则获取锁失败,实际应用中要考虑的细节要更多。

  • 社交网络

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

  • 最新列表

  • Redis列表结构,LPUSH可以在列表头部插入一个内容ID作为关键字,LTRIM可用来限制列表的数量,这样列表永远为N个ID,无需查询最新的列表,直接根据ID去到对应的内容页即可。

  • 消息系统

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

3、不同数据类型应用的场景

  • 字符串类型 String:

(1)会话缓存

  • 用户登录系统后,使用Redis保存用户的Session信息,每次用户查询登录信息都直接从Redis中获取.

(2)计数器

  • 比如登录系统会限制密码错误次数,当一个用户在一定时间内连续输入密码错误,就不能登录,需要一段时间后才能登录,我们可以使用redis,把username作为key,错误的次数作为value,同时设置过期时间即可;

  • 手机验证码限收到短信的次数;

  • 统计其他计数。

(3)定时器

  • Redis的key可以设置过期时间,我们基于此特性设置一个定时器。

(4)对象

  • 我们把对象序列化后,可以使用Redis保存该对象,然后在获取对象信息的时候,反序列化value。

(5)分布式锁

  • Redis提供了setnx()方法,即SET IF NOT EXIST,只有在key不存在的时候才能set成功,这就意味着同一时间多个请求只有一个请求能保存成功,这样可以自行搜索Redis的分布式锁。

  • 列表类型 List

(1)消息队列

  • Redis的lpush+brpop命令组合即可实现阻塞队列,生产者客户端使用lrpush从列表左侧插入元素,多个消费者客户端使用brpop命令阻塞式的"抢"列表尾部的元素,多个客户端保证了消费的负载均衡和高可用性。

(2)类目/文章/活动等列表

  • 最常见的就是各个系统的首页数据,包括电商系统的商品类目,拼团活动列表,博客园的首页文章列表等。

(3)其他

  • 根据push和pop的方式不同,有以下组合方式:
    lpush + lpop = Stack() 
    lpush + rpop = Queue(队列) 
    lpush + ltrim = Capped Collection(有限集合) 
    lpush + brpop = Message Queue(消息队列) 
  • 散列类型 Hash

  • Hash 特别适合用于存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去)。

  • 集合类型 Set

(1)标签(tag)

  • 比如在点餐评价系统中,用户给某商家评价,商家会有多个评价标签,但是不会重复的,如果100万人给某商家评价打了标签,如果使用MySQL数据库获取大数据量去重后的评价标签,会影响数据库的性能和系统的并发量。

(2)相同点/异同点

  • 利用交集、并集、差集等操作,可以计算两个人的共同喜好,全部的喜好,自己独有的喜好等功能.

  • 有序集合类型 ZSet(Sorted_Set)

(1)排行榜

  • 例如博客园需要对用户发表的文章做排行榜,榜单的维度可能是多个方面的:时间、点赞数、热度,浏览数等。

对以前的知识回顾,加深基础知识!
每天进步一点点,也许某一天你也会变得那么渺小!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值