目录

  • 概述
  • 详解

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. CSS不用背景图片实现优惠券样式反圆角,凹圆角,反向半圆角,并且背景渐变

    日常开发过程中,特别是商城相关应用开发过程中,时常会遇到花里胡哨的设计图,比如优惠券样式,上图: 实现思路如下:     1.先写一个外容器,实现背景色渐变: Html: 1 <div clas ...

  2. 十九、更改LCD显示屏

    一.裸机修改 之前测试用的屏幕是480*272的分辨率,现在要换成800*480的屏,因此要对软件代码进行修改. 对于裸机驱动而言,主要有两个点需要注意,一个是屏幕分辨率变了,因此初始化的时候与屏幕分 ...

  3. Vue基础之Vue组件

    Vue基础之Vue组件 // 组件是可以复用的Vue实例! // 可以把经常重复的功能封装为组件!

  4. jQuery mock.js模拟的使用

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  5. 用git合并分支时,如何保持某些文件不被合并

    用git合并分支时,如何保持某些文件不被合并_fkaking的专栏-CSDN博客_git 合并分支 https://blog.csdn.net/fkaking/article/details/4495 ...

  6. (Oracle)数据量统计存储过程

    本过程适用于Oracle数据量统计. create or replace procedure SP_GET_TAB_COUNT as v_tableName HDSD_TJ.Tablename%typ ...

  7. 如何在windows下切换node版本

    安装nvm 最近的项目中,一个是用vue项目开发,一个是使用react开发,但是ant design pro使用了umi框架,所需要的node版本>10.0.0,vue那个项目中又不兼容node ...

  8. CS代理+proxychains+nmap进行内网扫描

    前提:拿下边界机之后,进入内网,想用nmap怎么办? CS可以开启代理,但是是socks4的代理,只能使用tcp协议,所以nmap使用的时候要使用-sT选择使用tcp_协议,要使用-Pn不使用ICMP ...

  9. 数组赋值到select

    function _oneClassData() { var options = []; $(oneClass).each(function (i, item) { var option = {}; ...

  10. python3 自动部署MariaDB主从复制

    master import configparser import os def config_mariadb_yum(): exists = os.path.exists('/etc/yum.rep ...