Redis常用数据类型及其应用场景

2023-06-29 19:18:37

String

字符串(String):可以存储任意类型的数据,比如字符串、整数、浮点数等。

Redis中String数据类型的常用命令包括:

  1. 设置值:SET key value,设置键key的值为value。
  2. 获取值:GET key,获取键key的值。
  3. 获取值的长度:STRLEN key,获取键key的值的长度。
  4. 追加值:APPEND key value,将值value追加到键key的值的末尾。
  5. 自增:INCR key,将键key的值加1。
  6. 自减:DECR key,将键key的值减1。
  7. 自增指定值:INCRBY key increment,将键key的值增加指定的increment值。
  8. 自减指定值:DECRBY key decrement,将键key的值减少指定的decrement值。
  9. 设置过期时间:EXPIRE key seconds,为键key设置过期时间,单位为秒。
  10. 删除键:DEL key,删除指定的键key。

应用场景: 一般常用在需要计数的场景,比如用户的访问次数、热点文章的点赞转发数量等等。

List

列表(List):按照插入顺序存储一组有序的元素,元素可以重复。可以执行从列表头部或尾部插入、删除、修剪等操作。

Redis中List数据类型的常用命令包括:

  1. 左边插入元素:LPUSH key value1 [value2 ...],将一个或多个值插入到列表key的左边。
  2. 右边插入元素:RPUSH key value1 [value2 ...],将一个或多个值插入到列表key的右边。
  3. 获取指定范围的元素:LRANGE key start stop,获取列表key中指定范围内的元素。
  4. 获取列表长度:LLEN key,获取列表key的长度。
  5. 弹出左边第一个元素:LPOP key,从列表key的左边弹出并返回第一个元素。
  6. 弹出右边第一个元素:RPOP key,从列表key的右边弹出并返回第一个元素。
  7. 在指定元素前或后插入元素:LINSERT key BEFORE|AFTER pivot value,在列表key中,在元素pivot前或后插入新元素value。
  8. 根据索引设置元素值:LSET key index value,将列表key中索引位置的元素设置为value。
  9. 根据索引获取元素值:LINDEX key index,获取列表key中索引位置的元素值。
  10. 截取列表:LTRIM key start stop,保留列表key中指定范围内的元素,其他元素删除。

应用场景: 发布与订阅或者说消息队列、慢查询。

Hash

存储键值对的无序集合,适合存储对象的属性。可以对单个哈希键执行设置、获取、删除操作,也可以对整个哈希执行获取全部键值对等操作。

Redis中Hash数据类型的常用命令包括:

  1. 设置字段值:HSET key field value,设置哈希表 key 中字段 field 的值为 value。
  2. 获取字段值:HGET key field,获取哈希表 key 中字段 field 的值。
  3. 批量设置字段值:HMSET key field1 value1 [field2 value2 ...],同时设置多个字段的值。
  4. 批量获取字段值:HMGET key field1 [field2 ...],同时获取多个字段的值。
  5. 获取所有字段和值:HGETALL key,获取哈希表 key 中的所有字段和值。
  6. 判断字段是否存在:HEXISTS key field,判断哈希表 key 中是否存在字段 field。
  7. 删除字段:HDEL key field1 [field2 ...],删除哈希表 key 中的一个或多个字段。
  8. 获取字段数量:HLEN key,获取哈希表 key 中字段的数量。
  9. 获取所有字段:HKEYS key,获取哈希表 key 中的所有字段。
  10. 获取所有值:HVALS key,获取哈希表 key 中的所有值。

应用场景: 系统中对象数据的存储。

Set

集合(Set):存储唯一、无序的元素集合,不允许重复。可以对集合进行添加、删除、查找、交集、并集等操作。

Redis中Set数据类型的常用命令包括:

  1. 添加一个或多个元素:SADD key member1 [member2 ...],向集合key中添加一个或多个元素。
  2. 获取集合中的所有成员:SMEMBERS key,获取集合key中的所有成员。
  3. 判断元素是否属于集合:SISMEMBER key member,判断元素member是否是集合key的成员。
  4. 获取集合的基数(元素数量):SCARD key,获取集合key的基数。
  5. 移除一个或多个元素:SREM key member1 [member2 ...],从集合key中移除一个或多个元素。
  6. 返回并移除集合中的一个随机元素:SPOP key,从集合key中随机移除并返回一个元素。
  7. 返回集合中的一个随机元素:SRANDMEMBER key [count],从集合key中返回一个或多个随机元素。
  8. 计算多个集合的交集:SINTER key1 [key2 ...],计算给定多个集合的交集。
  9. 计算多个集合的并集:SUNION key1 [key2 ...],计算给定多个集合的并集。
  10. 计算多个集合的差集:SDIFF key1 [key2 ...],计算给定多个集合的差集。

