Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Redis入门概述

Redis入门概述

作者头像
百思不得小赵
发布于 2022-12-01 06:52:10
发布于 2022-12-01 06:52:10
27600
代码可运行
举报
文章被收录于专栏:小赵Java总结小赵Java总结
运行总次数:0
代码可运行

文章目录


一、NoSQL数据库

NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。它相比于传统的关系型数据库有以下几个区别:不遵循SQL标准、不支持ACID原则、它的性能远超于SQL。

适用的场景

  1. 对数据高并发的读写
  2. 海量数据的读写
  3. 对数据有较高的扩展性

不适合的场景

  1. 需要支持事务相关的操作
  2. 基于sql的结构化查询存储,处理复杂的关系,需要即时查询

最早出现的NoSql数据库叫做Memcache,它的数据都保存在内存中,需要频繁访问数据库的网站访问速度提升效果十分显著,一般不持久化,它只支持简单的key-value模式,支持类型相对单一,它的作用一般是作为缓存数据库辅助持久化的数据库。

二、Redis 概述

Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。它的数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

适用场景

场景一:配合关系型数据库做高速缓存

  • 将高频次,热门访问的数据放到缓存中,降低数据库IO,提高查询性能
  • 在分布式架构,最常见的问题就是session存在哪里,使用redis做缓存,将session数据放到redis中实现session共享。

场景二:多样的数据结构存储持久化数据

  • 最常见的网站Top N 数据、最新的N 个数据、手机验证码等等,通过Redis的数据类型结构进行持久化的存储。

Redis是单线程+多路IO复用技术

多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。

一个场景说明多路IO复用技术: 相信大家都有去火车站买票的经历,遇到节假日的时候一票难求,这时在火车站就会有一种人,可以替人买票,我们亲切的将其称之为黄牛。有了黄牛的出现,我们可以把买票的需求告诉黄牛,让黄牛帮我们购买。有一天,有三个人找到黄牛让其帮忙购票,这时黄牛去火车站买票的过程为单线程操作,如果黄牛买到了三个人中某个人的票,通知其去黄牛哪里取票即可。假设第一个人想要去上海的票,通知黄牛去买票,黄牛在买票的时候,第一个人不用一直等待,可以做自己的事情,例如:吃饭、睡觉等,等到黄牛买到票后,通知第一个人取票就可。其他两个人也类似,也就是说这三个人都是在买票,但是在没有买到票的时候一直在干活,CPU一直处于工作状态,这个过程就是多路IO复用

与Redis不同的是Memcache底层采用的是多线程+锁进行实现的。

三、在Linux环境下安装Redis

安装步骤

第一步:下载Redis(我下载的是6.2.7版本)

点击进入Redis官方下载网页

第二步:测试 gcc版本 (安装redis依赖gcc)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gcc --version

如果没有gcc的话通过如下命令进行安装C语言编译环境

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum install centos-release-scl scl-utils-build
yum install -y devtoolset-8-toolchain
scl enable devtoolset-8 bash

第三步:解压下载的Redis tar.gz文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar -zxvf xxx

第四步:进入解压后的文件 执行make命令进行编译

第五步:继续执行: make install

安装成功后会默认安装到/usr/local/bin路径

  • redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何
  • redis-check-aof:修复有问题的AOF文件,rdb和aof后面讲
  • redis-check-dump:修复有问题的dump.rdb文件
  • redis-sentinel:Redis集群使用
  • redis-server:Redis服务器启动命令
  • redis-cli:客户端,操作入口

前台启动(不建议)

前台启动,命令行窗口不能关闭,否则服务器停止

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
redis-server

后台启动(推荐)

  • 备份redis.conf,拷贝一份redis.conf到其他目录
  • 台启动设置daemonize no改成yes
  • Redis启动
  • 用客户端访问:redis-cli
  • .Redis关闭

