目录

  • 概述
  • 详解

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. 获取html中某些标签的值

    一.获取单选按钮radio的值 <!doctype html> <html lang="en"> <head> <meta charset ...

  2. 基于scrapy框架的分布式爬虫

    分布式 概念:可以使用多台电脑组件一个分布式机群,让其执行同一组程序,对同一组网络资源进行联合爬取. 原生的scrapy是无法实现分布式 调度器无法被共享 管道无法被共享 基于 scrapy+redi ...

  3. 《awk中文手册》-本人参考官方手册翻译

    01. 简介 AWK是一个文本(面向行和列)处理工具,同时它也是一门脚本语言. AWK其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernigha ...

  4. 1、进程管理常用命令和进程ID

    常用命令 1. ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器. 详细介绍参照:https://www.runoob.com/linu ...

  5. ES入门及安装软件

    es介绍 Elasticsearch,简称es,是一款高扩展的分布式全文检索引擎.它可以近乎实时的存储,检索数据.es是面向文档型的数据库,一条数据就是一个文档,用json做为文档序列化的格式.es是 ...

  6. eNSP启动设备AR1失败记一次解决步骤

    eNSP稳定版本下载:   微信搜索公众号"疯刘小三" 关注后回复ensp即可获得下载链接地址 eNSP V100R002C00B510 Setup.exe 最近在用eNSp的时候 ...

  7. Ubuntu 能ping通DNS 地址 无法解析域名

    ping通qq百度都行,唯独谷歌不行, 主机能够ping通google的dns服务器地址 8.8.8.8,却无法解析域名   $ ping www.google.co.uk ping: unknown ...

  8. Graceful restart of a server with active WebSocket

    Graceful restart of a server with active WebSocket Simonwep/graceful-ws: ⛓ Graceful WebSocket wrappe ...

  9. MFA

    什么是 MFA?_启用和解绑MFA_账号常见问题_账号管理-阿里云 https://help.aliyun.com/knowledge_detail/37215.html

  10. (Oracle)取当前日期的最近工作日

      描述:现有一需求,日期表中存放了日期和是否节假日(0-工作日,1-节假日),现在需要取日期表中的最近的工作日.如2017/07/23(周日)最近的工作日应该是2017/07/21(周五).     ...