redis典型使用场景_使用场景图

redis典型使用场景_使用场景图Redis常见使用场景 缓存、数据共享分布式、分布式锁、全局 ID、计数器、限流、位统计、购物车、时间线 Timeline、消息队列、抽奖、点赞、签到、打卡、商品标签、商品筛选、用户关注、推荐模型、排

Redis常见使用场景

Redis常见使用场景

缓存、数据共享分布式、分布式锁、全局 ID、计数器、限流、位统计、购物车、时间线 Timeline、消息队列、抽奖、点赞、签到、打卡、商品标签、商品筛选、用户关注、推荐模型、排行榜.

1.缓存

String类型

例如:热点数据缓存(例如报表、明星出轨),对象缓存、全页缓存、可以提升热点数据的访问数据。

2.数据共享分布式

String 类型,因为 Redis 是分布式的独立服务,可以在多个应用之间共享

例如:分布式Session

<dependency> 
	<groupId>org.springframework.session</groupId> 
	<artifactId>spring-session-data-redis</artifactId> 
</dependency>

3.分布式锁

​ String 类型setnx方法,只有不存在时才能添加成功,返回true

public static boolean getLock(String key) {
    Long flag = jedis.setnx(key, "1");
    if (flag == 1) {
        jedis.expire(key, 10);
    }
    return flag == 1;
}

public static void releaseLock(String key) {
    jedis.del(key);
}

4.全局ID

int类型,incrby,利用原子性; 分库分表的场景,一次性拿一段

incrby userid 1000

5.计数器

int类型,incr方法

例如:文章的阅读量、微博点赞数、允许一定的延迟,先写入Redis再定时同步到数据库

6.限流

int类型,incr方法

以访问者的ip和其他信息作为key,访问一次增加一次计数,超过次数则返回false

7.位统计

String类型的bitcount(1.6.6的bitmap数据结构介绍)

# a 对应的ASCII码是97,转换为二进制数据是01100001
# b 对应的ASCII码是98,转换为二进制数据是01100010
set k1 a
# 6 7 代表的a的二进制位的修改
setbit k1 6 1
setbit k1 7 0
# 因为bit非常节省空间(1 MB=8388608 bit),可以用来做大数据量的统计。
get k1

例如:在线用户统计,留存用户统计

setbit onlinecounts 01
setbit onlinecounts 11
setbit onlinecounts 20

支持按位与、按位或等等操作

bitop and destkey key1 key2 ... keyN 对一个或多个 key 求逻辑与,并将结果保存到 destkey
bitop or destkey key1 key2 ... keyN 对一个或多个 key 求逻辑或,并将结果保存到 destkey
bitop xor destkey key1 key2 ... keyN 对一个或多个 key 求逻辑异或,并将结果保存到 destkey
bitop not destkey srckey 对指定 srckey 求逻辑非,并将结果保存到 destkey

计算出7天都在线的用户

bitop and 7_days_both_online_users day_1_online_users day_2_online_users ...  day_7_online_users

8.购物车

String 或hash。所有String可以做的hash都可以做

  • key:用户id;field:商品id;value:商品数量。
  • +1:hincr
  • -1:hdecr
  • 删除:hdel
  • 全选:hgetall
  • 商品数:hlen

redis典型使用场景_使用场景图

9.时间线Timeline

list,双向链表,直接作为timeline就好了。插入有序

10.消息队列

List提供了两个阻塞的弹出操作:blpop/brpop,可以设置超时时间

  • blpop:blpop key1 timeout 移除并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

  • brpop:brpop key1 timeout 移除并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

  • 队列:先进先出:rpush blpop,左头右尾,右边进入队列,左边出队列

  • 栈:先进后出:rpush brpop

11.抽奖

自带一个随机获得值

spop myset

12.点赞、签到、打卡

假如微博ID是WB1001,用户ID是U3001

用 [ like:WB1001 ] 来维护 WB1001 这条微博的所有点赞用户

  • 点赞了这条微博:sadd like:WB1001 U3001
  • 取消点赞:srem like:WB1001 U3001
  • 是否点赞:sismember like:WB1001 U3001
  • 点赞的所有用户:smembers like:WB1001
  • 点赞数:scard like:WB1001

13.商品标签

