Redis 实战缓存

news/2024/11/7 22:47:44/

本篇概要:

  • 1. 设置、查询、获取过期时间;
  • 2. 缓存穿透:设置空键;
  • 3. 封杀单ip;
  • 4. 封杀ip段;
  • 5. 缓存预热;
  • 6. 使用 hash 数据类型保存新闻的缓存,增加点击量;
  • 7. Sorted set(有序集合) 分离新闻缓存内容和新闻点击量、排行榜、预热新闻;

1. 设置、查询、获取过期时间;

set key value
get key 
ttl key

2. 缓存穿透:设置空键;

  • 先从redis取,没取到再数据库取,再没取到设置默认值
  • 如果是默认缓存,到一定次数不让再刷
# 命令:
expire

3. 封杀单ip;

  • 对于单独ip,开辟一个 key value,key = 前缀 + ip

4. 封杀ip段;

  • list 类型,列表,可以塞入字符串,可以按顺序也可直接插入奥列表头部尾部
# 从键头部插入
lpush key value
# 获取列表长度
llen# 操作
lpush users hua
lpush users zhang
lrange users 0 -1
# 显示:
# 1 zhang
# 2 hua# 尾部插入
# 删除:
del users
# 重新插入:
rpush users zhang
rpush users hualrange users 0 -1
# 显示:
# 1 zhang
# 2 hua
  • 实战:ip前三段,装入list。ip段数量到阈值,整段被禁止

5. 缓存预热;

set users hua EX 200
ttl users

6. 使用 hash 数据类型保存新闻的缓存,增加点击量;

  • 当缓存拥有多个独立字段,且会发生变化时,单纯的string就不适合了
  • hash数据类型,常用于商品缓存
# 基本命令:
# 设置值:(表 - 字段 - 值)
hset key field value 
# 取值:
hget key fieldhset news101 news_id 101
hset news101 news_title testtitlehget news101 news_id
hgetall news101# 显示
# 1) "news_id"
# 2) "101"
# 3) "news_title"
# 4) "testtitle"# 更新写法:
# 获取所有
hgetall key 
# 获取所以keys
hkeys key 
# 获取所有 vals
hvals keys hmset news102 news_id 102 news_title testtitle2
hmget news102 news_id news_title
# (初始没有 views 也会自增1)
hincrby news102 views 1

7. Sorted set(有序集合) 分离新闻缓存内容和新闻点击量、排行榜、预热新闻;

  • 之前还有个 set 类型
  • Sorted set 自带一个 score,适合排行榜
zadd key score member# 举例:
zadd news 19 news101:
# 理解为名为news(模块)这个集合,加入一个元素叫news101,score是19
# 一个系统模块很多,都要用单独的集合名称# 如果2条新闻,保存点击量
zadd news 12 news101
zadd news 31 news102# 查看 从第一条到最后一条
zrange news 0 -1 
# 取前三名:
zrange news 0 2
# 带分数查看
zrange news 0 -1 withscores 
# 查看排名(0 就是第一位)
zrank news 
# 倒序
zrevrange news 0 -1 with score # 给指定元素加分
# 返回加完之后的值,没有则新增
zincrby news 1 news101 # 查询分数:
zscore news news101# 排行榜的各种套路:
zrange news 0 -1# 根据指定分数看排行榜:
zrangebyscore news 15 22
zrevrangebyscore news 22 15
# 以上加上score可以查看score

http://www.ppmy.cn/news/1255124.html

相关文章

oops-framework框架 之 本地存储(五)

引擎: CocosCreator 3.8.0 环境: Mac Gitee: oops-game-kit 注: 作者dgflash的oops-framework框架QQ群: 628575875 简介 在CocosCreator中,本地存储主要使用sys.localStorage 接口,通过 key-value的格式进…

Vue3动态表单

示例代码如下: // 引入需要的依赖包 import { ref, reactive } from vue; import { useForm } from /composables/useForm;// 定义表单数据模型 const formModel reactive({name: ,age: ,gender: , });// 使用自定义的useForm函数创建表单实例 const { register, …

k8s部署rocketmq单节点(server+broker+console)—— 筑梦之路

之前写过几篇关于rocketmq构建双架构镜像、docker-compose部署的文章,接上篇docker-compose部署rocketmq,这里记录下k8s下如何部署。 多架构环境下docker-compose部署rocketmq单机模式—— 筑梦之路-CSDN博客 nameserver节点 apiVersion: apps/v1 kin…

sed笔记231127 `-e`基本正则,`-E`扩展版正则

-e基本正则,-E扩展版正则 -E, -r, --regexp-extended 在脚本中使用扩展正则表达式(为保证可移植性使用 POSIX -E)。-e或 --expression 接基本正则表达式, 可多次使用,多次过滤-f 或 --file 选项接脚本文件, 注意是脚本文件, 而不是输入文件 -e可以不写…

【开源】前后端分离的在线考试系统,支持多种部署方式

在线考试系统 https://download.csdn.net/download/mo3408/88593116 在线考试系统是一种利用网络技术,实现在线出题、答题、阅卷、成绩查询等一系列考试活动的系统。它不受地理位置限制,可以实现远程考试,大大提高了考试的效率和便利性。此…

【计算机概论 ①】- 电脑:辅助人脑的好工具

目录 一、电脑硬件的五大单元 二、一切设计的起点:CPU 的架构 三、其他单元的设备 四、运行流程 五、电脑的分类 六、电脑上面常用的计算单位(容量、速度等) 操作系统跟硬件有相当程度的关联性,所以,如果不了解一…

LeetCode417. Pacific Atlantic Water Flow

文章目录 一、题目二、题解 一、题目 There is an m x n rectangular island that borders both the Pacific Ocean and Atlantic Ocean. The Pacific Ocean touches the island’s left and top edges, and the Atlantic Ocean touches the island’s right and bottom edges…

在 Qt 的文本编辑类中,document() 是一个成员函数,用于获取文档对象

在 Qt 的文本编辑类中,document() 是一个成员函数,用于获取文档对象。它返回与文本编辑器关联的 QTextDocument 对象的指针。 QTextDocument 类是 Qt 中用于处理富文本内容的类。它包含了文本内容以及相关的格式、样式和布局信息。通过 document() 函数…