【Redis入门到精通一】什么是Redis?

news/2024/9/18 2:22:36/ 标签: redis, 数据库, 缓存

目录

 

Redis 

1. Redis的背景知识

2.Redis特性

3.Redis的使用场景

4.Ubuntu上安装配置Redis


 

Redis 

Redis在当今编程技术中的地位可以说非常重要,大多数互联网公司内部都在使用这个技术,熟练使用Redis已经成为开发人员的一个必备技能。本章将带领读者进⼊ Redis 的世界,了解它的前世今⽣、众多特性、典型应⽤场景、安装配置等。

1. Redis的背景知识

Redis 是⼀种基于键值对(key-value)的 NoSQL 数据库,与很多键值对数据库不同的是,Redis中的值可以是由 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此 Redis可以满⾜很多的应⽤场景,⽽且因为 Redis 会将所有数据都存放再内存中,所以它的读写性能⾮常惊⼈。不仅如此,Redis 还可以将内存的数据利⽤快照和⽇志的形式保存到硬盘上,这样在发⽣类似断电或者机器故障的时候,内存中的数据不会“丢失”。除了上述功能以外,Redis 还提供了键过期、发布订阅、事务、流⽔线、Lua 脚本等附加功能。
2008 年,Redis 的作者 Salvatore Sanfilippo 在开发⼀个叫 LLOOGG 的⽹站时,需要实现⼀个⾼性能的队列功能,最开始是使⽤ MySQL 来实现的,但后来发现⽆论怎么优化 SQL 语句等都不能使⽹站的性能提⾼上去,再加上⾃⼰囊中羞涩,于是他决定⾃⼰做⼀个专属于 LLOOGG 的数据库,这个就是 Redis 的前⾝。后来,Salvatore Sanfilippo 将 Redis 1.0 的源码发布到 Github 上,可能连他⾃⼰都没想到,Redis 后来如此受欢迎。
从 Redis 的官⽅公司统计来看,有很多重量级的公司都在使⽤Redis,如国外的 Twitter,Instagram、Stack Overflow、Github 等,国内就更多了,如果单单从体量来统计,新浪微博可以说是全球最⼤的 Redis 使⽤者,除了新浪微博,还有像阿⾥巴巴、腾讯、搜狐、优酷⼟⾖、美团、⼩⽶、唯品会等公司都是 Redis 的使⽤者。除此之外,许多开源技术像 ELK 等已经把 Redis 作为它们组件中的重要⼀环,⽽且 Redis 还提供了模块系统让第三⽅⼈员实现功能扩展,让 Redis 发挥出更⼤的威⼒。

2.Redis特性

(1)速度快

官⽅给出的数字是读写性能可以达到 10 万 / 秒,为什么Redis能保证速度这么快呢?
  1. Redis 的所有数据都是存放在内存中的,把数据放在内存中是 Redis 速度快的最主要原因。
  2. Redis 是⽤ C 语⾔实现的,⼀般来说 C 语⾔实现的程序 “距离” 操作系统更近,执⾏速度相对会更快。
  3. Redis 使⽤了单线程,预防了多线程可能产⽣的竞争问题。
  4. 作者对于 Redis 源代码可以说是精打细磨,曾经有⼈评价 Redis 是少有的集性能和优雅于⼀⾝的开源代码。

(2)基于键值对的数据结构服务器

Redis 的全称是 REmote Dictionary Server,与其他语言中键值对功能不同的是Redis 中的值不仅可以是字符串,⽽且还可以是具体的数据结构,Redis官方文档提供了十种数据结构,常见的有字符串,哈希,列表,集合,有序集合等。
(3)丰富的功能
  • 提供了键过期功能,可以⽤来实现缓存
  • 提供了发布订阅功能,可以⽤来实现消息系统。
  • ⽀持 Lua 脚本功能,可以利⽤ Lua 创造出新的 Redis 命令。
  • 提供了简单的事务功能,能在⼀定程度上保证事务特性。
  • 提供了流⽔线(Pipeline)功能,这样客⼾端能将⼀批命令⼀次性传到 Redis,减少了⽹络的开销。

 (4)简单稳定

Redis简单稳定有三方面的原因:

  1. Redis的源码很少,可以被大多数资深的程序员给学透。
  2. Redis使用单线程模型,服务器模型简单,不会出现线程安全问题。
  3. 不需要调用操作系统中的类库,Redis自己实现了相关功能。

(5) 支持C、C++、Java、PHP、Python、NodeJS在内的多种客户端语言。

(6)可以实现Redis内存到硬盘的持久化

(7)提供了复制功能,支持主从复制

(8)支持高可用和分布式

3.Redis的使用场景