应用场景: 需要存放的数据不能重复以及需要获取多个数据源交集和并集等场景。

Sorted Set

有序集合(Sorted Set):存储唯一、有序的元素集合,每个元素都关联一个分数,用于根据分数排序。可以对有序集进行添加、删除、查找、按照分数范围获取等操作。

Redis中有序集合(Sorted Set)数据类型的常用命令包括:

  1. 添加一个或多个成员:ZADD key score1 member1 [score2 member2 ...],向有序集合key中添加一个或多个成员,每个成员都关联一个分数进行排序。
  2. 获取有序集合的成员数量:ZCARD key,获取有序集合key的成员数量。
  3. 获取指定成员的分数:ZSCORE key member,获取有序集合key中指定成员的分数。
  4. 增加指定成员的分数:ZINCRBY key increment member,将有序集合key中指定成员的分数增加increment。
  5. 获取有序集合的指定区间的成员:ZRANGE key start stop [WITHSCORES],按索引区间获取有序集合key的成员,可选择同时返回成员的分数。
  6. 获取有序集合的指定分数范围的成员:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count],按分数范围获取有序集合key的成员,可选择同时返回成员的分数,并可设置偏移量和数量。
  7. 移除一个或多个成员:ZREM key member1 [member2 ...],从有序集合key中移除一个或多个成员。
  8. 计算有序集合指定区间内的成员数量:ZCOUNT key min max,计算有序集合key在指定分数范围内的成员数量。
  9. 获取有序集合中指定成员的排名:ZRANK key member,获取有序集合key中指定成员的排名,按分数从小到大排序,排名从0开始。
  10. 获取有序集合中指定成员的分数值:ZREVRANK key member,获取有序集合key中指定成员的分数值,按分数从大到小排序,排名从0开始。

应用场景: 需要对数据根据某个权重进行排序的场景。比如在直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息。

Bitmap

Bitmap 存储的是连续的二进制数字(0 和 1),通过 bitmap, 只需要一个 bit 位来表示某个元素对应的值或者状态,key 就是对应元素本身 。我们知道 8 个 bit 可以组成一个 byte,所以 bitmap 本身会极大的节省储存空间。

Redis中位图(Bitmap)数据类型的常用命令包括:

  1. 设置指定偏移量上的位值:SETBIT key offset value,设置位图key中指定偏移量上的位值为value(0或1)。
  2. 获取指定偏移量上的位值:GETBIT key offset,获取位图key中指定偏移量上的位值。
  3. 统计位图中值为1的位的数量:BITCOUNT key [start end],统计位图key中指定范围内(闭区间)的值为1的位的数量。
    • 若不指定范围,则统计整个位图中值为1的位的数量。
  4. 对一个或多个位图执行逻辑与(AND)操作并存储结果:BITOP AND destkey key [key ...],对指定的一个或多个位图key执行逻辑与操作,并将结果存储到destkey中。
  5. 对一个或多个位图执行逻辑或(OR)操作并存储结果:BITOP OR destkey key [key ...],对指定的一个或多个位图key执行逻辑或操作,并将结果存储到destkey中。
  6. 对一个位图执行逻辑非(NOT)操作并存储结果:BITOP NOT destkey key,对指定的位图key执行逻辑非操作,并将结果存储到destkey中。
  7. 对一个位图执行逻辑异或(XOR)操作并存储结果:BITOP XOR destkey key [key ...],对指定的一个或多个位图key执行逻辑异或操作,并将结果存储到destkey中。
  8. 获取位图的指定范围内的子位图:GETRANGE key start end,获取位图key中指定范围内的子位图。
  9. 设置指定范围内的位值,并返回修改后的位图:SETRANGE key offset value,设置位图key中指定范围内的位值为value,并返回修改后的位图。

