02 Redis经典五种数据类型介绍及落地运用

news2024/11/23 1:54:08
  • 命令大全
  • 9大类型
    • String(字符类型)
    • Hash(散列类型)
    • List(列表类型)
    • Set(集合类型)
    • SortedSet(有序集合类型,简称zset)
    • Bitmap(位图)
    • HyperLogLog(统计)
    • GEO(地理)
    • Stream(了解)

string

常用命令

  • 最常用
    • set key value
    • get key
  • 同时设置/获取多个键值
    • MSET key value [key value …]
    • MGET key [key …]
  • 数值增减
    • 递增数字:INCR key
    • 增加指定的整数:INCRBY key increment
    • 递减数值:DECR key
    • 减少指定的整数:DECRBY key decrement
  • 获取字符串长度:STRLEN key
  • 分布式锁
    • setnx key value
    • set key value [EX seconds] [PX milliseconds] [NX|XX]
    • 在这里插入图片描述

应用场景

  • 比如抖音无限点赞某个视频或者商品,点一下加一次
  • 是否喜欢的文章
  • 阅读数:只要点击了rest地址,直接可以使用incr key 命令增加一个数字1,完成记录数字。
    在这里插入图片描述

hash

常用命令

  • Map<String,Map<Object,Object>>
  • 一次设置一个字段值:HSET key field value
  • 一次获取一个字段值:HGET key field
  • 一次设置多个字段值:HMSET key field value [field value …]
  • 一次获取多个字段值:HMGET key field [field …]
  • 获取所有字段值:hgetall key
  • 获取某个key内的全部数量:hlen
  • 删除一个key:hdel

应用场景

JD购物车早期 设计目前不再采用,当前小中厂可用

  • 新增商品 → hset shopcar:uid1024 334488 1
  • 新增商品 → hset shopcar:uid1024 334477 1
  • 增加商品数量 → hincrby shopcar:uid1024 334477 1
  • 商品总数 → hlen shopcar:uid1024
  • 全部选择 → hgetall shopcar:uid1024
    在这里插入图片描述

list

常用命令

  • 一个双端链表的结构,容量是2的32次方减1个元素,大概40多亿,主要功能有push/pop等,一般用在栈、队列、消息队列等场景。
  • 向列表左边添加元素:LPUSH key value [value …]
  • 向列表右边添加元素:RPUSH key value [value …]
  • 查看列表:LRANGE key start stop
  • 获取列表中元素的个数:LLEN key

应用场景

微信公众号订阅的消息

  • 大V作者李永乐老师和CSDN发布了文章分别是 11 和 22
  • 阳哥关注了他们两个,只要他们发布了新文章,就会安装进我的List
    lpush likearticle:阳哥id 11 22
  • 查看阳哥自己的号订阅的全部文章,类似分页,下面0~10就是一次显示10条
    lrange likearticle:阳哥id 0 9
    在这里插入图片描述

商品评论列表

  • 需求1:用户针对某一商品发布评论,一个商品会被不同的用户进行评论,保存商品评论时,要按时间顺序排序
  • 需要2:用户在前端页面查询该商品的评论,需要按照时间顺序降序排序
  • 使用list存储商品评论信息,key是该商品的id,value是商品评论信息商品编号为1001的商品评论key【items:comment:1001】
  • lpush items:comment:1001 {“id”:1001,“name”:“huawei”,“date”:1600484283054,“content”:“lasjfdljsa;fdlkajsd;lfjsa;ljf;lasjf;lasjfdlsad”}

set

