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效率低,
相关推荐
mmsx29 分钟前
android sqlite 数据库简单封装示例(java)
android·java·数据库
zpjing~.~2 小时前
Mongo 分页判断是否有下一页
数据库
2401_857600952 小时前
技术与教育的融合:构建现代成绩管理系统
数据库·oracle
秋恬意2 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
潇湘秦2 小时前
一文了解Oracle数据库如何连接(1)
数据库·oracle
雅冰石2 小时前
oracle怎样使用logmnr恢复误删除的数据
数据库·oracle
web前端神器2 小时前
mongodb给不同的库设置不同的密码进行连接
数据库·mongodb
从以前2 小时前
Berlandesk 注册系统算法实现与解析
数据库·oracle
Muko_0x7d22 小时前
Mongodb
数据库·mongodb
Ren_xixi2 小时前
redis和mysql的区别
数据库·redis·mysql