Redis 实战场景详解

多年大厂工作经验, 一直从事交易后台研发工作。 对于大流量,高并发后台技术有丰富的实战经验。

文章正文

一、简介

分布式缓存是分布式系统中的重要组件,主要解决高并发、大数据场景下,热点数据访问的性能问题,提供高性能的数据快速访问。

使用缓存常见场景是:项目中部分数据访问比较频繁,对下游 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 的基本数据类型:

enter image description here

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 listname value1; rpush listname value2
2.lrang listname 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 来实现。

作者正在撰写中...
隐藏内容 支付可见
内容互动
写评论
加载更多
评论文章
¥9.99 购买
× 订阅 Java 精选频道
¥ 元/月
订阅即可免费阅读所有精选内容