Redis支持的数据类型及其使用场景
目录
- `Redis` 支持的数据类型
- 使用场景
- `String` 类型
- `Hash` 类型
- `List` 列表类型
- `Set` 类型
- `Zset` 类型
Redis
支持的数据类型
Redis
支持的五种数据类型
String
:字符串类型Hash
:哈希,散列表类型List
:列表类型Set
:(集合)Zset
:有序集合
使用场景
String
类型
String
类型是 Redis
中最常见的数据类型,其使用场景如下
- 缓存:简单的
key-value
存储,可以用于热点数据的缓存、对象缓存、全页缓存、可以提升热点数据的访问数据 - 位统计:在线用户统计,文章访问量,记录每个用户的访问次数等。方案:常用键名:
pageview:userid
,如果一个用户的id
为123
,那对应的Redis
的key
就为pageview:123
,value
就为用户的访问次数,增加次数可以使用命令:incr
- 计数器:文章的阅读量、微博点赞数、允许一定的延迟,先写入
Redis
再定时持久化同步到数据库
set key 0
incr key // incr readcount::{帖子id} 每阅读一次
get key // get readcount::{帖子id} 获取阅读量
- 分布式全局唯一
id
:分布式全局唯一id
的实现方式有很多,这里只介绍用redis
实现
每次获取userId
的时候,对userId
加1
再获取,可以改进为如下形式
直接获取一段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
类型
Redis
的 Set
是 String
类型的无序集合,和 list
不同的是,Set
中不会出现重复的成员,集合最大的好处就是可以进行交集或差集的操作
- 将每个人的好友存在
Set
中,可避免重复 - 好友、关注、粉丝、感兴趣的人等的集合
sismember key member //判断 member 元素是否是集合 key 的成员
smove source destination member //将 member 元素从 source 集合移动到 destination 集合
scard key //获取集合的成员数
- 寻找两个人的共同好友,使用
sinter
求交集
示例,实现点赞、签到、打卡。假如微博 ID
是 t1001
,用户 ID
是 u3001
。用 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
中的 Zset
和 Set
一样,都是 String
类型的集合,也不允许有重复的成员,但不同的是 Zset
的每个元素都会有一个 double
类型的分数 score
与之关联,而 Redis
也是通过这个分数来为这个集合排序的
- 电商商品综合排名
- 按价格排名
- 在线游戏的积分排行榜、热点新闻排行榜
// user1的用户分数为 10
zadd ranking 10 user1
zadd ranking 20 user2
// 取分数最高的3个用户
zrevrange ranking 0 2 withscores
Redis支持的数据类型及其使用场景相关推荐
- Redis支持的数据类型以及使用场景,持久化,哨兵机制,缓存击穿,缓存穿透
Redis支持的数据类型以及使用场景,持久化,哨兵机制,缓存击穿,缓存穿透 简单介绍一个redis? redis是内存中的数据结构存储系统,一个key-value类型的非关系型数据库,可持久化的数据库 ...
- Redis五种数据类型及应用场景
Redis五种数据类型及应用场景 MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样 ...
- Redis八种数据类型及应用场景介绍
本文来说下Redis八种数据类型及应用场景介绍 文章目录 概述 String 介绍 应用场景 Hash 介绍 应用场景 List 介绍 应用场景 Set 介绍 应用场景 ZSet 介绍 应用场景 Bi ...
- 2 万字 + 20张图| 细说 Redis 九种数据类型和应用场景
作者:小林coding 计算机八股文网(操作系统.计算机网络.计算机组成.MySQL.Redis):https://xiaolincoding.com 大家好,我是小林. 我们都知道 Redis 提供 ...
- redis五种数据类型的使用场景
string 1.String 常用命令: 除了get.set.incr.decr mget等操作外,Redis还提供了下面一些操作: 获取字符串长度 往字符串append内容 设置和获取字符串的某一 ...
- 【缓存中间件】redis 支持的数据类型
文章目录 前言 一.字符串 二.哈希 三. 列表 四.集合 五.有序集合 六.位图 Redis Bitmap 七.基数统计 HyperLogLog 八.Geo 地理位置 九.Streams 流 应用场 ...
- Redis中的数据类型及其应用场景
redis中有哪些数据类型?这个问题我被面试官问过好多次了,下面总结下这5种数据类型的特点,命令,还有应用场景 redis客户端的一些通用命令: ping # 测试redis是否链接 如果已链接返回 ...
- redis五种数据类型的应用场景_Redis五种不同的数据类型
一.redis集群测试环境搭建 参考文章:https://www.jianshu.com/p/0a2f8f80983a redis-cli -c -h 10.96.87.129 -p 7001注意:- ...
- Redis系列四:redis支持的数据类型
一.字符串<String> 1. 字符串类型:实际上可以是字符串(包括XML JSON),还有数字(整形 浮点数),二进制(图片 音频 视频),最大不能超过512MB 2. 设值命令: s ...
- redis五种数据类型及使用场景
Redis 数据类型 转载自https://blog.csdn.net/zzu_seu/article/details/106323114 五种类型与类比java的模型 string --> S ...
最新文章
- 一致吗 驱动_外国不过春节?AMD驱动再更新,解决BUG,游戏不闪退,重启不黑屏...
- 电脑睡眠快捷键_电脑快速进入睡眠的快捷键是什么?
- 动态规划之图像压缩问题
- thinking of 抵制家乐福
- c语言成绩统计与学籍管理源码,[源码和文档分享]基于C语言的学生成绩管理系统...
- wxpython播放视频_使用wxpython显示网络摄像头视频闪烁
- 华为提出 New IP,欲打破长达半世纪的IP协议重塑互联网
- 论文文献综述的题目是什么样的,应该怎么写?
- 人到中年:“无爱、无话、无性”
- 2020年中国云原生用户调研的十二个要点
- 关于MySQL错误提示ERROR 1265 (01000)的问题分析及解决方案
- 支付FM——云闪付收款码配置教程
- html5的基本工作原理,HTML5基础开发教程
- 计算机视觉之图像分割——水平集方法_ACWE2001
- C++满足条件的数累加
- BUUCTF-Crypto学习笔记(二)
- php 缓冲区溢出漏洞,在Linux 容器中对php-fpm缓冲区溢出漏洞的复现分析 ( CVE-2019-11043 )...
- 08年中报大幅预增股
- 【activityMQ】一头扎进activeMQ学习
- 2020全国大学生数学建模C题
热门文章
- Dropout 丢弃法 动手学深度学习v2 pytorch
- 机器学习 Machine Learning- 吴恩达Andrew Ng 第6~10课总结
- 算法:求树的最大深度104. Maximum Depth of Binary Tree
- jxl java mer_导出报表出错,有没有大神懂得
- 鸿蒙手机开发者活动,华为 12 月16 日举行鸿蒙 2.0 手机开发者 Beta 活动
- async python两个_Python多线程一览
- GOOD AI Example GREAT AI Company
- elkan K-Means
- uva1583-digit generator
- 剑指offer之扑克牌的顺子