当前位置: 首页 > news >正文

初始Redis:概念、特性、使用场景、安装教程

文章目录

  • 一、什么是redis?
  • 二、 Redis特性的简单认识
    • 1. 速度快
    • 2. 基于键值对
    • 3. 丰富的功能
    • 4. 简单稳定
    • 5. 客户端支持多种编程语言:
    • 6. 持久化
    • 7. 主从复制(Replication)
    • 8. 高可用(High Availability)和分布式(Distributed)
  • 三、Redis使用场景
    • 1. Redis可以做什么?
      • 数据库
      • 缓存
      • 消息队列
    • 2. Redis不宜做什么?
  • 四、Redis重大版本
  • 五、Ubuntu 安装 Redis 6
    • 1. 更新apt软件源
    • 2. 安装 Redis
    • 3. 修改配置文件支持远程连接
    • 4. 重启redis服务
    • 5. 检验redis状态

一、什么是redis?

Redis 是一款基于键值对(key-value)的 NoSQL 数据库。与多数键值对数据库不同,其值可由字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(zset)、位图(Bitmaps)、HyperLogLog、地理信息定位(GEO)等多种数据结构和算法构成,这使得 Redis 能满足多样的应用场景。

Redis 的显著优势在于将所有数据存储于内存中,因此读写性能极为出色。同时,它支持通过快照(RDB)和日志(AOF)两种方式将内存数据持久化到硬盘,确保断电或机器故障时数据不会丢失。此外,Redis 还提供了键过期、发布订阅、事务、流水线、Lua 脚本等附加功能,方便应对这类场景。

如今,众多重量级企业都在使用 Redis。国外如 Twitter、Instagram、Stack Overflow、Github 等;国内则有新浪微博(堪称全球最大的 Redis 使用者)、阿里巴巴、腾讯、搜狐、优酷土豆、美团、小米、唯品会等。此外,ELK 等诸多开源技术也将 Redis 作为重要组件,且 Redis 提供的模块系统支持第三方进行功能扩展,进一步释放其潜力。由此可见,熟练使用和运维 Redis 已成为开发与运维人员的必备技能。

二、 Redis特性的简单认识

Redis得到了众多公司的青睐,必有其过人之处,下面是关于Redis的8个重要特性。

1. 速度快

相较于MySQL这类关系型数据库,Redis的访问速度要快很多,其原因大致可以分为以下四点:

  1. 内存读写天然快:Redis的数据存放在内存中,内存访问速度要远远快于硬盘,这也是Redis速度快的主要原因。(下图是Google列出的各种硬件执行速度,供参考)
  2. 单线程优势:Redis使用单线程模型,避免了线程切换和多线程加锁竞争导致的性能损失

Redis 6.0 引入了多线程机制,但主要用于网络IO场景,Redis的核心执行的执行依旧保持单线程模型

  1. 高效的数据结构:Redis采用了各种高效率的数据结构,如字符串(String)、哈希表(Hash)、有序集合(ZSet)、这些数据结构的操作复杂度多为O(1)或者O(logN)O(1) 或者 O(logN)O(1)或者O(logN) ,确保指令执行高效。
  2. I/O多路复用技术:采用I/O多路复用技术,确保单线程也能高效应对大量客户端请求

各层级硬件执行速度

2. 基于键值对

Redis是基于键值对的非关系型数据库(NoSQL),所谓键值对就像C++的map,Python的dict等,这种结构的优势就是插入数据和查询数据更加高效。值得一提的是,Redis的值支持丰富的数据结构:字符串、哈希表、列表、集合、有序集合、位图、HyperLogLog甚至在Redis3.2加入了地理位置相关功能。这些丰富的数据库能帮助开发者开发应对各类场景的应用。

3. 丰富的功能

  • 键过期功能:到达一定时间自动删除键值对,用于实现缓存
  • 发布订阅功能:可用于实现消息系统
  • Lua脚本:可用Lua脚本执行Redis命令
  • 简单事务功能
  • 流水线(Pipeine): 使得客户端能将一批命令一次传到Redis,减少了网络的开销

4. 简单稳定

  • Redis源码量少:早期甚至只有两万行,Redis3.0引入集群特性后增至5万行左右,相对于其他数据库来说代码量少很多。
  • Redis采用单线程模型
  • Redis不依赖操作系统的各种类库,自己实现事件处理相关功能。

5. 客户端支持多种编程语言:

Redis提供了简单的TCP通信协议:很多编程语言都可以方便的接入Redis,且由于Redis收到广泛认可,主流语言都已经有开发者实现了良好的Redis支持,如C、C++、Java、PHP、Python、JS

6. 持久化

前面提到,Redis数据存放在内存中,这保证了访问速度很快,但是不够安全。一旦发生断电或者机器故障,重要的数据就可能会丢失。因此,Redis提供两种持久化策略:RDB和AOF,可将内存中的数据保存到硬盘中。后续我将对Redis持久化策略详细说明。

7. 主从复制(Replication)

主从复制功能是分布式架构的基础。这一功能也将在后续博文中进行演示。

8. 高可用(High Availability)和分布式(Distributed)

Redis 提供了高可用实现的 Redis 哨兵,能够保证Redis节点故障检测和故障自动转移。也提供了 Reids 集群,这是真正的分布式实现。

三、Redis使用场景

1. Redis可以做什么?

Redis官网给出了三个方向:数据库、缓存和消息队列

数据库

大多数情况下,数据库考虑的是容量大,但也有一些高性能的场景考虑的是“速度快“,这是就可以直接采用Redis做数据库

缓存

