目录

  • `Redis` 支持的数据类型
  • 使用场景
    • `String` 类型
    • `Hash` 类型
    • `List` 列表类型
    • `Set` 类型
    • `Zset` 类型

Redis 支持的数据类型

Redis 支持的五种数据类型

  • String:字符串类型
  • Hash:哈希,散列表类型
  • List:列表类型
  • Set:(集合)
  • Zset:有序集合

使用场景

String 类型

String 类型是 Redis 中最常见的数据类型,其使用场景如下

  • 缓存:简单的 key-value 存储,可以用于热点数据的缓存、对象缓存、全页缓存、可以提升热点数据的访问数据
  • 位统计:在线用户统计,文章访问量,记录每个用户的访问次数等。方案:常用键名: pageview:userid,如果一个用户的 id123,那对应的 Rediskey 就为 pageview:123value 就为用户的访问次数,增加次数可以使用命令:incr
  • 计数器:文章的阅读量、微博点赞数、允许一定的延迟,先写入 Redis 再定时持久化同步到数据库
set key 0
incr key    // incr readcount::{帖子id} 每阅读一次
get key     // get readcount::{帖子id} 获取阅读量
  • 分布式全局唯一 id:分布式全局唯一 id 的实现方式有很多,这里只介绍用 redis 实现

    每次获取 userId 的时候,对 userId1 再获取,可以改进为如下形式

    直接获取一段 userId 的最大值,缓存到本地慢慢累加,快到了 userId 的最大值时,再去获取一段,一个用户服务宕机了,也顶多一小段 userId 没有用到
set userId 0
incr usrId // 返回1
incrby userId 1000 // 返回10001

Hash 类型

Redis 的散列可以让用户将多个键值对存储到一个 Redis 的键里面,散列非常适用于将一些相关的数据存储在一起。类似 map 的一种结构,将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)缓存到 redis 中,以后每次读写内存时,就可以操作 hash 里的某个字段

  • 存储用户信息、存储对象
// 存储用户信息,比如保存name,age:
hset(user:1001,name,"zhangsan")
hset(user:1001,age,18)
hget(user:1001,name)  // 获取
hset(user:1001,name,"张三")  // 修改
  • 存储购物车相关信息
key:用户id
field:商品id
value:商品数量

List 列表类型

list 的应用场景非常多,也是 Redis 最重要的数据类型之一

  • 定时排行榜
  • 消息队列
  • 排行榜、最新列表(评论列表、点赞列表)

示例,新浪 Twitter 用户消息列表

// 假如用户li关注了2个微博a和b// a发了一条微博(编号为100)就执行如下命令:
lpush msg::li 100// b发了一条微博(编号为200)就执行如下命令:
lpush msg::li 200// 假如想拿最近的10条消息就可以执行如下命令(最新的消息一定在list的最左边):
lrange msg::li 0 9 //下标从0开始,[start,stop]是闭区间,都包含

Set 类型

RedisSetString 类型的无序集合,和 list 不同的是,Set 中不会出现重复的成员,集合最大的好处就是可以进行交集或差集的操作

  • 将每个人的好友存在 Set 中,可避免重复
  • 好友、关注、粉丝、感兴趣的人等的集合
sismember key member //判断 member 元素是否是集合 key 的成员
smove source destination member //将 member 元素从 source 集合移动到 destination 集合
scard key  //获取集合的成员数
  • 寻找两个人的共同好友,使用 sinter 求交集

示例,实现点赞、签到、打卡。假如微博 IDt1001,用户 IDu3001。用 like:t1001 来维护 t1001 这条微博的所有点赞用户

sadd like:t1001 u3001    // 点赞了这条微博
srem like:t1001 u3001   //取消点赞
sismember like:t1001 u3001  // 是否点赞
smembers like:t1001 // 点赞的所有用户
scard like:t1001    // 点赞数

示例:实现关注模型,可能认识的人

  • 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}

Zset 类型

Redis 中的 ZsetSet 一样,都是 String 类型的集合,也不允许有重复的成员,但不同的是 Zset 的每个元素都会有一个 double 类型的分数 score 与之关联,而 Redis 也是通过这个分数来为这个集合排序的

  • 电商商品综合排名
  • 按价格排名
  • 在线游戏的积分排行榜、热点新闻排行榜
// user1的用户分数为 10
zadd ranking 10 user1
zadd ranking 20 user2
// 取分数最高的3个用户
zrevrange ranking 0 2 withscores