常用命令

  • 添加元素:SADD key member [member …]
  • 删除元素:SREM key member [member …]
  • 遍历集合中的所有元素:SMEMBERS key
  • 判断元素是否在集合中:SISMEMBER key member
  • 获取集合中的元素总数:SCARD key
  • 从集合中随机弹出一个元素,元素不删除:SRANDMEMBER key [数字]
  • 从集合中随机弹出一个元素,出一个删一个:SPOP key [数字]
  • 集合运算
    • 集合的差集运算 A-B
      • 属于A但不属于B的元素构成的集合
      • SDIFF key [key …]
    • 集合的交集运算 A∩B
      • 属于A同时也属于B的共同拥有的元素构成的集合
      • SINTER key [key …]
    • 集合的并集运算 A ∪ B
      • 属于A或者属于B的元素合并后的集合
      • SUNION key [key …]

应用场景

微信抽奖小程序

  • 用户ID,立即参与按钮
    • sadd key 用户ID
  • 显示已经有多少人参与了,上图23208人参加
    • SCARD key
  • 抽奖(从set中任意选取N个中奖人)
    • SRANDMEMBER key 2 随机抽奖2个人,元素不删除
    • SPOP key 3 随机抽奖3个人,元素会删除

微信朋友圈点赞

  • 新增点赞
    • sadd pub:msgID 点赞用户ID1 点赞用户ID2
  • 取消点赞
    • srem pub:msgID 点赞用户ID
  • 展现所有点赞过的用户
    • SMEMBERS pub:msgID
  • 点赞用户数统计,就是常见的点赞红色数字
    • scard pub:msgID
  • 判断某个朋友是否对楼主点赞过
    • SISMEMBER pub:msgID 用户ID

微博好友关注社交关系

共同关注的人

在这里插入图片描述

我关注的人也关注他(大家爱好相同)

在这里插入图片描述

可能认识的人

在这里插入图片描述

Zset

  • 向有序集合中加入一个元素和该元素的分数
  • 添加元素:ZADD key score member [score member …]
  • 按照元素分数从小到大的顺序,返回索引从start到stop之间的所有元素
    • ZRANGE key start stop [WITHSCORES]
  • 获取元素的分数
    • ZSCORE key member
  • 删除元素
    • ZREM key member [member …]
  • 获取指定分数范围的元素
    • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
  • 增加某个元素的分数
    • ZINCRBY key increment member
  • 获取集合中元素的数量
    • ZCARD key
  • 获得指定分数范围内的元素个数
    • ZCOUNT key min max
  • 按照排名范围删除元素
    • ZREMRANGEBYRANK key start stop
  • 获取元素的排名
    • 从小到大:ZRANK key member
    • 从大到小:ZREVRANK key member

应用场景

根据商品销售对商品进行排序显示

  • 定义商品销售排行榜(sorted set集合),key为goods:sellsort,分数为商品销售数量。
  • 在这里插入图片描述

抖音热搜

在这里插入图片描述

案例实战:微信文章阅读量统计

package com.learn.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @author YSK
 * @since 2023/5/30 14:06
 */
@Service
@Slf4j
public class ArticleService {
    public static final String ARTICLE = "article:";
    @Resource
    private StringRedisTemplate stringRedisTemplate;

    public void likeArticle(String articleId) {
        String key = ARTICLE + articleId;
        Long likeNumber = stringRedisTemplate.opsForValue().increment(key);
        log.info("文章编号:{},喜欢数:{}", key, likeNumber);
    }
}
package com.learn.controller;

import com.learn.service.ArticleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * @author YSK
 * @since 2023/5/30 14:07
 */
@RestController
@Slf4j
@Api(description = "喜欢的文章接口")
public class ArticleController {
    @Resource
    private ArticleService articleService;

    @ApiOperation("喜欢的文章,点一次加一个喜欢")
    @RequestMapping(value = "/view/{articleId}", method = RequestMethod.POST)
    public void likeArticle(@PathVariable(name = "articleId") String articleId) {
        articleService.likeArticle(articleId);
    }

}
  • 中小厂可以用,QPS特别高的的大厂不可以用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/589397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring之状态机讲解

