【Redis】-- 核心原理(数据类型+缓存异常+集群)

本文深入探讨Redis的核心原理,包括基本数据结构(String、List、Set、Hash、Sorted Set)及其应用场景,如计数、消息队列、最新商品存储等。同时,分析了Redis的常见异常,如缓存穿透、雪崩、预热和降级,提出解决方案。此外,介绍了Redis在分布式环境下的应用,如分布式锁和自增ID生成。最后,概述了Redis的主从模式、哨兵模式和Cluster集群模式,讨论了各自的优缺点和适用场景。
摘要由CSDN通过智能技术生成

一、简介

分布式缓存是分布式系统中的重要组件,主要解决高并发、大数据场景下,热点数据访问的性能问题,提供高性能的数据快速访问。
使用缓存常见场景是:项目中部分数据访问比较频繁,对下游 DB(例如 MySQL)造成服务压力,这时候可以使用缓存来提高效率。
缓存组件有很多种,大家熟知的 Redis、Tair、MemCache 等。今天我们重点介绍 Redis 缓存数据库相关的内容知识。
Redis 是开源免费,性能不错的 key-value 数据库。Redis 的特点包括:

  1. Redis 除了支持 key-value 类型的数据,同时还支持其他多种数据结构的存储;
  2. Redis 支持数据持久化存储,可以将数据存储在磁盘中,机器重启数据将从磁盘重新加载数据;
  3. Redis 支持数据的备份,即 Master-Slave 模式的数据备份。

Redis 作为缓存数据库和 MySQL 这种结构化数据库进行对比。

  1. **从数据库类型上,**Redis 是 NoSQL 半结构化缓存数据库, MySQL 是结构化关系型数据库;
  2. **从读写性能上,**MySQL 是持久化硬盘存储,读写速度较慢, Redis 数据存储读取都在内存,同时也可以持久化到磁盘,读写速度较快;
  3. **从使用场景上,**Redis 一般作为 MySQL 数据读取性能优化的技术选型,彼此配合使用。

接下来我们将重点向大家介绍关于 Redis 几个方向的知识内容:

  1. Redis 基本数据结构与实战场景
  2. Redis 常见异常及解决方案
  3. 分布式环境下常见的应用场景
  4. Redis 集群模式的介绍与总结
  5. Redis 常见面试题目详解

二、Redis 基本数据结构与实战场景

2.1 基本类型

我们用一个简单的导图来简单复习一下 Redis 的基本数据类型:

2.2 常用指令

接下来看看每个数据结构常用的指令有哪些,我们用一张表比较清晰的展示:

序号 数据结构 常用命令 命令实例
1 String 1.set :设置 key 对应的 value 值
2.get : 获取对应 key 的值,如不存在返回 nil
3.setnx : 只有设置的值不存在,才设置
4.setex :设置键值,并指定对应的有效期
5.mset/mget : 一次设置/获取多个 key 的值
6.incr/decr : 对 key 值进行增加 / 减去 1 操作
1.set name “tom”
2.get name 结果 :tom
3.setnx name “jim”
4.setex name 10 “tom”
5.mset key1 “hh” key2 “kk”
6.+1/-1
2 list 1.lpush/rpush :在 key 所对应的 list 左 / 右部添加一个元素
2.lrang/lindex :获取列表给定范围 / 位置的所有值
3.lset :设置 list 中指定下表元素的值
1.lpush list_name value1; rpush list_name value2
2.lrang list_name 0 -1 获取列表所有元素
3.lset list_name 1 valuex
3 set 1.sadd :向名称 为key 的 set 添加元素
2.smembers :查看集合中的所有成员
3.spop :随机返回并删除 set 中一个元素
4.sdiff :返回所有 set 与第一个 set 的差集
5.sunion :返回给定集合并集
1.sadd wordset aa; sadd wordiest bb;
2.smembers wordset
3.spop wordset
4.sdiff wordset wordset1
5.sunion wordset wordset1
4 hash 1.hset :设置一个 hash 的 field 的指定值,如果 key 不存在先创建
2.hget :获取某个 hash 的某个 filed 值
3.hmset/hmget :批量设置 / 获取 hash 内容
4.hlen :返回 hash 表中 key 的数量
5.hkeys/hvals :返回 hash 表中所有的 key/value
1.hset user name “tom"
2.hget user name
3.hmget user name sex
4.hlen user
5.hkeys user / hvals user
5 Sorted set 1.zadd :将一个带有给定分值的成员添加到有序集合里面
2.zrange :取出集合中的元素
3.zcard :返回集合中所有元素的个数
1.zadd key 1 hello
2.zrang key 0 -1
3.zcard key

2.3 场景解析

2.3.1 String 类型使用场景

场景一:商品库存数
从业务上,商品库存数据是热点数据,交易行为会直接影响库存。而 Redis 自身 String 类型提供了:

incr key   && decr key   &&  incrby key increment  &&  decrby key decrement
  1. set goods_id 10; 设置 id 为 good_id 的商品的库存初始值为 10;
  2. decr goods_id; 当商品被购买时候,库存数据减 1。

依次类推的场景:商品的浏览次数,问题或者回复的点赞次数等。这种计数的场景都可以考虑利用 Redis 来实现。
场景二:时效信息存储
Redis 的数据存储具有自动失效能力。也就是存储的 key-value 可以设置过期时间:set(key, value, expireTime)
比如,用户登录某个 App 需要获取登录验证码, 验证码在 30 秒内有效。那么我们就可以使用 String 类型存储验证码,同时设置 30 秒的失效时间。

keys = redisCli.get(key);
     if(keys != null)
    {
        return false;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值