1.缓存(Cache)
缓存机制⼏乎在所有⼤型⽹站都有使⽤,合理地使⽤缓存不仅可以加速数据的访问速度,⽽且能够有效地降低后端数据源的压⼒。Redis 提供了键值过期时间设置,并且也提供了灵活控制最⼤内存和内存溢出后的淘汰策略。可以这么说,⼀个合理的缓存设计能够为⼀个⽹站的稳定保驾护航。
2.排⾏榜系统
排⾏榜系统⼏乎存在于所有的⽹站,例如按照热度排名的排⾏榜,按照发布时间的排⾏榜,按照各种复杂维度计算出的排⾏榜,Redis 提供了列表和有序集合的结构,合理地使⽤这些数据结构可以很⽅便地构建各种排⾏榜系统。
3.计数器应⽤
计数器在⽹站中的作⽤⾄关重要,例如视频⽹站有播放数、电商⽹站有浏览数,为了保证数据的实时性,每⼀次播放和浏览都要做加 1 的操作,如果并发量很⼤对于传统关系型数据的性能是⼀种挑战。Redis 天然⽀持计数功能⽽且计数的性能也⾮常好,可以说是计数器系统的重要选择。
4.社交⽹络
赞 / 踩、粉丝、共同好友 / 喜好、推送、下拉刷新等是社交⽹站的必备功能,由于社交⽹站访问量通常⽐较⼤,⽽且传统的关系型数据不太合适保存这种类型的数据,Redis 提供的数据结构可以相对⽐较容易地实现这些功能。
5.消息队列系统
消息队列系统可以说是⼀个⼤型⽹站的必备基础组件,因为其具有业务解耦、⾮实时业务削峰等特性。Redis 提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列⽐还不够⾜够强⼤,但是对于⼀般的消息队列功能基本可以满⾜。

4.Ubuntu上安装配置Redis

 Redis官方其实是没有提供Windows版本的,微软维护了一个Windows版本的Redis分支。

Ubuntu上安装配置Redis大概分为六个步骤:

  1. 先使用su命令切换为root用户
  2. 使用apt命令搜索Redis相关软件包        apt search redis
  3. 使用apt命令安装redis        apt install redis
  4. 手动修改配置文件,(更改ip为0.0.0.0,默认为127.0.0.1;并关闭保护模式 protected -mode改为no)保证可以跨主机访问,配置文件所在路径(/etc/redis/redis.conf)10cda4aa43184b7286faf756f70541f5.png
  5. 重新启动服务器         service redis-server restart
  6. 使用redis自带的客户端来连接服务器       redis-cli连接     ctrl + d退出redis客户端

 

 

 

 

 


http://www.ppmy.cn/news/1525235.html

相关文章

oracle select字段有子查询会每次执行子查询吗

Oracle在执行SELECT语句时,如果子查询被嵌套在主查询中,子查询会被执行多次,这是因为子查询的结果不会被缓存。每次主查询需要用到子查询的结果时,子查询都会被重新执行。这种行为可能会导致性能问题,特别是当子查询结…

计算机网络:概述 - 计算机网络概述

目录 一. 互联网概述 1.1 网络 1.2 互联网 1.3 因特网 二. 互联网发展的三个阶段 三. 互联网的标准化工作 四. 互联网的组成 五. 计算机网络的类别 5.1 计算机网络的定义 5.2 计算机网络的不同类别 一. 互联网概述 起源于美国的互联网现如今已…

golang学习笔记13——golang的错误处理深度剖析

推荐学习文档 golang应用级os框架,欢迎star基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总golang学习笔记01——基本数据类型golang学习笔记02——gin框架及基本原理golang学习笔记03——gin框架的核心数据结构golang学…

简单了解 JVM

目录 ♫什么是JVM ♫JVM的运行流程 ♫JVM运行时数据区 ♪虚拟机栈 ♪本地方法栈 ♪堆 ♪程序计数器 ♪方法区/元数据区 ♫类加载的过程 ♫双亲委派模型 ♫垃圾回收机制 ♫什么是JVM JVM 是 Java Virtual Machine 的简称,意为 Java虚拟机。 虚拟机是指通过软件模…

新手制作视频用什么软件好?五款剪辑工具分享!

在数字时代,视频制作已成为许多人表达创意、记录生活的重要方式。但对于新手而言,面对琳琅满目的视频编辑软件,往往会感到无所适从。今天,我们就来推荐五款适合新手的视频制作软件,它们分别适用于不同的操作系统平台&a…

探索 Linux:开源操作系统的璀璨世界

摘要:本文围绕 Linux 展开深入探讨。从历史来看,20 世纪 90 年代初 Linus Torvalds 发布 Linux 内核源代码开启新纪元,开源模式使内核不断成长。Linux 的核心概念包含内核、文件系统、进程和线程等,其中内核管理硬件资源与提供系统…

Win10安装.net FrameWork3.5失败解决方法

