redis常见应用场景

目录

  • String应用场景

    • 分布式锁
    • 计数器
    • 分布式全局唯一id(string)
  • list应用场景
    • 消息队列(list)
    • 新浪/Twitter用户消息列表(list)
  • Set应用场景
    • 抽奖活动(set)
    • 实现点赞,签到,like等功能(set)
    • 实现关注模型,可能认识的人(set)
    • 电商商品筛选(set)
    • zset应用场景

String应用场景

分布式锁

setnx key value,当key不存在时,将 key 的值设为 value ,返回1。若给定的 key 已经存在,则setnx不做任何动作,返回0。

当setnx返回1时,表示获取锁,做完操作以后del key,表示释放锁,如果setnx返回0表示获取锁失败,整体思路大概就是这样

计数器

如知乎每个问题的被浏览器次数

set key 0
incr key // incr readcount::{帖子id} 每阅读一次
get key // get readcount::{帖子id} 获取阅读量

分布式全局唯一id(string)

实现类似于RDBMS的Sequence功能,生成一系列唯一的序列号

设置序列起始值:

SET sequence "10000"
获取一个序列值:

INCR sequence
直接将返回值作为序列使用即可。

获取一批(如100个)序列值:

INCRBY sequence 100
假设返回值为N,那么[N - 99 ~ N]的数值都是可用的序列值。

当多个客户端同时向Redis申请自增序列时,Redis能够确保每个客户端得到的序列值或序列范围都是全局唯一的,绝对不会出现不同客户端得到了重复的序列值的情况

list应用场景

消息队列(list)

在list里面一边进,一边出即可

# 实现方式一
# 一直往list左边放
lpush key value
# key这个list有元素时,直接弹出,没有元素被阻塞,直到等待超时或发现可弹出元素为止,上面例子超时时间为10s
brpop key value 10 

# 实现方式二
rpush key value
blpop key value 10

新浪/Twitter用户消息列表(list)

假如说小编li关注了2个微博a和b,a发了一条微博(编号为100)就执行如下命令

lpush msg::li 100

b发了一条微博(编号为200)就执行如下命令:

lpush msg::li 200

假如想拿最近的10条消息就可以执行如下命令(最新的消息一定在list的最左边):

# 下标从0开始,[start,stop]是闭区间,都包含
lrange msg::li 0 9 

Set应用场景

抽奖活动(set)

# 参加抽奖活动
sadd key {userId} 

# 获取所有抽奖用户,大轮盘转起来
smembers key 

# 抽取count名中奖者,并从抽奖活动中移除
spop key count 

# 抽取count名中奖者,不从抽奖活动中移除
srandmember key count

实现点赞,签到,like等功能(set)

# 1001用户给8001帖子点赞
sadd like::8001 1001

# 取消点赞
srem like::8001 1001

# 检查用户是否点过赞
sismember like::8001 1001 

# 获取点赞的用户列表
smembers like::8001 

# 获取点赞用户数
scard like::8001 

实现关注模型,可能认识的人(set)

seven关注的人
sevenSub -> {qing, mic, james}

青山关注的人
qingSub->{seven,jack,mic,james}

Mic关注的人
MicSub->{seven,james,qing,jack,tom}

# 返回sevenSub和qingSub的交集,即seven和青山的共同关注
sinter sevenSub qingSub -> {mic,james}

# 我关注的人也关注他,下面例子中我是seven
# qing在micSub中返回1,否则返回0
sismember micSub qing
sismember jamesSub qing

# 我可能认识的人,下面例子中我是seven
# 求qingSub和sevenSub的差集,并存在sevenMayKnow集合中
sdiffstore sevenMayKnow qingSub sevenSub -> {seven,jack}

电商商品筛选(set)

每个商品入库的时候即会建立他的静态标签列表如,品牌,尺寸,处理器,内存。

# 将拯救者y700P-001和ThinkPad-T480这两个元素放到集合brand::lenovo
sadd brand::lenovo 拯救者y700P-001 ThinkPad-T480
sadd screenSize::15.6 拯救者y700P-001 机械革命Z2AIR
sadd processor::i7 拯救者y700P-001 机械革命X8TIPlus

# 获取品牌为联想,屏幕尺寸为15.6,并且处理器为i7的电脑品牌(sinter为获取集合的交集)
sinter brand::lenovo screenSize::15.6 processor::i7 -> 拯救者y700P-001

zset应用场景

  • 排行版(zset)

redis的zset天生是用来做排行榜的、好友列表, 去重, 历史记录等业务需求。

# user1的用户分数为 10
zadd ranking 10 user1
zadd ranking 20 user2

# 取分数最高的3个用户
zrevrange ranking 0 2 withscores