文章目录 1 状态机1.1 什么是状态1.2 四大概念1.3 状态机1.4 spring statemachine 2 示例Demo2.1 订单状态图2.2 建表2.3 依赖和配置2.3.1 pom.xml2.3.2 application.yml 2.4 状态机配置2.4.1 定义状态机状态和事件2.4.2 定义状态机规则2.4.3 配置持久化2.4.3.1 持久化到内存2.…

畅游星河的炫彩手柄,配置也不简单,北通阿修罗2Pro上手

平时在PC上玩个游戏&#xff0c;还是手柄更好用。在国产的手柄里面&#xff0c;北通的很多人都用&#xff0c;选择比较多&#xff0c;价格相对也更加亲民一些&#xff0c;之前看到北通阿修罗2Pro新出了一款无线星河版本&#xff0c;做得很好看&#xff0c;上周到手后试了试&…

元宇宙,开启下一个消费Z时代

元宇宙到底怎么了&#xff1f;为什么国外一片唱衰&#xff0c;而国内却依旧不遗余力的积极推动&#xff1f;接下来&#xff0c;国内元宇宙又将带来怎样的机遇&#xff1f; 此时此刻&#xff0c;元宇宙被一味吹捧的阶段已经过去&#xff0c;取而代之的是并存的唱衰声与叫好声&a…

《Opencv3编程入门》学习笔记—第三章

《Opencv3编程入门》学习笔记 记录一下在学习《Opencv3编程入门》这本书时遇到的问题或重要的知识点。 第三章 HighGUI图形用户界面初步 一、图像的载入、显示和输出到文件 &#xff08;一&#xff09;OpenCV的命名空间 简单的OpenCV程序标配&#xff1a; #include <o…

如何利用Citespace和vosviewer既快又好地写出高质量的论文及快速锁定热点和重点文献进行可视化分析

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…

Oracle实现主键字段自增

Oracle实现主键自增有4种方式&#xff1a; Identity Columns新特性自增&#xff08;Oracle版本≥12c&#xff09; 创建自增序列&#xff0c;创建表时&#xff0c;给主键字段默认使用自增序列 创建自增序列&#xff0c;使用触发器使主键自增 创建自增序列&#xff0c;插入语句&…

都2023年了,你竟然还不知道网络安全该怎么学!

前言 网络安全是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然或恶意原因而遭受破坏、更改、泄露&#xff0c;系统连续可靠正常地运行&#xff0c;网络服务不中断。 网络安全因何而重要&#xff1f; 截至2022年6月,我国网民规模为10.51亿&#xff0c…

nodejs 中使用websocket 并且区分空间,实现收到客服端消息 同步给房间内所有连接,小程序中使用websocket,区分房间、空间

❤️砥砺前行&#xff0c;不负余光&#xff0c;永远在路上❤️ 目录 前言一、服务端1、主要是通过nodeexpresswebsocket搭建2、代码大概结构3、nodejs 启动入口文件 引入自己的websocket文件&#xff0c;这里是为了和 http 服务结合起来&#xff0c;将server传入4、websocket.j…

【课代表笔记】直播回顾:Top药企的数字化实践集锦

【K讲了】系列直播之医药行业第一期&#xff1a;Top药企的数字化实践集锦前不久已在视频号和大家如期见面&#xff0c;以下是课代表为大家抄好的笔记~~ 斯歌K2的医药行业经验 K2在医药领域拥有丰富的客户积累及实施经验&#xff0c;全球TOP 10药企中有7家选择K2。斯歌K2已在医药…

JAVA POI excel 添加下拉字典的方式与案例 以及图文详解及个人理解

场景 原有的Excel 某一个 sheet 页中某些列需要添加指定的字典下拉&#xff0c;而这些字典的值又是确认的。 有两种思路&#xff1a; 一、如果给定的下拉字典值是确定的而且关联原有列的位置也不会变&#xff0c;那么这些数据可以固定写死在代码中&#xff0c;也是最简单的一…

身份集权设施保护之Kerberos协议

