Redis—基础篇

Redis基础

  • [1. Redis 简介](#1. Redis 简介)
  • [2. Redis 应用](#2. Redis 应用)
  • [3. Redis 数据结构](#3. Redis 数据结构)
    • [3.1 String](#3.1 String)
    • [3.2 hash](#3.2 hash)
    • [3.3 list](#3.3 list)
    • [3.4 set](#3.4 set)
    • [3.5 sorted set](#3.5 sorted set)
  • [4. Redis 为什么快?](#4. Redis 为什么快?)
  • [5. Redis I/O 多路复用](#5. Redis I/O 多路复用)
  • [6. Redis 6.0多线程](#6. Redis 6.0多线程)

1. Redis 简介

Redis 是一种基于键值对的 NoSQL 数据库

Redis 中的 value 支持 string、hash、list、set、zset、Bitmaps(位图)、HyperLogLog(地图信息定位) 等多种数据结构

Redis 会将所有数据存在内存中,读写性能非常出色

Redis 可以将内存的数据利用快照和日志的形式保存到硬盘上,内存中的数据不会"丢失"

Redis 还提供了键过期、发布订阅、事务、流水线、Lua脚本等附加功能

2. Redis 应用

缓存 :基本所有的 Web 应用都会使用 Redis 作为缓存,来降低数据源压力,提高响应速度

计数器:天然支持计数功能,计数性能好,可以用来记录浏览量、点赞量等

排行榜:Redis 提供列表和有序集合数据结构,可以构建各种排行榜系统

社交网络:点赞、点踩、粉丝、共同好友/喜好、推送、下拉刷新等

消息队列:Redis 提供了发布订阅功能和阻塞队列的功能,可以满足一般消息队列功能

分布式锁:分布式环境下,利用 Redis 实现分布式锁

3. Redis 数据结构

3.1 String

字符串最基础的数据结构。

字符串类型的值实际可以是字符串、数字,甚至是二进制,但是值最大不能超过512MB。

使用场景:

  • 缓存功能
  • 计数
  • 共享 Session
  • 限速

3.2 hash

哈希类型是指键值本身又是一个键值对结构。

使用场景:

  • 缓存用户信息
  • 缓存对象

3.3 list

列表(list)类型是用来存储多个有序的字符串。

列表是一种比较灵活的数据结构,它可以充当栈和队列的角色

使用场景:

  • 消息队列
  • 文章列表

3.4 set

集合(set)类型也是用来保存多个的字符串元素,但和列表类型不一样的是,集合中不允许有重复元素,并且集合中的元素是无序的。

使用场景:

  • 标签(tag)
  • 共同关注

3.5 sorted set

有序集合中的元素可以排序。

但是它和列表使用索引下标作为排序依据不同的是,它给每个元素设置个权重(score)作为排序的依据。

使用场景:

  • 用户点赞统计
  • 用户排序

4. Redis 为什么快?

Redis 的速度非常的快,单机的 Redis 就可以支撑每秒十几万的并发,相对于MySQL 来说,性能是 MySQL 的几十倍。

速度快的原因主要有几点:

  1. 完全基于内存操作
  2. 使用单线程,避免了线程切换和竞态产生的消耗
  3. 基于非阻塞的IO多路复用机制
  4. C语言实现,基于基础的数据结构,Redis 大量的优化、性能极高

5. Redis I/O 多路复用

Redis 一直被大家熟知的就是它的单线程架构,虽然有的命令操作可以用后台线程或者子进程执行(比如数据删除,快照生成,AOF重写)。

但是,从网络 IO 处理到实际的读写命令处理,都是由单个线程完成的。

网络 IO 在系统层面上指的是数据从用户态到内核态的读写操作,多路是指多个 socket 连接。

复用是指一个或多个连接处理。一个服务端进程可以同时处理多个套接字描述符。

Redis 使用 IO 多路复用简单来说就是,单线程处理多个客户端连接的网络读写请求,并且能够保证不会阻塞主流程的一种机制。

6. Redis 6.0多线程

Redis6.0 的多线程是用多线程来处理数据的读写和协议解析,但是 Redis 执行命令还是单线程的

目的是因为 Redis 的性能瓶颈在于 网络IO 而非 CPU,使用多线程能提升 IO 读写的效率,从而整体提高 Redis 的性能。

相关推荐
pengdott5 小时前
Oracle RAC内存融合技术深度解析:集群性能的幕后引擎
数据库·oracle
csudata5 小时前
绿色便携版PostgreSQL发行版重磅发布
数据库·postgresql
阳光九叶草LXGZXJ6 小时前
达梦数据库-学习-48-DmDrs控制台命令(同步之Manager、CPT模块)
linux·运维·数据库·sql·学习
我科绝伦(Huanhuan Zhou)6 小时前
脚本再升级,兼容Oracle 26ai一键安装
数据库·oracle
野生绿箭侠7 小时前
Ncos 2.3.2 版本集成达梦数据库
数据库
仍然.8 小时前
MYSQL--约束
数据库·mysql
乡野码圣8 小时前
【RK3588 Android12】RCU机制
java·jvm·数据库
亓才孓8 小时前
[数据库]应该注意的细节
数据库·sql
m0_561359679 小时前
掌握Python魔法方法(Magic Methods)
jvm·数据库·python
xxxmine9 小时前
redis学习
数据库·redis·学习