当前位置:

首页 > 编程开发 > Redis的通用命令有哪些

Redis的通用命令有哪些

Redis是什么Redis是开源,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串strings,散列hashes,列表lists,集合sets,有序集合sortedsets与范围查询,bitmaps,hyperloglogs和地理空间(geospatial)索引半径查询。Redis还内置了复制(replication),LUA脚本(Luascripting),LRU驱动事件(LRUeviction),事务(transactions)和不同级别的磁盘持久化(

Redis 是什么

Redis 是 开源,内存 中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如 字符串strings, 散列 hashes, 列表 lists, 集合 sets, 有序集合 sorted sets 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。

Redis 还内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

嗯,没错这就是 redis 中文官方网站上面的介绍,简洁明了。

NoSQL 是什么

我们知道 redis 是一种非关系型数据库 NoSQL 。而为什么出现 NoSQL?NoSQL 又是什么呢?

单机数据库的年代

在一个网站访问量不大的时候,我们使用一个数据库就足以应对流量请求。

Redis的通用命令有哪些

缓存 + 拆分

随着访问量的上升,一个数据库已经不能满足我们的需求了。为了更高的性能,我们在中间加上了一个缓存层并且将数据库做了集群、结构优化和读写分离。

Redis的通用命令有哪些

而这里的缓存就是 NoSQL,当然做缓存也只是 NoSQL 的一种功能,就像 Redis 并不仅仅有缓存这一种功能。比如它还能实现 简单的消息队列,解决Session共享,计数器,排行榜,好友关系处理 等等功能,可见 Redis 是一个非常强大工具,让我们来学习它吧!

Redis 通用命令

首先我们抛开数据类型来讲关于 Redis 的通用命令。

Redis的通用命令有哪些

操作 key 和 value

Redis 是一种 key value 存储的缓存数据库,所有的数据都有一个自己唯一的key。

这里为了方便演示,我使用了字符串相关的设置命令

  •  keys [pattern] 获取符合要求的所有key。时间复杂度为 O(n),一般在生产环境中不使用,因为 Redis 是单线程的,执行耗时的任务会阻塞其他任务。一般会使用 scan 命令替代(非阻塞)。

Redis的通用命令有哪些

  •  dbsize 获取当前存储数据个数。

  •  exists key 判断是否存在该key

  •  del key 删除指定数据

  •  type key 获取指定key的数据类型

  •  rename key newkey 重命名

Redis的通用命令有哪些

过期时间

Redis 中很多数据都是用来作为缓存数据的,而作为缓存就需要有过期时间,在 Redis 中提供了很强大的过期时间设置功能。

  •  expire key seconds 为某个 key 设置过期时间。

  •  ttl key 查看某个 key 的剩余时间,返回正数代表剩余的时间,-1代表永久,-2代表已过期或不存在。

Redis的通用命令有哪些

Redis 的五种基本数据类型

在上面我说到了很多 Redis 作为缓存能实现的其他功能,比如计数器,排行榜,好友关系等,这些实现的依据就是靠着 Redis 的数据结构。在整个 Redis 中一共有五种基本的数据结构(还有些高级数据结构以后会讲),他们分别是 字符串strings, 散列 hashes, 列表 lists, 集合 sets, 有序集合 sorted sets。

字符串 string

在绝大部分编程语言中都有 String 字符串类型,对于作为数据库的 Redis 也是必不可少的。

Redis的通用命令有哪些

  •  set key value 设置值

  •  get key 获取某个key的值

  •  mset key1 value1 key2 value2 批量设置并且是原子的,可以用来减少网络时间消耗

  •  mget key1 key2 批量获取并且是原子的,可以用来减少网络时间消耗 

Redis的通用命令有哪些

  •  incr key 自增指定key的值

  •  decr key 自减指定key的值

  •  incrby key value 自增指定数值

  •  decrby key value 自减指定数值

  •  incrbyfloat key floatvalue 增加指定浮点数,前面几个操作就可以用来实现计数器的功能。

Redis的通用命令有哪些

  •  setnx key value 如果不存在该key则可以设置成功,否则会失败,加上过期时间限制,则是redis实现分布式锁的一种方式(后面会提到)。

  •  set key value xx 与前面相反,如果存在则设置成功,否则失败(相当于更新操作)

Redis的通用命令有哪些

hash

Redis的通用命令有哪些

其实我们可以理解 hash 为 小型 Redis ,Redis 在底层实现上和 Java 中的 HashMap 差不多,都是使用 数组 + 链表 的二维结构实现的。

Redis的通用命令有哪些

不同的是,在 Redis 中字典的值只能是字符串,而且他们 rehash 的方式不一样,在 Redis 中使用的是 渐进式rehash 。

在 rehash 的时候会保留新旧两个 hash 字典,在数据迁移的时候会将旧字典中的内容一点一点迁移到新字典中,查询的同时会查询两个 hash 字典,等数据全部迁移完成才会将新字典代替就字典。

下面我们来看一下关于 hash 的基本操作。

  •  hset key field value 设置字典中某个key的值

  •  hsetnx key field value 设置字典中某个key的值(不存在的)

  •  hmset key field1 value1 field2 value2 … 批量设置

  •  hget key field 获取字典中某个key的值

  •  hmget key field1 field2 批量获取

  •  hgetall key 获取全部   

Redis的通用命令有哪些

  •  hdel key field 删除某个key

  •  hexists key field 判断是否存在

  •  hlen key 获取指定key对应的字典中的存储个数

  •  hvals key 返回所有的value

  •  hkeys key 返回所有的key   

Redis的通用命令有哪些

Redis的通用命令有哪些

  • hincrby key field increValue 增加某个value的值(也可以增加负数)

  • hincrbyfloat key field floatValue 增加某个value的值(浮点数)

Redis的通用命令有哪些

list

Redis 中的列表相当于 Java 中的 LinkedList(双向链表) ,也就是底层是通过 链表 来实现的,所以对于 list 来说 插入删除操作很快,但 索引定位非常慢。

Redis的通用命令有哪些

Redis 提供了许多对于 list 的操作,如出,入等操作,你可以充分利用它们来实现一个 栈 或者 队列。

Redis的通用命令有哪些

下面我们来看一下关于 list 的基本操作。

  •  lpush key item1 item2 item3… 从左入栈

  •  rpush key item1 item2 item3… 从右入栈

  •  lpop key 从左出栈

  •  rpop key 从右出栈

  •  lindex key index 获取指定索引的元素 O(n)谨慎使用

  •  lrange key start end 获取指定范围的元素 O(n)谨慎使用   

Redis的通用命令有哪些

  • linsert key before|after item newitem 在指定元素的前面或者后面添加新元素

  • lrem key count value 删除指定个数值为value的元素

    •   count = 0 :删除所有值为value的元素

    •   count > 0 :从左到右删除 count 个值为 value 的元素

    •   count < 0 :从右到做删除 |count| 个值为 value 的元素

  •  ltrim key start end 保留指定范围的元素

  •  lset key index newValue 更新某个索引的值

Redis的通用命令有哪些

  •  blpop key timeout 没有则阻塞(timeout指定阻塞时间 为0代表永久)

  •  brpop key timeout 没有则阻塞(timeout指定阻塞时间 为0代表永久) 这两个可以用来实现消费者生产者

Redis的通用命令有哪些

总结来说我们可以使用 左入又出或者右入左出 来实现队列,左入左出或者右入右出 来实现栈。

set

Redis 中的 set 相当于 Java 中的 HashSet(无序集合),其中里面的元素不可以重复,我们可以利用它实现一些去重的功能。我们还有对几个集合进行取交集,取并集等操作,这些操作就可以获取不同用户之间的共同好友,共同爱好等等。

Redis的通用命令有哪些

下面我们就来看一下关于 set 的一些基本操作。

  •  sadd key value 添加元素

  •  sdel key value 删除某个元素

  •  sismember key value 判断是否是集合中的元素

  •  srandmember key count 随机获取指定个数的元素(不会影响集合结构)

  •  spop key count 从集合中随机弹出元素(会破坏结合结构)

  •  smembers key 获取集合所有元素 O(n)复杂度

  •  scard key 获取集合个数

Redis的通用命令有哪些

  •  sinter set1 set2 … 获取所有集合中的交集

  •  sdiff set1 set2 … 获取所有集合中的差集

  •  sunion set1 set2 … 获取所有集合中的并集

Redis的通用命令有哪些

zset

Redis 中的 zset 是一个 有序集合,通过它可以实现很多有意思的功能,比如学生成绩排行榜,视频播放量排行榜等等。

Redis的通用命令有哪些

zset 中是使用 跳表 来实现的,我们知道只有数组这种连续的空间才能使用二分查找进行快速的定位,而链表是不可以的。跳表帮助链表查找的时候节省了很多时间(使用跳的方式来遍历索引来进行有序插入),如果不了解跳表的同学可以补习一下。

Redis的通用命令有哪些

Redis 中的事务和管道

管道 Pipeline

在某些场景下我们在一次操作中可能需要执行多个命令,而如果我们只是一个命令一个命令去执行则会浪费很多网络消耗时间,如果将命令一次性传输到 Redis 中去再执行,则会减少很多开销时间。

但是需要注意的是 pipeline 中的命令并不是原子性执行的,也就是说管道中的命令到达 Redis 服务器的时候可能会被其他的命令穿插。

Redis的通用命令有哪些

Redis的通用命令有哪些

事务

关系型数据库具有 ACID 特性,Redis 能保证A(原子性)和I(隔离性),D(持久性)看是否有配置 RDB或者 AOF 持久化操作,但无法保证一致性,因为 Redis 事务不支持回滚。

我们可以简单理解为 Redis 中的事务只是比 Pipeline 多了个原子性操作,也就是不会被其他命令给分割,如上图。

  •  multi 事务开始的标志

  •  exec 事务执行

Redis的通用命令有哪些

  •  discard 清除在这个事务中放入队列的所有命令,即解除整个事务。

  •  watch key 在事务开始前监控某个元素,如果在提交事务的时候发现这个元素的值被其他客户端更改了则事务会运行失败。

  •  unwatch key 解除监控

Redis的通用命令有哪些

本文内容来源于互联网,如有侵权请联系删除。
作者最新文章
编程开发
相关文章 更多
C++动态数组初始化怎么写?常用语句与代码示例
C++动态数组初始化怎么写?常用语句与代码示例

深入解析C++中动态数组的初始化机制,涵盖new操作符的不同用法、基本类型与类对象的初始化差异,以及为何在现代C++开发中应优先使用std::vector。

using namespace 使用中遇到的问题怎么解决
using namespace 使用中遇到的问题怎么解决

命名空间的基本概念与常见引入问题在C++等编程语言中,命名空间(namespace)是一种将代码标识符(如变量、函数、类名)封装在特定名称下的机制,其主要目的是避免命名冲突,尤其是在大型项目或使用多个第三方库时。使用“using namespace”指令可以将指定命名空间中的所有名称引入当前作用域,

c语言函数递归 实操经验总结:这些技巧很实用
c语言函数递归 实操经验总结:这些技巧很实用

理解递归的基本原理在C语言中,递归是一种函数调用自身的编程技术。要掌握它,首先需要理解其核心思想:将一个复杂的大问题,分解为一个或几个与原问题相似但规模更小的子问题,直到子问题足够简单,可以直接求解。这个过程通常包含两个关键部分:递归出口和递归体。递归出口定义了问题何时不再继续分解,即最简单、可直接

c语言函数递归 怎么选?常见方案对比分析
c语言函数递归 怎么选?常见方案对比分析

递归函数的基本概念与适用场景在C语言编程中,递归是一种函数调用自身的编程技巧。它并非适用于所有问题,但在处理某些具有自相似结构的问题时,能提供极其清晰和优雅的解决方案。递归的核心思想是将一个大规模问题分解为一个或多个同类型但规模更小的子问题,直到子问题简单到可以直接求解。典型的适用场景包括树形结构的

Objective-C 内存管理入门:从 alloc 到 dealloc 的生命周期详解
Objective-C 内存管理入门:从 alloc 到 dealloc 的生命周期详解

理解内存管理的基石在Objective-C的编程世界中,内存管理是开发者必须掌握的核心技能之一。它直接关系到应用的性能、稳定性与资源利用效率。与一些采用自动垃圾回收机制的语言不同,Objective-C在很长一段时间里,依赖一套基于引用计数的、需要开发者部分介入的管理规则。这套规则的核心思想是明确的

如何正确使用 dealloc 以避免 iOS 应用中的内存泄漏
如何正确使用 dealloc 以避免 iOS 应用中的内存泄漏

理解 dealloc 的角色与时机在 iOS 应用开发中,内存管理是保障应用性能与稳定性的基石。dealloc 方法是 Objective-C 中对象生命周期结束时的关键回调,它标志着对象即将被系统回收内存。正确理解其触发时机至关重要:当一个对象的引用计数降为零时,运行时系统会自动调用该对象的 de

深入理解 Objective-C 中的 dealloc 方法:内存管理核心机制
深入理解 Objective-C 中的 dealloc 方法:内存管理核心机制

内存管理的基石在Objective-C的世界里,内存管理是开发者必须掌握的核心技能之一。作为一门在手动引用计数(MRC)时代诞生的语言,Objective-C要求程序员对对象的生命周期有清晰的认识。dealloc方法正是这一生命周期中至关重要的终点站。它是一个实例方法,当对象的引用计数降为零时,系统

理解 native2ascii:Java 国际化开发中的字符编码工具
理解 native2ascii:Java 国际化开发中的字符编码工具

native2ascii 工具的基本定位在Ja va应用程序的国际化与本地化开发过程中,处理非拉丁字符集是一个常见且关键的环节。Ja va内部使用Unicode字符集来统一表示全球各种语言的文字,但其属性文件(.properties)在历史上要求使用ASCII编码,或者更准确地说,要求非ASCII字

如何使用 native2ascii 转换中文字符为 Unicode 转义序列
如何使用 native2ascii 转换中文字符为 Unicode 转义序列

理解 native2ascii 工具的基本用途在软件开发,特别是涉及国际化处理的场景中,开发者常常需要处理不同编码的文本资源。native2ascii 是 Ja va 开发工具包(JDK)中提供的一个命令行实用程序,其主要功能是将包含本地字符编码(非ASCII字符)的文件,转换为包含 Unicode

Java native2ascii 命令详解:解决属性文件乱码问题
Java native2ascii 命令详解:解决属性文件乱码问题

native2ascii 命令的由来与作用在Ja va开发中,处理国际化资源文件是一个常见需求。资源文件通常以.properties格式存储,用于支持多语言界面。然而,Ja va属性文件默认采用ISO-8859-1字符集编码,这导致了一个直接的问题:当文件中包含非拉丁字符(如中文、日文、韩文等)时,

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件
macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

Mac软件 更多
灵活计算器
灵活计算器
macOS/iOS/Android

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师
macOS

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式
Windows/macOS/Linux

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

WINDOWS 更多
Windows 10
Windows 10
Windows

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式
Windows/macOS/Linux

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘
Windows/macOS/iOS/Android

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。