一、Kerberos协议介绍 Kerberos是一种由MIT&#xff08;麻省理工大学&#xff09;提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。该认证过程的实现不依赖于主机操作系统的认证&#xff0c;无需基于主机地址的信任&#xff0…

Live800:新的消费趋势下,企业在线客服需哪些改变?

从2021到2023&#xff0c;新模式、新业态、新产业层出不穷&#xff0c;新兴习惯也不断涌现&#xff0c;我们见证了消费品牌的“新物种爆炸”&#xff0c;见证了各行业的线上迁移。 这一切催化消费市场持续更新&#xff0c;消费趋势演变的路径也发生了变化&#xff0c;从以前的…

“数字”厨电成新宠?“小米卷出光学拍摄“天花板”?|3C数码行业SMI社媒心智品牌榜

手机行业SMI社媒心智品牌榜核心解读 智能手机“乍暖还寒”&#xff0c;龙头品牌仍稳占消费者心智 比拼屏幕、赶超系统、迭代形态、拓展概念&#xff1f;眼花缭乱过后&#xff0c;产品精益求精&#xff0c;建立稳固的消费者认知&#xff0c;才是“保鲜”关键。在最新发布的数说…

趣味LFS实验部署

LFS文件准备 LFS项目官方网站&#xff1a;https://www.linuxfromscratch.org/ 查找宿主系统必须安装的软件包 https://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-11.1-NOCHUNKS.html 安装依赖&#xff1a; #先来看看我此处的Yum仓库环境&#xff1a; CentOS-…

ArcGis系列-java调用GP分析

1,实现流程 创建GPServer,使用ArcgisPro添加GP工具运行,然后使用共享web服务发布运行成功的GP任务根据发布成功的GPServer发布地址&#xff0c;解析出GP服务的输入参数和输出参数前端输入gp服务需要的参数&#xff0c;发送给后端来异步提交后端提交后创建轮询任务等待执行结果…

3D知识入门

3D场景必备&#xff1a;scene, renderer, light, camera, model 一个基本代码: <script src"https://cdn.bootcdn.net/ajax/libs/three.js/r127/three.min.js"></script>var scene new THREE.Scene();var camera new THREE.PerspectiveCamera(75,windo…

【EKS】基于Amazon EKS搭建kubernetes集群

文章目录 前言 | 亚马逊云科技 re:Invent前沿资讯一、介绍篇&#x1f3a8;什么是AWS 云计算什么是Amazon EKS 二、部署篇&#x1f528;1、创建集群VPC2、创建集群子网3、创建IGW网关4、创建路由表与子网绑定5、EKS集群创建6、创建kubeconfig配置文件7、添加计算节点组8、查看EK…

IC卡水表大多都用在什么项目上?有什么功能特点吗?

IC卡水表是一种先进的计量仪表&#xff0c;广泛应用于许多项目&#xff0c;其功能特点使其在许多领域得到广泛应用。 首先&#xff0c;IC卡水表可以应用于自来水的计量&#xff0c;它可以高精度地测量水的流量&#xff0c;提供给用户准确的用水量信息&#xff0c;从而有助于用户…

分片架构,Redis Cluster 分析

分片架构解决的问题 通过堆机器&#xff0c;提升读写性能&#xff0c;与存储性能 分片架构设计要点 分片规则 选择Cardinality大的作为分片键&#xff0c;尽可能保证数据分布均匀 常见分片键&#xff1a; 基于主键&#xff08;业务型数据&#xff09;&#xff0c;基于时间…

JavaScript高级四、高阶技巧

零、文章目录 JavaScript高级四、高阶技巧 1、深浅拷贝 首先浅拷贝和深拷贝只针对引用类型 &#xff08;1&#xff09;浅拷贝 浅拷贝&#xff1a;拷贝对象的属性的值&#xff08;简单类型存的值就是值本身&#xff0c;引用类型存的值是对象的堆地址&#xff09;&#xff0c…