redis

文章目录

redis概要

Redis 由C语言编写,是基于内存级别的数据库,通常作为缓存使用。

特点:

  1. 读写效率高,读操作10万次/s; 写操作8万次/s
  2. 支持事务
  3. 单线程处理命令,杜绝了并发、上下文切换等问题,效率高
  4. 可用做分布式锁

为什么Redis快?

  1. 基于内存
  2. 网络IO方面,6版本之后采用NIO模式;内存命令处理采用单线程,杜绝了并发竞争以及上下文切换问题

数据类型

字符串

  1. 字符串本身可以表示三种类型:string、int、byte
  2. 基于二进制存储 可存储json、JPEG图片
  3. 单个字符串最大长度为 512M
操作

常规:get、set、del、exists、append

按整形:incr、decr、incrby、decrby

  • append 会使用更多的内存
  • 整书共享,再添加时,如果内存中已经存在相同的值,不在创建而是复用。注意引起的LRU淘汰策略问题
  • 精度问题 最大保证16位,过长的整数存储可能丢失精度。可在代码层面存储chart型进行规避

hash

就是一个 hash散列表,和Java层面的map数据结构类似,数组+链表结构;

少量的字段竞占用很少的空间?

list

链表结构,类似数据结构中的双端链表,支持两端进出已经中间的范围查询

set

无序的集合,不允许只重复,提供添加、查找、删除操作。这些操作都是O(1)级别?,另外支持 交集、差集、并集操作,

zset

有序集合,使用上相比set在存储时 需要value前边关联一个数值,用于排序

位图

?进行与或运算,用于位运算的比较

地理位置

以某个点为圆心,计算其他点到此圆心的距离

使用场景

1. 缓存

  • 长时间不变的数据缓存
  • 热点数据缓存
  • 会话缓存

2. 业务处理

基于set数据类型的排行榜、排名

3. 全局的一致计数

  • 浏览量

4. 发布订阅

5. 分布式锁

  • 获得锁
    对于全局的数据,借助redis的单线程处理排除竞争关系,另外借助setnx 判断是否存在已经已经上了锁,另外借助px命令防止锁问题,当超过设定的只之后,自动释放锁
sql 复制代码
set key value nx px 30000 
  • 释放锁
    释放锁的阶段并不是原子,包含查询和删除两个阶段,如果在查询时遇到了Redis中的锁超时自动释放的情况,被其他线程持有,那会会造成全局锁的混乱。
    基于以上情况课次阿勇lua脚本,此脚本在查询和释放层面是原子操作,避免因锁释放引起的全局锁问题。
shell 复制代码
if redis.call("get",KEYS[1])==ARG[1] then
  return redis.call("del",KEYS[1])
else 
return 0
end

原子性 超时 互斥

持久化机制

有两种RDB和AOF

RDB(默认)

周期性的将redis中的缓存喜爱那个dump.rdb文件中存储一份,恢复时,直接加载此文件

优点:

  1. 启动效率高
  2. 使用子进程IO同步,不影响主进程的执行
  3. 只有一个rdb文件,方便持久化,容灾性好
    缺点
  4. redis崩溃时,有可能会造成一段短时间的数据丢失

AOF

可配置的方式,每处理一个命令记录一次,或者每一批命令记录一次,可'appendfsync'配置,记录到一个类似binlog的文件中;

记录的是命令而不是数据。

优点:

保证数据的安全性

缺点:

  1. 文件大,启动慢
  2. Redis效率低,
相关推荐
这个DBA有点耶2 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G2 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备2 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远2 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
IT大白鼠2 天前
Redis 系列 · 第 01 篇——认知入门:Redis 是什么
redis·nosql
彧azz2 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
2601_962218612 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
全栈弄潮儿²⁰²⁴2 天前
AI Agent 开发实战(30):限流、缓存与成本控制
人工智能·gpt·缓存·agent·限流·agi·成本控制
张洛闻Eren2 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安2 天前
MySQL-触发器
数据库·mysql