四、Redis配置文件解析

  • 配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit。
  • 类似jsp中的include,多实例的情况可以把公用的配置文件提取出来
  • 默认情况bind=127.0.0.1只能接受本机的访问请求不写的情况下,无限制接受任何ip地址的访问,生产环境肯定要写你应用服务器的地址;服务器是需要远程访问的,所以需要将其注释掉
  • 将本机访问保护模式设置no
  • 默认端口号为:6379
  • 一个空闲的客户端维持多少秒会关闭,0表示关闭该功能,即永不关闭。
  • 是否为后台进程,设置为yes,守护进程,后台启动
  • 存放pid文件的位置,每个实例会产生一个不同的pid文件
  • 设定库的数量 默认16,默认数据库为0,可以使用SELECT <dbid>命令在连接上指定数据库id
  • 设置redis可以使用的内存量。一旦到达内存使用上限,redis将会试图移除内部数据.
  • 建议必须设置,否则,将内存占满,造成服务器宕机
  • 设置redis同时可以与多少个客户端进行连接。默认情况下为10000个客户端。
  • 如果达到了此限制,redis则会拒绝新的连接请求,并且向这些连接请求方发出“max number of clients reached”以作回应。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CompletableFuture 使用详解
没有指定Executor的方法会使用ForkJoinPool.commonPool() 作为它的线程池执行异步代码。如果指定线程池,则使用指定的线程池运行。以下所有的方法都类同。
java404
2018/10/10
4.1K1
【小家java】Java8新特性之---CompletableFuture的系统讲解和实例演示(使用CompletableFuture构建异步应用)
传统单线程环境下,调用函数是同步的,必须等待程序返回结果后,才可进行其他处理。因此为了提高系统整体的并发性能,引入了异步执行~
YourBatman
2019/09/03
3.9K0
【小家java】Java8新特性之---CompletableFuture的系统讲解和实例演示(使用CompletableFuture构建异步应用)
CompletableFuture学习
前面我们已经知道CompletionService是可以解决Future带来的阻塞问题的,同时我们除了前面我们看到的take方法之外,还可以使用poll方法,这样可以使你的程序免受阻塞之苦。因为poll方法也是无阻塞性的。同时在kafka的源码中,我们如果使用消费者的话,可以看到会使用一个基于future的poll方法。同时我们可以在dubbo的新版本2.7中,可以看到其异步编程采用的就是我们要介绍的CompletableFuture。因此,我们有必要了解CompletableFuture,同时其也是真正意义上的异步编程的实现。
路行的亚洲
2020/07/16
1.1K0
CompletableFuture 应用实践
首先来看一个问题,如果要执行多个任务,每个任务会返回对应结果,现在需要所有任务执行完毕之后,将这些任务结果统一打印出来,该如何完成呢?注意尽量不要使用业务线程来等待多个任务的结果,也就是不要使用Future.get方式。
luoxn28
2020/12/02
6920
CompletableFuture 应用实践
Java8新的异步编程方式 CompletableFuture(二)
上一篇文章,讲述了Future模式的机制、缺点,CompletableFuture产生的由来、静态工厂方法、complete()方法等等。
fengzhizi715
2018/08/24
1.4K0
Java8新的异步编程方式 CompletableFuture(三)
前面两篇文章已经整理了CompletableFuture大部分的特性,本文会整理完CompletableFuture余下的特性,以及将它跟RxJava进行比较。
fengzhizi715
2018/08/24
2.5K0
阅读 Flink 源码前必会的知识 - Java 8 异步编程 CompletableFuture 全解析
通常来说,程序都是顺序执行,同一时刻只会发生一件事情。如果一个函数依赖于另一个函数的结果,它只能等待那个函数结束才能继续执行,从用户角度来说,整个程序才算执行完毕。
kk大数据
2021/03/13
1.1K0
并发编程 - CompletableFuture
常见的线程创建方式有两种,一是直接继承Thread,另一种是实现Runnable接口。但这两种方式有个缺点,不支持获取线程执行结果。
小小工匠
2023/08/02
3400
并发编程 - CompletableFuture
基础篇:异步编程不会?我教你啊!CompeletableFuture
以前需要异步执行一个任务时,一般是用Thread或者线程池Executor去创建。如果需要返回值,则是调用Executor.submit获取Future。但是多个线程存在依赖组合,我们又能怎么办?可使用同步组件CountDownLatch、CyclicBarrier等;其实有简单的方法,就是用CompletableFuture
潜行前行
2020/12/11
8040
基础篇:异步编程不会?我教你啊!CompeletableFuture
搞定 CompletableFuture,并发异步编程和编写串行程序还有什么区别?你们要的多图长文
你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it well enough
用户4172423
2020/07/21
1.2K0
【Java多线程-5】 CompletableFuture详解
Future 是Java 5添加的类,用来描述一个异步计算的结果。前文中,我们领略了 Future 的便利,但它还是存在诸多不足,比如:
云深i不知处
2020/09/16
4K0
CompletableFuture介绍
一个Future类是显示的完成,而且能被用作一个完成等级,通过它的完成触发支持的依赖函数和行为。当两个或多个线程要执行完成或取消操作时,只有一个能够成功。
HLee
2021/07/12
2.1K0
CompletableFuture介绍
异步神器CompletableFuture
上个礼拜我们线上有个接口比较慢,这个接口在刚开始响应时间是正常的。但随着数据量的增多,响应时间变慢了。
Java识堂
2020/09/14
1.2K0
【第十四篇】商城系统-异步处理利器-CompletableFuture
  上面的三种获取线程的方法是直接获取,没有对线程做相关的管理,这时可以通过线程池来更加高效的管理线程对象。
