目录

  • 概述
  • 详解

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-第八章节-应用场景的更多相关文章

  1. Redis(八) LRU Cache

    Redis(八)-- LRU Cache 在计算机中缓存可谓无所不在,无论还是应用还是操作系统中,为了性能都需要做缓存.然缓存必然与缓存算法息息相关,LRU就是其中之一.笔者在最先接触LRU是大学学习 ...

  2. 国内外三个不同领域巨头分享的Redis实战经验及使用场景

    Redis不是比较成熟的memcache或者Mysql的替代品,是对于大型互联网类应用在架构上很好的补充.现在有越来越多的应用也在纷纷基于Redis做架构的改造.首先简单公布一下Redis平台实际情况 ...

  3. Redis作为消息队列服务场景应用案例

    NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例   一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更 ...

  4. (转)国内外三个不同领域巨头分享的Redis实战经验及使用场景

    随着应用对高性能需求的增加,NoSQL逐渐在各大名企的系统架构中生根发芽.这里我们将为大家分享社交巨头新浪微博.传媒巨头Viacom及图片分享领域佼佼者Pinterest带来的Redis实践,首先我们 ...

  5. 一:Redis的7个应用场景

    Redis的7个应用场景   一:缓存——热数据 热点数据(经常会被查询,但是不经常被修改或者删除的数据),首选是使用redis缓存,毕竟强大到冒泡的QPS和极强的稳定性不是所有类似工具都有的,而且相 ...

  6. Redis实战经验及使用场景

    随着应用对高性能需求的增加,NoSQL逐渐在各大名企的系统架构中生根发芽.这里我们将为大家分享社交巨头新浪微博.传媒巨头Viacom及图片分享领域佼佼者Pinterest带来的Redis实践,首先我们 ...

  7. 细说Redis(一)之 Redis的数据结构与应用场景

    这一篇文章主要介绍Redis的数据结构与应用场景 NOSQL之Redis Redis是一款由key-value存储的软件.说起NOSQL,有文档型.键值型.列型存储.图形数据库.其中,在简单的读写性能 ...

  8. Redis(八)-- Redis分布式锁实现

    一.使用分布式锁要满足的几个条件 系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现) 共享资源(各个系统访问同一个资源,资源的载体可 ...

  9. Redis常见7种使用场景(PHP)

    转发:https://www.jianshu.com/p/2f3add45351b Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并 ...

随机推荐

  1. 镍氢可充电电池2.4V转3.3V,2V转3.3V稳压供电输出电路图

    PW5100可以实现2.4V转3.3V,2V转3.3V的稳压电源电路,输出电流500MA.静态电流10uA,SOT23-5封装.输出纹波低,轻载性能高(轻载电感推荐6.8UH-10UH). PW510 ...

  2. Mysql简要概述

    Mysql学习笔记 Mysql简介: ​ Mysql是一个轻量级关系型数据库管理系统,由瑞典Mysql AB公司开发,目前属于Oracle公司.目前Mysql被广泛地应用在Internet上的中小型网 ...

  3. ichartjs插件的使用

    项目中可能会用到饼状图.柱状图.环形图等,ichartjs是一个很不错的插件,体量小,只需引入ichart.1.2.1.min.js即可满足基础需求,github下载地址是:https://githu ...

  4. 使用Azure Runbook 发送消息到Azure Storage Queue

    客户需要定时发送信息到Azure Storage Queue,所以尝试使用Azure Runbook实现这个需求. 首先新增一个Azure Automation Account的资源. 因为要使用Az ...

  5. CF492B

    题意 一条长为L的路,在n个不同的位置都放置了路灯,灯光半径相同,问半径至少为多少时灯光可以覆盖整条路. 那我们就先排序,使灯的位置是从路的一边依次排到另一边的 ,然后求出两两挨着的灯之间距离的最大值 ...

  6. 【Android初级】如何实现一个具有选择功能的对话框效果(附源码)

    我们去餐厅吃饭时,服务员都会拿菜单给我们选择点什么菜.今天就分享一个具有选择功能的简易对话框,给用户展示一个选择列表.实现思路如下: 既然有选择列表,那么这个列表的内容肯定保存在某个地方 用户选择某一 ...

  7. Java实现windows,linux服务器word,excel转为PDF;aspose-words,Documents4j

    Java实现windows,linux服务器word,excel转为PDF:aspose-words,Documents4j 一.通过aspose-words将word,Excel文档转为PDF 1. ...

  8. 二:SpringBoot-配置Log4j2,实现不同环境日志打印

    SpringBoot-配置Log4j2,实现不同环境日志打印 日志打印之外观模式 1.日志配置 2.Log4j2的配置文件 3.简单的测试程序 日志打印之外观模式 每一种日志框架都有自己单独的API, ...

  9. js将金额转成大写金额

    function Chinese(){ /* var num= $(dialogStruct.iframe.contentDocument.getElementById("contractA ...

  10. VMware Workstation Pro下载

    VMware Workstation Pro 下载地址:https://pan.baidu.com/s/1XXhFFh0Fx0vzvcd1A543Yg,提取码:2o19(下载得到的压缩包中含有 VMw ...