win10安装.net FrameWork3.5失败解决方法 已经好久没有来投稿了,实在最近业务缠身,忙的焦头烂额(呵~多么伟大的牛马) 但最近开发使用windows11实在是拉胯的不行,升级完就后悔,所以就一怒之下,重装了win10 可是,好家伙,我重装完遇到一个问题,就是在使用.Net Framework3.5,按照Mi…

物理学基础精解【5】

文章目录 质点的速度一、平均速度二、瞬时速度三、速度质点的速度计算一、平均速度的计算二、瞬时速度的计算三、速度矢量的标量分量性质、定义、计算、例子和例题性质定义计算例子例题 质点的瞬时速度的方向的计算、性质、例子和例题计算性质例子例题 质点的速度 本题主要考察…

可对画面进行平台传输,实时查看监控的智慧交通开源了

智慧交通视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上…

C语言字符函数与字符串函数

目录 1. 字符函数 1.1 字符分类函数 1.2 字符转换函数 2. 字符串函数 2.1 strlen 函数 2.2 strcpy 函数 2.3 strcat 函数 2.4 strcmp 函数 2.5 strncpy 函数 2.6 strncat 函数 2.7 strncmp 函数 2.8 strstr 函数 结语 1. 字符函数 在C语言标准库中提供了一系列用于…

RocketMQ 消费方式

在消息传递系统中,“推(Push)”和“拉(Pull)”是两种不同的消息消费方式,RocketMQ 也支持这两种模式。下面是对这两种模式的详细解释: 1. 推模式(Push Model) 模式简介…

【机器学习(五)】分类和回归任务-AdaBoost算法-Sentosa_DSML社区版

文章目录 一、算法概念一、算法原理(一)分类算法基本思路1、训练集和权重初始化2、弱分类器的加权误差3、弱分类器的权重4、Adaboost 分类损失函数5、样本权重更新6、AdaBoost 的强分类器 (二)回归算法基本思路1、最大误差的计算2…

智慧环保平台建设方案

智慧环保平台建设方案摘要 政策导向与建设背景 背景:全国生态环境保护大会提出坚决打好污染防治攻坚战,推动生态文明建设,目标是在2035年实现生态环境质量根本好转。构建生态文明体系,包括生态文化、生态经济、目标责任、生态文明…

【每日一题】LeetCode 2398.预算内的最多机器人数目(滑动窗口、数组、二分查找、前缀和、堆(优先队列))

【每日一题】LeetCode 2398.预算内的最多机器人数目(滑动窗口、数组、二分查找、前缀和、堆(优先队列)) 题目描述 给定两个整数数组 chargeTimes 和 runningCosts,分别代表 n 个机器人的充电时间和运行成本。再给定一…

通过docker overlay2目录名查找容器名和容器ID

有时候经常会有个别容器占用磁盘空间特别大,这个时候就需要通过docker overlay2 日录名查找对应容器名. 1.首先进入到 /var/lib/docker/overlay2 目录下 # cd /var/lib/docker/overlay2 2.查看谁占用容间最大 # du -h -d 1 | grep G |sort -nr 3.再通过目录名查找…

【机器学习(二)】分类和回归任务-决策树算法-Sentosa_DSML社区版

文章目录 一、算法概念二、算法原理(一)树的构造(二)划分选择1、信息增益2、基尼指数3、卡方检验 (三)停止标准(四)剪枝处理1、预剪枝2、后剪枝 三、决策树的优缺点四、决策树分类任…

centos下nvme over rdma 环境配置

nvme over rdma 环境配置 本文主要介绍NVMe over RDMA的安装和配置。关于什么是NVMe over Fabrics,什么是NVMe over RDMA,本文就不做介绍了,网上资料一大堆。 可以看看什么是NVMe over Fabrics? RDMA(全称:Remote Dir…

DevOps -CI/CD 与自动化部署

DevOps - CI/CD 与自动化部署详解 DevOps 是一种结合开发(Development)与运维(Operations)的方法论,旨在通过工具和文化变革,促进软件开发和运维之间的协作,提升软件交付的效率、质量和稳定性。…

Golang | Leetcode Golang题解之第403题青蛙过河

题目&#xff1a; 题解&#xff1a; func canCross(stones []int) bool {n : len(stones)dp : make([][]bool, n)for i : range dp {dp[i] make([]bool, n)}dp[0][0] truefor i : 1; i < n; i {if stones[i]-stones[i-1] > i {return false}}for i : 1; i < n; i {…

Qt_控件的QWidget属性介绍

目录 1、QWidget的核心属性 2、enabled 3、geometry 3.1 代码测试geometry 4、windowTitle 4.1 代码测试windowTitle 5、windowIcon 5.1 QIcon设置图标 5.2 qrc机制 5.3 代码测试windowIcon 6、windowOpacity 6.1 代码测试windowOpacity 7、cursor 7.1 代码测试…