应用场景: 适合需要保存状态信息(比如是否签到、是否登录…)并需要进一步对这些信息进行分析的场景。比如用户签到情况、活跃用户情况、用户行为统计(比如是否点赞过某个视频)。

更多推荐

大型游戏动作竞技游戏开发和体感VR/AR游戏开发:创造引人入胜的虚拟世界

大型游戏动作竞技游戏和体感VR/AR游戏都代表了游戏开发领域的最新趋势。它们提供了高度沉浸式的娱乐体验,结合了视觉、听觉和体感互动。在本文中,我们将探讨如何开发这两种类型的游戏,并介绍其关键特点和开发流程。大型游戏动作竞技游戏的特点高品质图形:这些游戏通常具有引人入胜的3D图形,精美的场景和角色模型。多人在线模式:大多

运维:Powershell面向对象编程简介

运维/powershellPowershell面向对象编程简介作者:李俊才(jcLee95):https://blog.csdn.net/qq_28550263邮箱:291148484@163.com本文地址:https://blog.csdn.net/qq_28550263/article/details/13287

Day46:项目-购物车案例

购物车案例准备工作首页默认加载,其余页面懒加载调用defineStore方法构建store入口main做对应配置,找指南,快速开始,把elementplus引入进来import{createApp}from"vue";import{createPinia}from"pinia";import"./style.css";

微信小程序——生命周期详解(代码解读)

✅作者简介:2022年博客新星第八。热爱国学的Java后端开发者,修心和技术同步精进。🍎个人主页:JavaFans的博客🍊个人信条:不迁怒,不贰过。小知识,大智慧。💞当前专栏:微信小程序学习分享✨特色专栏:国学周更-心性养成之路🥭本文内容:微信小程序——使用Vant组件实现Popup弹出层(各位置弹出详细代码分

卷积神经网络(一)

文章目录前言卷积层多通道池化层代码前言从外行者角度看卷积神经网络会说无非就是卷积层后面跟着一个池化层,但是深入代码实际编写卷积神经网络总是有些困难的。其中包括各种细节比如数据格式、尺寸变化、运算规定等。参考:{{Citejournal|last1=Zhang|first1=Aston|last2=Lipton|firs

tcp_v4_connect函数的解析

源码:inttcp_v4_connect(structsock*sk,structsockaddr*uaddr,intaddr_len){//解析输入的地址结构structsockaddr_in*usin=(structsockaddr_in*)uaddr;//获取TCP协议栈的全局death_row对象structi

STM32H5开发(5)----串口打印配置

STM32H5开发----4.开发板介绍概述样品申请硬件准备生成例程配置调试口代码生成配置项目配置调试配置串口重定向打印测试结果概述在使用STM32CUBEIDE开发STM32H5项目时,串口打印被证明是一项极其有益的调试工具,能够在开发过程中实时输出信息和调试数据,起到了至关重要的作用。通过充分利用串口打印功能,开发

Netty面试题(一)

文章目录前言一、BIO、NIO和AIO的区别?二、NIO的组成?三、Netty的特点?总结前言BIO、NIO和AIO的区别?NIO的组成?Netty的特点?一、BIO、NIO和AIO的区别?BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。伪异步IO:将请求连接放入线程池,一对

从零学算法(剑指 Offer 33)

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树:5/\26/\13示例1:输入:[1,6,3,2,5]输出:false示例2:输入:[1,3,2,6,5]输出:true我的思路:二叉搜索树就是左节点都

DS相关题目

DS相关题目题目一:消失的数字拿到这道题目之后,首先可以想到的一个解题方法就是,我们可以先排序,排完序之后,这个数组其实就是一个有序的数组了,那只用比较数组中的每一个元素和他对应的下标是不是相等的,如果是相等的,那么就说明对应的数字其实是存在的,如果是不相等的,那么就说明对应的数字其实就是不存在的了,但是如果要排序的话

GIS前端-地图操作与交互

GIS地图操作与交互地图操作与交互基本原理Leaflet提供的事件缩放控件常用的基础功能通常是一个应用系统所必需的,如地图的缩放、导航、定位、弹出框等,它让一张静态的地图动起来,让地图承载更多的空间信息,并以友好的交互方式呈现给用户。例如,一个大众应用的旅游GIS系统,如果仅仅在Web端显示一张地图,那么这时只能看到一

热文推荐