redis典型使用场景_使用场景图

用 [ tags:i5001 ] 来维护商品所有的标签

  • sadd tags:i5001 画面清晰细腻

  • sadd tags:i5001 真彩清晰显示屏

  • sadd tags:i5001 流程至极

14.商品筛选

# 获取差集
sdiff set1 set2
# 获取交集(intersection )
sinter set1 set2
# 获取并集
sunion set1 set2

redis典型使用场景_使用场景图

假如买 iPhone11

sadd brand:apple iPhone11
sadd brand:ios iPhone11
sadd screensize:6.0-6.24 iPhone11
sadd screentype:lcd iPhone 11

过滤商品,苹果的、ios的、屏幕在6.0-6.24之间的,屏幕材质是LCD屏幕

sinter brand:apple brand:ios screensize:6.0-6.24 screentype:lcd

15.用户关注、推荐模型

follow:关注 fans:粉丝

# 相互关注
sadd 1:follow 2
sadd 2:fans 1
sadd 2:follow 1
sadd 1:fans 2
# 我关注的人也关注了他(取交集)
sinter 1:follow 2:fans
# 1可能认识的人(取差集)
sdiff 2:follow 1:follow
# 2可能认识的人(取差集)
sdiff 1:follow 2:follow

16.排行榜

id 为1001 的新闻点击数加1

zincrby news:20220512 1 1001

获取今天点击最多的15条

zrevrange new:20220512 0 15 withsocres

原文地址:https://www.cnblogs.com/yushixin1024/archive/2022/06/12/16368063.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5124.html

(0)
上一篇 2023-05-22 09:30
下一篇 2023-05-22

相关推荐

  • postgrep修改存储目录「建议收藏」

    postgrep修改存储目录「建议收藏」此篇文档为转载,来自赵熠东的csdn博客,地址暂时未找到 安装yum源 yum install https://download.postgresql.org/pub/repos/yum/10/re…

    2022-12-27
    174
  • mysql怎么配置环境变量_MySQL配置

    mysql怎么配置环境变量_MySQL配置一、先决条件 假设我们已经成功安装MySQL数据库。如果还有小伙伴不知道如何安装MySQL数据库,可以在本文下留言,留言数超20,则出一期“手把手教你安装MySQL数据库——图文详解”的文章。 二、登

    2023-06-03
    145
  • 如何本地navicat连接虚拟机安装的linux 的mysql[通俗易懂]

    如何本地navicat连接虚拟机安装的linux 的mysql[通俗易懂]2022.3.20 如何本地连接虚拟机安装的linux 的mysql 1防火墙开启开启 1.1、开启端口3306 firewall-cmd –zone=public –add-port=3306/

    2023-05-10
    148
  • 直播预约 | 丁奇2020年首场公开课[亲测有效]

    直播预约 | 丁奇2020年首场公开课[亲测有效]在各行业爆发式增长的云时代,传统IT架构已无法满足企业需求。国内移动互联网的崛起为国产数据库创造了得天独厚的成长沃土,相比较于传统数据库,国产数据库技术取得了长足进步,也更适用于企业的生产环境和IT…

    2023-02-02
    161
  • 关于一小时学会用python的信息

    关于一小时学会用python的信息制定目标

    2023-10-29
    135
  • Python信号量详解

    Python信号量详解随着多进程和多线程编程模式的发展,进程或线程之间的同步和互斥成了程序设计中十分重要的一部分。在Python中,信号量(Semaphore)是一种用于线程同步的工具。本文将会从多个方面对Python信号量进行详细的阐述,并给出相应的代码示例。

    2024-05-23
    61
  • Python构造函数详解

    Python构造函数详解在Python中,类实例化的时候会自动调用一个特殊的成员函数称之为构造函数。构造函数就是一个类的初始化方法,它在类实例化的时候自动被调用,主要用于给实例对象设置初始值。

    2024-04-25
    75
  • win10一键重装系统「建议收藏」

    win10一键重装系统「建议收藏」今天小编要给大家介绍的是云骑士装机大师win10一键重装系统,一键系统重装,无需电脑技术,小白在家也可自己完成安装,三步到位,安全简单!一键系统重装,0费用,0丢包,极加速!一起来看看吧。 1第一步…

    2023-04-12
    165

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注