原文地址:https://www.cnblogs.com/xiaohaigui/p/10976135.html

时间: 2024-10-06 00:53:19

redis常见应用场景的相关文章

Redis常见业务场景应用

一定时间范围内不可重复发短信问题 Redis实现消息队列 Redis实现Session共享 ...

Redis常见七种使用场景(PHP实战)

edis 是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 本篇文章,主要介绍利用Redis常见应用场景下PHP实战. 简单字符串缓存实战 $redis->connect('127.0.0.1', 6379); $strCacheKey  = 'Test_bihu'; //SET 应用 $arrCacheData = [    'name' => 'job',    'sex'  => '男',    'ag

Redis 的 5 个常见使用场景

Redis 的 5 个常见使用场景 提交 我的评论 加载中 已评论 Redis 的 5 个常见使用场景 2015-07-23 数据库开发 数据库开发 数据库开发 微信号 DBDevs 功能介绍 分享数据库相关技术文章.教程和工具,另外还包括数据库相关的工作.偶尔也谈谈程序员人生 :) (点击上方蓝字,快速关注我们) 英文:Joe Engel 译者:伯乐在线-刘晓鹏 网址:http://blog.jobbole.com/88383/ 点击"阅读原文"可查看本文网页版 在这篇文章中,我们将

Redis常见配置文件详解

Redis常见配置文件详解 # vi redis.conf   daemonize yes #是否以后台进程运行 pidfile /var/run/redis/redis-server.pid    #pid文件位置 port 6379#监听端口 bind 127.0.0.1   #绑定地址,如外网需要连接,设置0.0.0.0 timeout 300     #连接超时时间,单位秒 loglevel notice  #日志级别,分别有: # debug :适用于开发和测试 # verbose :

Redis的应用场景

缓存 作为Key-Value形态的内存数据库,Redis 最先会被想到的应用场景便是作为数据缓存.而使用 Redis 缓存数据非常简单,只需要通过string类型将序列化后的对象存起来即可,不过也有一些需要注意的地方: 必须保证不同对象的 key 不会重复,并且使 key 尽量短,一般使用类名(表名)加主键拼接而成. 选择一个优秀的序列化方式也很重要,目的是提高序列化的效率和减少内存占用. 缓存内容与数据库的一致性,这里一般有两种做法: 只在数据库查询后将对象放入缓存,如果对象发生了修改或删除操

redis常见的面试题及答案

1.什么是Redis? 2.Redis相比memcached有哪些优势? 3.Redis支持哪几种数据类型? 4.Redis主要消耗什么物理资源? 5.Redis的全称是什么? 6.Redis有哪几种数据淘汰策略? 7.Redis官方为什么不提供Windows版本? 8.一个字符串类型的值能存储最大容量是多少? 9.为什么Redis需要把所有数据放到内存中? 10.Redis集群方案应该怎么做?都有哪些方案? 11.Redis集群方案什么情况下会导致整个集群不可用? 12.MySQL里有2000

Redis常见的几种使用方式及其优缺点

本文主要针对Redis常见的几种使用方式及其优缺点展开分析. 一.常见使用方式 Redis的几种常见使用方式包括: Redis单副本: Redis多副本(主从): Redis Sentinel(哨兵): Redis Cluster: Redis自研. 二.各种使用方式的优缺点 1.Redis单副本 Redis单副本,采用单个Redis节点部署架构,没有备用节点实时同步数据,不提供数据持久化和备份策略,适用于数据可靠性要求不高的纯缓存业务场景. 优点: 架构简单,部署方便: 高性价比:缓存使用时无

以《淘宝网》为例,描绘质量属性的六个常见属性场景

以<淘宝网>为例,描绘质量属性的六个常见属性场景. 1.可用性 可用性与系统故障及其后果相关.当系统不再提供其规范中所说的服务时,就出现了系统故障.系统用户可以观察到此类故障. 可用性是指系统正常运行时间的比例,是通过两次故障之间的时间长度或在系统崩溃情况下能够恢复正常运行的速度来衡量的 刺激源 用户 刺激 很多用户同时访问,系统出现崩溃 制品 系统 环境 正常操作 响应 系统检测到事件:记录故障,通知系统 响应度量 两分钟后,系统可以继续正常使用 2.可修改性 两个关注点:可以修改什么?何时

Redis 数据结构使用场景

Redis 数据结构使用场景 redis共有5种数据结构,每种的使用场景都是什么? 一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 redis 中一共有5种数据结构,那每种数据结构的使用场景都是什么呢? String——字符串 Hash——字典 List——列表 Set——集合 Sorted Set——有序集合 下面我们就来简单说明一下它们各自