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效率低,
相关推荐
LYFlied11 分钟前
【每日算法】LeetCode 146. LRU 缓存机制
前端·数据结构·算法·leetcode·缓存
程序员卷卷狗16 分钟前
为什么MySQL默认使用可重复读RR?深入解析binlog与隔离级别的关系
数据库·mysql
此生只爱蛋19 分钟前
【Redis】String 字符串
java·数据库·redis
瀚高PG实验室20 分钟前
拼接符“II”在Oracle和HGDB中使用的差异
数据库·oracle·瀚高数据库
心态还需努力呀21 分钟前
当时序数据不再“只是时间”:金仓数据库如何在复杂场景中拉开与 InfluxDB 的差距
数据库
宇灬宇22 分钟前
oracle误drop表,通过回收站恢复
数据库·oracle
Albert Tan22 分钟前
Oracle EBS 12.2/12.1 开放本地或远程访问Weblogic
数据库·oracle
一个处女座的程序猿O(∩_∩)O24 分钟前
从InfluxDB到金仓:时序数据库性能拐点已至?
数据库·时序数据库
青云交27 分钟前
Java 大视界 -- 基于 Java+Flink 构建实时电商交易风控系统实战(436)
java·redis·flink·规则引擎·drools·实时风控·电商交易
数据和云36 分钟前
Oracle没有退路
数据库·oracle·vr