用户4919348
2022/10/04
3810
【第十四篇】商城系统-异步处理利器-CompletableFuture
线程、线程池以及CompletableFuture组合式异步编程
所有Executors框架提供的线程池底层均为java.util.concurrent.ThreadPoolExecutor
shimeath
2021/01/05
7170
Future模式
  【1】Future模式是多线程开发中常见的设计模式,它的核心思想是异步调用。对于Future模式来说,它无法立即返回你需要的数据,但是它会返回一个契约,将来你可以凭借这个契约去获取你需要的信息。
忧愁的chafry
2022/10/30
7140
Future模式
Java8 CompletableFuture 编程
 所谓异步调用其实就是实现一个无需等待被调用函数的返回值而让操作继续运行的方法。在 Java 语言中,简单的讲就是另启一个线程来完成调用中的部分计算,使调用继续运行或返回,而不需要等待计算结果。但调用者仍需要取线程的计算结果。
JMCui
2019/08/18
1.1K0
从 CompletableFuture 到异步编程
JDK 5 引入了 Future 模式。Future 接口是 Java 多线程 Future 模式的实现,在 java.util.concurrent 包中,可以来进行异步计算。虽然 Future 以及相关使用方法提供了异步执行任务的能力,但是对于结果的获取却是很不方便,只能通过阻塞或者轮询的方式得到任务的结果。阻塞的方式显然和我们的异步编程的初衷相违背,轮询的方式又会耗费无谓的 CPU 资源,而且也不能及时地得到计算结果,为什么不能用观察者设计模式当计算结果完成及时通知监听者呢?如 Netty、Guava 分别扩展了 Java 的 Future 接口,方便异步编程。
BUG弄潮儿
2021/04/12
1.3K0
JUC并发—14.Future模式和异步编程分析二
CompletionStage表示任务执行的一个阶段,每个异步任务都会返回一个新的CompletionStage对象,可针对多个CompletionStage对象进行串行、并行、聚合等操作。简单来说,CompletionStage就是实现异步任务执行后的自动回调功能。
东阳马生架构
2025/05/07
740
异步技巧之CompletableFuture
在上面的注释中我们能知道Future用来代表异步的结果,并且提供了检查计算完成,等待完成,检索结果完成等方法。简而言之就是提供一个异步运算结果的一个建模。它可以让我们把耗时的操作从我们本身的调用线程中释放出来,只需要完成后再进行回调。就好像我们去饭店里面吃饭,不需要你去煮饭,而你这个时候可以做任何事,然后饭煮好后就会回调你去吃。
用户5397975
2019/10/13
8660
相关推荐
CompletableFuture 使用详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验