Redis 实战缓存

news/2024/4/25 20:18:52

本篇概要:

  • 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

https://www.xjx100.cn/news/3118943.html

相关文章

SQL Server 2008 使用concat报错

SQL Server 2008 使用concat报错 在 SQL Server中,CONCAT 函数是从 SQL Server 2012 版本开始引入的,所以在 SQL Server 2008 中使用 CONCAT 函数会导致错误。 如果你想要连接字符串,有几种替代方法可以考虑: 使用 运算符&…

统信桌面版arm系统安装火狐浏览器和浏览器驱动

一、系统信息 二、下载浏览器和驱动 1、浏览器 https://security.debian.org/debian-security/pool/updates/main/f/firefox-esr/firefox-esr_115.5.0esr-1~deb10u1_arm64.deb 2、驱动 https://github.com/mozilla/geckodriver/releases geckodriver-v0.33.0-linux-aarch6…

docker中安装mysql,远程连接

docker中安装mysql,远程连接 安装mysql 拉取mysql镜像 搜索mysql镜像 docker search mysql建议使用Oracle官方标记的 拉取镜像 docker pull mysql# 查询镜像是否拉取成功 docker images启动mysql镜像 需要做端口映射 docker run --name mysql02 -p3306:3306 -e …

算法通关村第一关——链表经典问题之删除链表元素笔记

删除链表节点 总结一下高频常用的删除链表结点的情况,无论对链表进行何种操作,都需要精确查找和精确指向。另外,在删除链表节点时有一个很好用的技巧:虚头结点,将头结点的特殊性转化为一般,在后面具体阐述…

PHP微信UI在线聊天系统源码 客服私有即时通讯系统 附安装教程

DuckChat是一套完整的私有即时通讯解决方案,包含服务器端程序和各种客户端程序(包括iOS、Android、PC等)。通过DuckChat,站点管理员可以快速在自己的服务器上建立私有的即时通讯服务,用户可以使用客户端连接至此服务器…

创建Asp.net MVC项目实现视图页面数据传值显示

MVC中视图传值 ViewData ViewBag TempData 举例创建三中传值方式实现页面数据展示 MVC中视图传值 Asp.net MVC中Controller向View传值有多种方式,这里简单说一下其中3种方式 ViewData、ViewBag和TempData ViewData ViewData存储数据,ViewData的声明和赋值方…

UI自动化测试工具工作原理是怎样的?

随着软件开发的不断演进,保障软件质量成为了至关重要的一环。在这个过程中,UI自动化测试工具崭露头角,为开发团队提供了一种强有力的方式来确保应用程序的稳定性、功能性和兼容性。本文将深入探讨UI自动化测试工具的定义、工作原理以及其在提…

从零构建属于自己的GPT系列1:文本数据预处理、文本数据tokenizer、逐行代码解读

🚩🚩🚩Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1:文本数据预处理 从零构建属于自己的GPT系列2:语…