首页 > 数据库 >Redis基础

Redis基础

时间:2023-08-21 21:47:05浏览次数:30  
标签:缓存 队列 Redis 数据库 基础 访问 内存

什么是Redis?

Redis 是一个基于C语言开发的开源数据库,与传统数据库不同的是Redis的数据是存在内存中的,所以他又被叫做内存数据库,他的读写速度非常快,被广泛的应用于缓存方向。并且,Redis存储的是key,value键值对数据。

为了满足不同的业务场景,Redis内置了多种数据类型实现(比如String,Hash、SortedSet、Bitmap、HyperLog、GEO)。并且,Redis还支持事务、持久化、Lua脚本、多种开箱即用的集群方案(Redis Sentinel、Redis Cluster)。

Redis没有外部依赖,Linux和OSX是Redis开发和测试最多的两个操作系统,官方推荐生产环境使用Linux部署Redis。

Redis 为什么这么快?

Redis 内部做了非常多的性能优化,比较重要的有下面 3 点:

  1. Redis 基于内存,内存的访问速度是磁盘的上千倍;
  2. Redis 基于 Reactor 模式设计开发了一套高效的事件处理模型,主要是单线程事件循环和 IO 多路复用;
  3. Redis 内置了多种优化过后的数据结构实现,性能非常高。

为什么要用 Redis/为什么要用缓存?

下面我们主要从“高性能”和“高并发”这两点来回答这个问题。

1、高性能

假如用户第一次访问数据库中的某些数据的话,这个过程是比较慢,毕竟是从硬盘中读取的。但是,如果说,用户访问的数据属于高频数据并且不会经常改变的话,那么我们就可以很放心地将该用户访问的数据存在缓存中。

这样有什么好处呢?

那就是保证用户下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。

2、高并发

一般像 MySQL 这类的数据库的 QPS 大概都在 1w 左右(4 核 8g) ,但是使用 Redis 缓存之后很容易达到 10w+,甚至最高能达到 30w+(就单机 Redis 的情况,Redis 集群的话会更高)。(QPS(Query Per Second):服务器每秒可以执行的查询次数)

由此可见,直接操作缓存能够承受的数据库请求数量是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。进而,我们也就提高了系统整体的并发。

Redis 除了做缓存,还能做什么?

  • 分布式锁:通过 Redis 来做分布式锁是一种比较常见的方式。通常情况下,我们都是基于 Redisson 来实现分布式锁。
  • 限流:一般是通过 Redis + Lua 脚本的方式来实现限流。
  • 消息队列:Redis 自带的 list 数据结构可以作为一个简单的队列使用。Redis 5.0 中增加的 stream 类型的数据结构更加适合用来做消息队列。它比较类似于 Kafka,有主题和消费组的概念,支持消息持久化以及 ACK 机制。(Redis可以做消息队列,但不建议使用 Redis 来做消息队列。和专业的消息队列相比,还是有很多欠缺的地方。)
  • 延时队列:Redisson 内置了延时队列(基于 sorted set 实现的)。
  • 分布式 Session :利用 string 或者 hash 保存 Session 数据,所有的服务器都可以访问。
  • 复杂业务场景:通过 Redis 以及 Redis 扩展(比如 Redisson)提供的数据结构,我们可以很方便地完成很多复杂的业务场景比如通过 bitmap 统计活跃用户、通过 sorted set 维护排行榜。

标签:缓存,队列,Redis,数据库,基础,访问,内存
From: https://www.cnblogs.com/zcj-gh/p/17647158.html

相关文章

  • SVN工具基础知识
    SVN工具基础知识1、简介1、全称Subversion,是一个开放源代码的版本控制系统,Subversion在2000年由CollabNetInc开发,现在发展成为Apache软件基金会的一个项目,同样是一个丰富的开发者和用户社区的一部分。SVN是一个开放源代码的版本控制系统,管理着随时间改变的数据。这些数......
  • Maven基础知识
    Maven基础知识1、简介1、Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。Maven除了以程序构建能力为特色之外,还提供高级项目管理工具。由于Maven的缺省构建规则有较高的可重用性,所以2、常常用两三行Maven构建脚本就可以构建......
  • iOS开发Swift-基础部分
    1.常量letmaxNum=10//单个常量赋值letmaxNum=10,minNum=2//多个常量赋值用逗号隔开2.变量varx=0.0//单个变量赋值varx=0.0,y=0.1//多个变量赋值用逗号隔开3.类型注解系统可通过赋初始值进行自动推断。varname:String//冒号(:)......
  • SQL注入基础学习3
    SQL注入基础学习3二、靶场实操(开始先学习手工,后面的话,可以采用sqlmap等自动化工具)靶场采用sqli-labs8、第8关第八关只能采用盲注的方法,页面也不显示任何报错的信息。可以采用时间盲注或布尔盲注。测试是否存在注入点。页面输入)'时,页面无显示,说明可能存在注入点。后面的......
  • JavaScript基础之基于数据类型和引用数据类型
    数据类型JavaScript的数据类型有7中,包括6个基本类型和一个引用类型基本数据类型:number,string,boolean,null,undefined,symbol引用数据类型:object(数组、对象、函数、正则等)基本数据类型和引用数据类型的区别存储方式基本类型:基本数据类型的值直接存储在改变量所分配的内存......
  • C++基础-STL stack 栈
    stack栈1、特性在一端插入元素,在同一端删除元素,具有先进后出的特性。底层实现一般用list或deque,封闭头部即可,数据先进后出,不支持随机访问。2、适用情况需要一个先进后出结构时3、头文件#include<stack>4、复杂度插入:push(),O(1)删除:pop(),O(1)查找(栈顶):top(),O(1)5、定义及常用......
  • 高频SQL 50题(基础版): 学生们参加各科测试的次数 | 2023-08-21
    问题学生表:Students+---------------+---------+|ColumnName|Type|+---------------+---------+|student_id|int||student_name|varchar|+---------------+---------+在SQL中,主键为student_id(学生ID)。该表内的每一行都记录有学校一名学生......
  • 软件测试|Linux基础教程:ln命令与软链接和硬链接
    简介在Linux系统中,ln命令是一个非常有用的工具,用于创建链接(link),将一个文件或目录链接到另一个位置。链接允许一个文件或目录可以同时存在于多个位置,而不会占用额外的磁盘空间。ln命令支持创建硬链接和软链接两种类型的链接。本文将详细介绍Linux中ln命令的用法、语法以及两种链接类......
  • SpringBoot复习:(48)RedisAutoConfiguration自动配置类
    RedisAutoConfiguration类代码如下:可以看到在这个类中配置了2个bean:redisTemplate和stringRedisTemplate.而它通过@EnableConfigurationProperties(RedisProperties.class)注解,把配置文件中配置的Redis相关的信息引入进来了,RedisProperties代码如下:还可以看到RedisAutoConfigu......
  • CSS基础-定位
    CSS中通常使用position属性,决定元素的定位方式。常用的定位方式通常有值意义relative相对定位absolute绝对定位fixed固定定位相对定位position设置为relative。相对定位是元素相对于自己原来的位置通过使用top、left等属性进行移动,使其显示在新的位......