Redis-第八章节-应用场景
目录
- 概述
- 详解
1、概述
Redis支持五种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合)。
2、详解
1、String(字符串)
定义: String 是 redis 最基本的类型,一个 key 对应一个 value。String 类型是二进制安全的。因为 string 底层的实现是简单动态字符串 sds,是可以修改字符串。
应用场景: 单值缓存、对象缓存、分布式锁、常规计数(粉丝数量、评论数量)、分布式session共享、分布式全局序列号。
具体实现:
单值缓存:
set key value
get key
对象缓存:
set user:1 value(json格式数据)
mset user:1:name tsingli user:1:balance 1888
mget user:1:name user:1:balance
常规计数器:
incr article:readcount:{文章id}
get article:readcount:{文章id}
分布式系统全局序列号:
incrby orderid 1000 # redis批量生成序列号提升性能
分布式锁:
# 相关操作
线程1: setnx product:1001 true # 返回1代表获取锁成功
线程2: setnx product:1001 true # 返回0代表获取锁失败
。。。执行业务操作
del product:1001 # 执行完业务释放锁
set product:1001 true ex 10 nx # 防止程序意外终止导致死锁
# 案例
setnx product:1001 true
1.查询商品1001的库存
2.减库存
3.重新把减完剩余的库存更新回数据库
del product:1001
setnx 如果插入的key一样不会对数据有任何操作,如果第二次对库存再进行减对的话就返回错误。
2、Hash(哈希)
定义: Hash是一个键值对集合。他相当于java中的双重map。<key,<filed,value>>。
应用场景: 购物车。
具体实现:
购物车:
# 说明:
# 用户id为1001,商品的编码是10088。
# 用户id为key,商品id为field,商品数量为value。
# 案例:
# 添加商品:
hset cart:1001 10088 1
# 增加数量:
hincrby cart:1001 10088 1
# 商品总数:
hlen cart:1001
# 删除商品:
hdel cart:1001 10088
# 获取购物车所有商品:
hgetall cart:1001
3、List(列表)
定义: 列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素在列表的头部或者尾部。
应用场景: Stack(栈)= LPUSH + LPOP -> FILO //先进后出
、Queue(队列)= LPUSH + RPOP //先进先出
、Blocking MQ(阻塞队列)= LPUSH + BRPOP //消息队列
、微博
、微信公众号消息流
。
具体实现:
微博和微信公众号消息流:
# 李雷发微博,消息id为10018
lpush msg:111111 10018
# 韩梅梅车发微博,消息id为10086
lpush msg:111111 10086
# 查看最新微博消息
lrange msg:11111 0 5 //0至5条微博消息。
4、Set(集合)
定义: Set 是 string 类型的无序集合。
应用场景: 微信抽奖小程序、微信微博点赞、收藏、标签
、关注模型,就是可能认识的人的关系。
具体实现:
微信抽奖:
# 点击参与抽奖加入集合
sadd key {userId}
# 查看参与抽奖的所有用户
smembers key
# 抽取count名中奖者(1) // srandmember不会将元素从集合中删除
srandmember key [count] //抽取两名中奖者 srandmember act:1008 2
# 抽取count名中奖者(2) // SPOP会将元素从集合中删除
spop key 2
微信微博点赞、收藏、标签:
# 点赞
sadd like:{消息ID} {用户id}
# 取消点赞
srem like:{消息ID} {用户id}
# 检查用户是否点过赞
sismember like:{消息ID} {用户id}
# 获取点赞的用户列表
smembers like:{消息ID}
# 获取点赞的用户树
scard like:{消息ID}
5、Zset(有序集合)
定义: zset和set一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个dobule类型的分数,redis正是通过分数为集合成员进行从小到大的排序,zset的成员是唯一的但是分数可以重复。
Redis-第八章节-应用场景的更多相关文章
- Redis(八) LRU Cache
Redis(八)-- LRU Cache 在计算机中缓存可谓无所不在,无论还是应用还是操作系统中,为了性能都需要做缓存.然缓存必然与缓存算法息息相关,LRU就是其中之一.笔者在最先接触LRU是大学学习 ...
- 国内外三个不同领域巨头分享的Redis实战经验及使用场景
Redis不是比较成熟的memcache或者Mysql的替代品,是对于大型互联网类应用在架构上很好的补充.现在有越来越多的应用也在纷纷基于Redis做架构的改造.首先简单公布一下Redis平台实际情况 ...
- Redis作为消息队列服务场景应用案例
NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例 一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更 ...
- (转)国内外三个不同领域巨头分享的Redis实战经验及使用场景
随着应用对高性能需求的增加,NoSQL逐渐在各大名企的系统架构中生根发芽.这里我们将为大家分享社交巨头新浪微博.传媒巨头Viacom及图片分享领域佼佼者Pinterest带来的Redis实践,首先我们 ...
- 一:Redis的7个应用场景
Redis的7个应用场景 一:缓存——热数据 热点数据(经常会被查询,但是不经常被修改或者删除的数据),首选是使用redis缓存,毕竟强大到冒泡的QPS和极强的稳定性不是所有类似工具都有的,而且相 ...
- Redis实战经验及使用场景
随着应用对高性能需求的增加,NoSQL逐渐在各大名企的系统架构中生根发芽.这里我们将为大家分享社交巨头新浪微博.传媒巨头Viacom及图片分享领域佼佼者Pinterest带来的Redis实践,首先我们 ...
- 细说Redis(一)之 Redis的数据结构与应用场景
这一篇文章主要介绍Redis的数据结构与应用场景 NOSQL之Redis Redis是一款由key-value存储的软件.说起NOSQL,有文档型.键值型.列型存储.图形数据库.其中,在简单的读写性能 ...
- Redis(八)-- Redis分布式锁实现
一.使用分布式锁要满足的几个条件 系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现) 共享资源(各个系统访问同一个资源,资源的载体可 ...
- Redis常见7种使用场景(PHP)
转发:https://www.jianshu.com/p/2f3add45351b Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并 ...
随机推荐
- 【1w字+干货】第一篇,基础:让你的 Redis 不再只是安装吃灰到卸载(Linux环境)
Redis 基础以及进阶的两篇已经全部更新好了,为了字数限制以及阅读方便,分成两篇发布. 本篇主要内容为:NoSQL 引入 Redis ,以及在 Linux7 环境下的安装,配置,以及总结了非常详细的 ...
- ETCD数据迁移
ETCD数据迁移 本文阅读对象为想要将Rainbond平台rbd-etcd切换至外部etcd的相关人员. 在k8s master节点创建secret 本文中将要切换的ETCD为根据Rainbond官方 ...
- Building a Robust Live Reloader with WebSockets and Go — Brandur Leach https://brandur.org/live-reload
Building a Robust Live Reloader with WebSockets and Go - Brandur Leach https://brandur.org/live-relo ...
- Python程序中首行#!/usr/bin/env python的作用
1.通常我们在pycharm中写程序的时候会在首行写上#!/usr/bin/env python 如: #!/usr/bin/env python3#-*-coding: UTF-8 -*-#Auth ...
- LOJ104 普通平衡树
题目描述 这是一道模板题. 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入 x 数: 删除 x 数(若有多个相同的数,因只删除一个): 查询 x 数的排名(若 ...
- React---路由跳转
最近在开发react的项目中,很多地方都是使用组件式的跳转方式,但是怎么样使用js去控制页面的跳转呢? withRouter withRouter 是一个高阶组件,把 match,location,h ...
- Java通过openOffice实现word,excel,ppt转成pdf实现在线预览
Java通过openOffice实现word,excel,ppt转成pdf实现在线预览 一.OpenOffice 1.1 下载地址 1.2 JodConverter 1.3 新建实体类PDFDemo ...
- jQuery——样式与动画
通过jQuery,不仅能够轻松地为页面操作添加简单的视觉效果,甚至能创建更精致的动画. ###修改内联CSS jQuery提供了.css()方法. 这个方法集getter(获取方法)和setter(设 ...
- docker版mysql的使用和配置(1)——docker的基本操作
最近实在是忙成狗,其他的内容等稍微闲一点了一起更新. 这篇主要是讲docker版的mysql的使用和配置信息.因为实习公司需要搞一个docker做测试环境用,还需要包括基本的依赖.最重要的是,因为这个 ...
- Linux常用命令:性能命令
本文介绍Linux常用性能统计分析命令,监控进程或者系统性能.主要包括CPU(top.mpstat).内存(vmstat.free).I/O(iostat).网络性能(sar).系统日志信息(dems ...