Redis支持的数据类型及其使用场景相关推荐

  1. Redis支持的数据类型以及使用场景,持久化,哨兵机制,缓存击穿,缓存穿透

    Redis支持的数据类型以及使用场景,持久化,哨兵机制,缓存击穿,缓存穿透 简单介绍一个redis? redis是内存中的数据结构存储系统,一个key-value类型的非关系型数据库,可持久化的数据库 ...

  2. Redis五种数据类型及应用场景

    Redis五种数据类型及应用场景 MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样 ...

  3. Redis八种数据类型及应用场景介绍

    本文来说下Redis八种数据类型及应用场景介绍 文章目录 概述 String 介绍 应用场景 Hash 介绍 应用场景 List 介绍 应用场景 Set 介绍 应用场景 ZSet 介绍 应用场景 Bi ...

  4. 2 万字 + 20张图| 细说 Redis 九种数据类型和应用场景

    作者:小林coding 计算机八股文网(操作系统.计算机网络.计算机组成.MySQL.Redis):https://xiaolincoding.com 大家好,我是小林. 我们都知道 Redis 提供 ...

  5. redis五种数据类型的使用场景

    string 1.String 常用命令: 除了get.set.incr.decr mget等操作外,Redis还提供了下面一些操作: 获取字符串长度 往字符串append内容 设置和获取字符串的某一 ...

  6. 【缓存中间件】redis 支持的数据类型

    文章目录 前言 一.字符串 二.哈希 三. 列表 四.集合 五.有序集合 六.位图 Redis Bitmap 七.基数统计 HyperLogLog 八.Geo 地理位置 九.Streams 流 应用场 ...

  7. Redis中的数据类型及其应用场景

    redis中有哪些数据类型?这个问题我被面试官问过好多次了,下面总结下这5种数据类型的特点,命令,还有应用场景 redis客户端的一些通用命令: ping # 测试redis是否链接 如果已链接返回 ...

  8. redis五种数据类型的应用场景_Redis五种不同的数据类型

    一.redis集群测试环境搭建 参考文章:https://www.jianshu.com/p/0a2f8f80983a redis-cli -c -h 10.96.87.129 -p 7001注意:- ...

  9. Redis系列四:redis支持的数据类型

    一.字符串<String> 1. 字符串类型:实际上可以是字符串(包括XML JSON),还有数字(整形 浮点数),二进制(图片 音频 视频),最大不能超过512MB 2. 设值命令: s ...

  10. redis五种数据类型及使用场景

    Redis 数据类型 转载自https://blog.csdn.net/zzu_seu/article/details/106323114 五种类型与类比java的模型 string --> S ...

最新文章

  1. 一致吗 驱动_外国不过春节?AMD驱动再更新,解决BUG,游戏不闪退,重启不黑屏...
  2. 电脑睡眠快捷键_电脑快速进入睡眠的快捷键是什么?
  3. 动态规划之图像压缩问题
  4. thinking of 抵制家乐福
  5. c语言成绩统计与学籍管理源码,[源码和文档分享]基于C语言的学生成绩管理系统...
  6. wxpython播放视频_使用wxpython显示网络摄像头视频闪烁
  7. 华为提出 New IP,欲打破长达半世纪的IP协议重塑互联网
  8. 论文文献综述的题目是什么样的,应该怎么写?
  9. 人到中年:“无爱、无话、无性”
  10. 2020年中国云原生用户调研的十二个要点
  11. 关于MySQL错误提示ERROR 1265 (01000)的问题分析及解决方案
  12. 支付FM——云闪付收款码配置教程
  13. html5的基本工作原理,HTML5基础开发教程
  14. 计算机视觉之图像分割——水平集方法_ACWE2001
  15. C++满足条件的数累加
  16. BUUCTF-Crypto学习笔记(二)
  17. php 缓冲区溢出漏洞,在Linux 容器中对php-fpm缓冲区溢出漏洞的复现分析 ( CVE-2019-11043 )...
  18. 08年中报大幅预增股
  19. 【activityMQ】一头扎进activeMQ学习
  20. 2020全国大学生数学建模C题

热门文章

  1. Dropout 丢弃法 动手学深度学习v2 pytorch
  2. 机器学习 Machine Learning- 吴恩达Andrew Ng 第6~10课总结
  3. 算法:求树的最大深度104. Maximum Depth of Binary Tree
  4. jxl java mer_导出报表出错,有没有大神懂得
  5. 鸿蒙手机开发者活动,华为 12 月16 日举行鸿蒙 2.0 手机开发者 Beta 活动
  6. async python两个_Python多线程一览
  7. GOOD AI Example GREAT AI Company
  8. elkan K-Means
  9. uva1583-digit generator
  10. 剑指offer之扑克牌的顺子