这是Redis最广泛使用的场景。对于各类大型网站或者应用程序,往往是少量的数据能满足大量的用户使用场景。因此,这类网站采用的方式都是用 MySQL 等数据库存储全量完整数据,用Redis从数据库中加载少量核心数据作为缓存,这样的设计提升了用户访问数据的速度,也有效降低了后端的压力。

消息队列

Redis的开发者最早开发它就是为了将其作为消息队列进行使用的。但如今,在消息队列方面,我们有很多更优的选择,因此,Redis做消息队列的场景很少出现了。

2. Redis不宜做什么?

和所有技术一样,Redis也有其适用场景与边界,并非万能解决方案。它既能高效解决特定问题,也存在不适合的应用场景,这一点可从数据规模与数据冷热两个维度来分析。

从数据规模来看,数据可分为大规模数据与小规模数据。由于Redis的数据存储依赖内存,尽管如今内存成本已大幅下降,但面对超大规模数据——例如每天数亿条的用户行为数据——若用Redis存储,成本会高得难以承受,堪称一个“无底洞”。

从数据冷热属性来看,数据有热数据与冷数据之分。热数据指需要频繁操作的数据,冷数据则反之。以视频网站为例,视频基本信息在各业务线中常被调用,属于热数据;而用户的观看记录未必会被频繁访问,可归为冷数据。暂且不考虑两者在数据规模上的差异,仅从数据冷热角度而言,将冷数据存于Redis无疑是对内存的浪费,而把热数据放入Redis,既能加速读写操作,又能减轻后端存储的负载,可谓事半功倍。

因此,Redis并非“万金油”。相信随着对Redis的深入学习,我们会更清晰地把握它真正的适用场景。

四、Redis重大版本

Redis版本发布

  • Redis 2.6 :2012年发布,支持服务端Lua脚本,键过期时间精确到毫秒,从节点新增只读功能。
  • Redis 2.8 :2013年发布,优化主从复制的PSYNC机制,支持通过config set配置maxclients,新增config rewrite命令。
  • Redis 3.0 :2015年发布,推出官方分布式方案Redis Cluster,优化小对象内存访问,新增client pause命令。
  • Redis 3.2 :2016年发布,添加GEO地理信息处理功能,引入List新编码类型quicklist,新增hstrlen命令。
  • Redis 4.0 :2017年发布,引入模块系统,优化主从复制为PSYNC2.0,新增LFU缓存淘汰算法,支持非阻塞del/flush命令。
  • Redis 5.0 :2018年发布,新增流数据类型(Stream),升级Redis模块API,RDB文件包含LFU/LRU信息。
  • Redis 6.0 :2020年发布,支持多线程IO,优化模块API,改进过期键处理机制,新增SSL支持。
  • Redis 7.0 :2022年发布,新增Function自定义函数库,支持Client-Eviction机制、Sharded-Pub/Sub,提供命令执行耗时直方图。

五、Ubuntu 安装 Redis 6

相较于Redis 7, Redis 6 已经具备了大部分功能,且更容易安装。

Redis官方不支持Windows系统,因为Redis的特性与Linux息息相关。又由于Redis的优秀特性,微软的开源技术组也维护了一个 Redis 的windows版本分支,不过仍然建议在Linux上学习使用Redis。

1. 更新apt软件源

sudo apt update

2. 安装 Redis

sudo apt install redis

3. 修改配置文件支持远程连接

修改 /etc/redis/redis.conf (注意需要sudo权限)

  • 修改 bind 127.0.0.1 为 bind 0.0.0.0
  • 修改protected-mode yes 为 protected-mode no

4. 重启redis服务

sudo service redis-server restart

5. 检验redis状态

  1. 通过netstat命令
netstat -anp | grep redis


2. 启动redis客户端

redis-cli

启动完成后输入ping,若返回pong,则redis连接正常

使用ctrl + d 退出客户端。

http://www.dtcms.com/a/301503.html

相关文章:

  • 六、搭建springCloudAlibaba2021.1版本分布式微服务-admin监控中心
  • IPv6的多级地址层次的理解
  • 设计模式(五)创建型:原型模式详解
  • 【ELasticsearch】节点角色分离最佳实践
  • 【LeetCode 热题 100】35. 搜索插入位置——二分查找(左闭右开)
  • 剑指offer第2版:双指针+排序+分治+滑动窗口
  • Web开发系列-第0章 Web介绍
  • 面试题:Vue2 中 template 的解析过程详解
  • CentOS 镜像源配置与 EOL 后的应对策略
  • 修改docker容器内的时区为东八区
  • 字符串是数据结构还是数据类型?
  • 常见认证机制详解
  • 哈希表应用(map,set共同作用)
  • Dify 深度解析:开启 AI 应用开发的无限可能
  • VUE3(四)、组件通信
  • 1439-素数环2
  • 基于深度学习的图像分割:使用DeepLabv3实现高效分割
  • QT6 源,七章对话框与多窗体(17)用于辅助多文档 MDI 窗体设计 QMdiArea 的类 QMdiSubWindow:
  • [10月考试] B
  • 3.5-非关系型数据库-反规范化-sql语言
  • 市电有电检测电路
  • [硬件电路-96]:什么是闭环反馈?什么是闭环正反馈控制?什么是闭环负反馈控制?
  • RK3568 Linux驱动学习——Linux驱动开发准备工作
  • 企业IT管理——突发病毒事件应急处理预案模板
  • 永磁同步电机控制算法--弱磁控制(虚拟电阻)
  • 51c大模型~合集160
  • 重温经典,小巧方便的 WinXP 来啦!提供离线驱动
  • 【编号444】雅鲁藏布江(上中下)游8级水系湖泊数据合集
  • net8.0一键创建支持(RabbitMQ)
  • 神经网络知识讨论