当前位置: 首页 > news >正文

Redis—5种基本数据类型

5 种基本数据类型

String(最常用)

Redis 字符串是最基本的 Redis 数据类型,表示字节序列,一个 key 对应一个 value

基本命令

# 获取存储在给定键中的值
GET key# 设置存储在给定键中的值
SET key# 删除存储在给定键中的值
DEL key# 将键存储的值加1
INCR key# 将键存储的值减1
DECR key# 将键存储的值加上整数
INCRBY key amount# 将键存储的值减去整数
DECRBY key amount# 如果key不存在则给定值,返回0则表示失败,返回1表示成功
SETNX key value

使用场景

  • 缓存: 经典使用场景,把常用信息,字符串,图片或者视频等信息放到redis中,redis作为缓存层,mysql做持久化层,降低mysql的读写压力。
  • 计数器:redis是单线程模型,一个命令执行完才会执行下一个,同时数据可以一步落地到其他的数据源。
  • 分布式锁、分布式 session、分布式限流(注:分布式锁和限流器不仅限于 string)

List

Redis 中的 List 其实就是链表(Redis 使用双端队列实现 List)

基本命令

RPUSH key value # 将指定值加入到list右端
LPUSH key value  RPOP key   #从右端弹出一个指定值
LPOP keyLRANGE #  获取列表在给定范围上的所有值LINDEX 
# 通过索引获取列表中的元素。你也可以使用负数下标,
# 以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

使用场景

  1. 消息排队功能,比如新浪微博的 TimeLine
  2. 消息队列,使用 PUSH 和 POP 命令来对任务进行存和取(缺点:生产者需要自行实现全局性唯一 ID,不能以消费组的形式消费数据)

Hash

Redis 哈希值是一种记录类型,映射为字段-值对的集合

基本命令

# 添加键值对
HSET hash-key key value# 获取键对应的值
HGET hash-key key# 获取所有键值对
HGETALL hash-key# 如果存在这个键,就删除
HDEL hash-key key

使用场景

  • 缓存:经常使用某些字段的内容 ,如:用户信息,购物车信息,视频信息。

Set

Redis 集是唯一字符串的无序集合,其作用类似于编程语言中的集合(例如 Java HashSet、Python Set 等)。使用 Redis 集合,可以在 O(1) 时间内添加、删除和测试是否存在(无论集合元素的数量有多少)。

基本命令

# 向集合中添加一个或多个成员
SADD key value# 获得集合的成员数
SCARD key# 返回集合中的所有成员
SMEMBERS key # 判断某元素是否在集合中
SISMEMBER key value

使用场景:

利用去重的唯一性

  1. 标签:给用户添加标签,或者用户给消息添加标签,这样有统一标签的可以推荐给关注的人或者关注的事
  2. 聚合场景:共同点赞、收藏,一些抽奖互动

Zset

Redis 排序集是唯一字符串的集合,它们通过每个字符串的关联分数来维护顺序

基本命令:

# 将一个带有给定分值的成员添加到有序集合里面
ZADD zset-key 178 member1 185 member2# 根据元素在有序集合中所处的位置,从有序集合中获取多个元素
ZRANGE zset-key 0-1 withccores# 如果给定元素成员存在于有序集合中,那么就移除这个元素
ZREM zset-key member1# 获取给定元素的分数
ZSCORE zset-key member1

使用场景:

  • 排行榜:有序集合经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。

相关文章:

  • LZO索引文件失效说明
  • 【C++】每周一题——2024.3.3
  • MongoDB Helloworld For Window
  • b站小土堆pytorch学习记录——P14 torchvision中的数据集使用
  • 【Java EE 】认识文件与Java文件操作
  • JVM堆内存中新生代晋升到老年代的条件
  • 【机器学习】CIFAR-10数据集简介、下载方法(自动)
  • 为什么有了HTTP协议,还要有WebSocket协议?
  • Spring总结之构造注入
  • TypeError: `dumps_kwargs` keyword arguments are no longer supported
  • ASCLL码表
  • JAVA集合4-HashMap
  • 【R语言简介】讲解
  • Python并发编程:协程-gevent模块
  • 本科毕业设计:计及并网依赖性的分布式能源系统优化研究。(C语言实现)(内包含NSGA II优化算法)(二)
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 30秒的PHP代码片段(1)数组 - Array
  • 30天自制操作系统-2
  • es6(二):字符串的扩展
  • HTTP那些事
  • LeetCode算法系列_0891_子序列宽度之和
  • SQLServer之创建数据库快照
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 手写双向链表LinkedList的几个常用功能
  • 用mpvue开发微信小程序
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​LeetCode解法汇总518. 零钱兑换 II
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • (4) PIVOT 和 UPIVOT 的使用
  • (AngularJS)Angular 控制器之间通信初探
  • (强烈推荐)移动端音视频从零到上手(上)
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转载)OpenStack Hacker养成指南
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET MVC第三章、三种传值方式
  • :如何用SQL脚本保存存储过程返回的结果集
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [Angular 基础] - 指令(directives)
  • [ANT] 项目中应用ANT
  • [BUG]vscode插件live server无法自动打开浏览器
  • [bzoj 3534][Sdoi2014] 重建
  • [C#] 如何调用Python脚本程序
  • [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)
  • [C++]二叉搜索树
  • [CERC2017]Cumulative Code
  • [ERROR] 不再支持目标选项 5。请使用 7 或更高版本
  • [iOS]-网络请求总结
  • [javaSE] 看知乎学习工厂模式
  • [LeetCode] Ransom Note 赎金条