常用redis命令(Redis --- 八种数据类型(基本命令))

2026-05-12 16:30:01 0

常用redis命令(Redis --- 八种数据类型(基本命令))

本篇文章给大家谈谈常用redis命令,以及Redis --- 八种数据类型(基本命令)对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

本文目录

Redis --- 八种数据类型(基本命令)

String、Hash、List、Set和Zset。

等同于java中的, Map《String,String》 string 是redis里面的最基本的数据类型,一个key对应一个value。

应用场景 :String是最常用的一种数据类型,普通的key/value存储都可以归为此类,如用户信息,登录信息和配置信息等;

实现方式 :String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr、decr等操作(自增自减等原子操作)时会转成数值型进行计算,此时redisObject的encoding字段为int。

Redis虽然是用C语言写的,但却没有直接用C语言的字符串,而是自己实现了一套字符串。目的就是为了提升速度,提升性能。 Redis构建了一个叫做简单动态字符串(Simple Dynamic String),简称SDS。

Redis的字符串也会遵守C语言的字符串的实现规则,即 最后一个字符为空字符。然而这个空字符不会被计算在len里头。

Redis动态扩展步骤:

Redis字符串的性能优势

常用命令 :set/get/decr/incr/mget等,具体如下;

ps:计数器(字符串的内容为整数的时候可以使用),如 set number 1。

补充:

等同于java中的: Map《String,Map《String,String》》 ,redis的hash是一个string类型的field和value的映射表, 特别适合存储对象。 在redis中,hash因为是一个集合,所以有两层。第一层是key:hash集合value,第二层是hashkey:string value。所以判断是否采用hash的时候可以参照有两层key的设计来做参考。并且注意的是, 设置过期时间只能在第一层的key上面设置。

应用场景 :我们要存储一个用户信息对象数据,其中包括用户ID、用户姓名、年龄和生日,通过用户ID我们希望获取该用户的姓名或者年龄或者生日;

实现方式 :Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口。如,Key是用户ID, value是一个Map。 这个Map的key是成员的属性名,value是属性值 。这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据。 当前HashMap的实现有两种方式 :当HashMap的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,这时对应的value的redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时redisObject的encoding字段为int。

常用命令 :hget/hset/hgetall等,具体如下:

等同于java中的 Map《String,List《String》》 ,list 底层是一个链表,在redis中,插入list中的值,只需要找到list的key即可,而不需要像hash一样插入两层的key。 list是一种有序的、可重复的集合。

应用场景 :Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现;

实现方式 :Redis list的实现为一个 双向链表 ,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括 发送缓冲队列 等也都是用的这个数据结构。

常用命令 :lpush/rpush/lpop/rpop/lrange等,具体如下:

性能总结 :

它是一个字符串链表,left、right都可以插入添加。

等同于java中的 Map《String,Set《String》》 ,Set 是一种无序的,不能重复的集合。并且在redis中,只有一个key它的底层由hashTable实现的,天生去重。

应用场景 :Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动去重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且 set提供了判断某个成员是否在一个set集合内的重要接口 ,这个也是list所不能提供的;如保存一些标签的名字。标签的名字不可以重复,顺序是可以无序的。

实现方式 :set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

常用命令 :sadd/spop/smembers/sunion等,具体如下:

ZSet(Sorted Set:有序集合) 每个元素都会关联一个double类型的分数score,分数允许重复,集合元素按照score排序( 当score相同的时候,会按照被插入的键的字典顺序进行排序 ),还可以通过 score 的范围来获取元素的列表。

应用场景 :Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以 通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。 当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构,比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。

底层实现 : zset 是 Redis 提供的一个非常特别的数据结构,常用作排行榜等功能,以用户 id 为 value ,关注时间或者分数作为 score 进行排序。实现机制分别是 zipList 和 skipList 。规则如下:

zipList:满足以下两个条件

skipList:不满足以上两个条件时使用跳表、组合了hash和skipList

为什么用skiplist不用平衡树?

主要从内存占用、对范围查找的支持和实现难易程度这三方面总结的原因。

拓展:mysql为什么不用跳表?

常用命令 :zadd/zrange/zrem/zcard等;

***隐藏网址***

可以用来推算两地之间的距离,方圆半径内的人。

***隐藏网址***

一般我们使用Hyperloglog做基数统计。

什么是基数?就是一个集合中不重复的数的个数。

集合A:{1,3,5,7,9,7}

集合B:{1,3,5,7,9}

AB集合的基数都是5

应用:统计网站的访问量(一个人访问网站很多次仍然算作一次)。

优点:占用的内存是固定的,找2^64次方个数的基数,只需要12KB内存。

缺点:有0.81%的错误率,可以忽略不计

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

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

针对上面提到的一些场景,这里进行进一步说明。

使用场景一:用户行为分析 很多网站为了分析你的喜好,需要研究你点赞过的内容。

使用场景二:统计活跃用户

使用时间作为 key,然后用户 ID 为 offset,如果当日活跃过就设置为 1

那么我该如果计算某几天/月/年的活跃用户呢(暂且约定,统计时间内只有有一天在线就称为活跃),有请下一个 redis 的命令

使用场景三:用户在线状态

对于获取或者统计用户在线状态,使用 bitmap 是一个节约空间效率又高的一种方法。

只需要一个 key,然后用户 ID 为 offset,如果在线就设置为 1,不在线就设置为 0。

补充

巨人的肩膀:

***隐藏网址***
***隐藏网址***

redis常用命令是什么

1、连接操作相关命令:


quit:关闭连接(connection)。
auth:简单密码认证。
2、value操作命令:
exists(key):确认key否存。
del(key):删除key。

type(key):返值类型。

使用的注意事项

1、 Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等。 

2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。 

3、虚拟内存–Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘 。

4、过期策略–memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10 。


Redis | Redis 字符串相关命令

Redis 支持多种数据结构,比如 字符串、列表、集合、有序集合 和 哈希 等数据结构。本次我整理了关于 字符串 相关的命令,也就是关于 Strings 相关的命令,如下图。

上图中用红色圈中的部分,就是关于 字符串 相关的命令。如果想要在 Redis 中查看相关的命令也可以使用 help 命令来进行查看,命令如下。

在按下回车后,可以看到相应分类命令的说明,如下图。

图中就是部分关于 Strings 相关的部分命令。

常用 Strings 相关命令

为了大家能够直接复制命令进行测试,下面我就不截图了。

1、set 命令

set 命令的作用是 设置一个 key 的 value 值

设置 key 对应的字符串类型

上面的命令分别对 key1 设置为 value1,对 key2 设置为 value2。

set 命令除了基本的用法外,还有几个参数,先来说一下 nx 和 xx 两个参数。

nx 表示 key 不存在时,执行操作

xx 表示 Key 存在时,执行操作

命令 set k1 v1 nx 表示,当 k1 不存在时,给 k1 设置字符串值为 v1,此时 k1 并不存在,因此该命令被执行;

命令 set k2 v2 xx 表示,当 k2 存在时,给 k2 设置字符串值为 v2,此时 k2 并不存在,因此该命令没有被执行

再介绍另外两个参数,分别是 ex 和 px,ex 和 px 是在进行 set 命令时可以设置过期时间的命令

ex 表示 设置的过期时间以秒为单位

px 表示 设置的过期时间以毫秒为单位

2、setnx 命令

setnx 命令的作用是 当指定的键不存在时给该键设置一个值

该命令类似 set 命令附带了 nx 参数

在上面的命令中,setnx k1 value1,由于 k1 存在,因此命令没有被执行,setnx k2 value2,由于 k2 不存在,因此命令被执行。

当命令执行成功,返回值为 1

当命令执行不成功,返回值为 0

3、get 命令

get 命令的作用是 获取指定 key 的值

该命令已经被多次使用了,演示如下:

4、getset 命令

getset 命令的作用是 设置一个 key 的 value,并获取设置前的值

该命令相当于 先对指定的 key 进行一次 get 操作,再执行一次 set 操作,两个命令合并,可以保证原子性。

5、mget 命令

mget 命令的作用是 一次获取多个 key 的值,如果 key 不存在则返回 nil

可以看到,key3 是不存在的,因此 key3 返回的值是 nil

6、mset 命令

mset 命令的作用是 设置多个key value

7、msetnx 命令

msetnx 命令的作用是 设置多个key value,仅当key不存在时

可以看出,msetnx k4 vv4 k5 vv5 时,此时不存在 k4 和 k5 因此该命令执行成功,在执行 msetnx k4 v4 k5 v5 k6 v6 时,由于 k4 和 k5 已经存在,则使得这条命令执行失败,因此 k4 和 k5 的值仍然是 vv4 和 vv5,并且没有 k6 这个 key。

8、incr 命令

incr 命令的作用是 执行原子加1操作

9、decr 命令

decr 命令的作用是 整数原子减1

10、incrby 命令

incrby 命令的作用是 执行原子增加一个整数

11、decrby 命令

decrby 命令的作用是 原子减指定的整数

12、incrbyfloat 命令

incrbyfloat 命令的作用是 执行原子增加一个浮点数

13、setrange 命令

setrange 命令的作用是 修改字符串指定偏移的值

字符串的偏移从 0 开始,hello 的长度为 5,最后 1 个下标为 4,当我们 setrange kstr 6 x 时,我们将 kstr 下标 6 的位置设置为了 x,因此在下标 5 的位置处给了一个 \x00,即 ASCII 码的 0。

14、getrange 命令

getrange 命令的作用是 获取存储在key上的值的一个子字符串

下标 -1 为最后一个下标,下标 -2 为倒数第二个下标

15、append 命令

append 命令的作用是 追加一个值到key上

总结

这些基础的命令当中,除了可以当作基础的操作 字符串 的命令来用,也有其他方面的用处,比如在高并发当中可以用来设置锁等。把今天整理的命令完善了一个思维导图,图片如下。

关于常用redis命令和Redis --- 八种数据类型(基本命令)的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

常用redis命令(Redis --- 八种数据类型(基本命令))

本文编辑:admin

更多文章:


京东方array制造部干什么(苏州京东方制造一部是干啥的啊)

京东方array制造部干什么(苏州京东方制造一部是干啥的啊)

大家好,京东方array制造部干什么相信很多的网友都不是很明白,包括苏州京东方制造一部是干啥的啊也是一样,不过没有关系,接下来就来为大家分享关于京东方array制造部干什么和苏州京东方制造一部是干啥的啊的一些知识点,大家可以关注收藏,免得下

2026年2月22日 18:15

arguments是函数的属性吗(javascript函数的length属性和arguments的length属性区别)

arguments是函数的属性吗(javascript函数的length属性和arguments的length属性区别)

大家好,关于arguments是函数的属性吗很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于javascript函数的length属性和arguments的length属性区别的知识点,相信应该可以解决大家的一些困惑和问题,

2026年6月3日 16:15

java接口不能被实例化(java 接口)

java接口不能被实例化(java 接口)

本篇文章给大家谈谈java接口不能被实例化,以及java 接口对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录java 接口JAVA中接口不

2026年9月11日 14:00

论坛社区模板(DISCUZ 论坛模板怎么用DISCUZ 模板安装导入使用说明)

论坛社区模板(DISCUZ 论坛模板怎么用DISCUZ 模板安装导入使用说明)

“论坛社区模板”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看论坛社区模板(DISCUZ 论坛模板怎么用DISCUZ 模板安装导入使用说明)!本文目录DISCUZ 论坛模板怎么用DISCUZ 模板安装导入使用说明如何创建一个

2025年9月1日 06:45

gnumath最小二乘法(最小二乘原理)

gnumath最小二乘法(最小二乘原理)

大家好,如果您还对gnumath最小二乘法不太了解,没有关系,今天就由本站为大家分享gnumath最小二乘法的知识,包括最小二乘原理的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录最小二乘原理线性方程组的最小二乘解

2026年7月2日 22:15

squads(squad是什么意思)

squads(squad是什么意思)

今天给各位分享squad是什么意思的知识,其中也会对squad是什么意思进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录squad是什么意思riding squads什么意思squad是什么意思“squad”意

2025年6月8日 22:15

linux常用命令保存退出(Linux shell tail -f如何自动终止)

linux常用命令保存退出(Linux shell tail -f如何自动终止)

这篇文章给大家聊聊关于linux常用命令保存退出,以及Linux shell tail -f如何自动终止对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录Linux shell tail -f如何自动终止linux保存并退出的命

2025年7月23日 00:45

销售分析表单模板(如何用excel制作服装进销存统计表格)

销售分析表单模板(如何用excel制作服装进销存统计表格)

大家好,如果您还对销售分析表单模板不太了解,没有关系,今天就由本站为大家分享销售分析表单模板的知识,包括如何用excel制作服装进销存统计表格的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录如何用excel制作服装

2025年10月28日 05:00

html电子邮件链接(电子邮件的链接格式是什么)

html电子邮件链接(电子邮件的链接格式是什么)

今天给各位分享电子邮件的链接格式是什么的知识,其中也会对电子邮件的链接格式是什么进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录电子邮件的链接格式是什么如何制作电子邮件链接如何在电子邮件中添加链接如何在HTML

2026年5月7日 00:30

小程序框架有哪些(个人小程序开发(从零开始学习))

小程序框架有哪些(个人小程序开发(从零开始学习))

今天给各位分享个人小程序开发(从零开始学习)的知识,其中也会对个人小程序开发(从零开始学习)进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录个人小程序开发(从零开始学习)学小程序开发需要什么基础个人小程序开发(

2026年8月13日 09:30

servlet类的三个方法(jsp servlet 中doget dopost service这三个方法的区别是什么都什么时候用)

servlet类的三个方法(jsp servlet 中doget dopost service这三个方法的区别是什么都什么时候用)

本篇文章给大家谈谈servlet类的三个方法,以及jsp servlet 中doget dopost service这三个方法的区别是什么都什么时候用对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录jsp servlet 中d

2026年3月15日 21:15

index函数为什么从一开始(excel函数index的用法)

index函数为什么从一开始(excel函数index的用法)

大家好,index函数为什么从一开始相信很多的网友都不是很明白,包括excel函数index的用法也是一样,不过没有关系,接下来就来为大家分享关于index函数为什么从一开始和excel函数index的用法的一些知识点,大家可以关注收藏,免

2025年9月25日 01:45

cancal翻译(cancel什么意思及同义词 翻译cancel的意思)

cancal翻译(cancel什么意思及同义词 翻译cancel的意思)

今天给各位分享cancel什么意思及同义词 翻译cancel的意思的知识,其中也会对cancel什么意思及同义词 翻译cancel的意思进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录cancel什么意思及同义

2026年4月15日 09:15

jquery是什么有什么作用(JQuery主要是做什么用的)

jquery是什么有什么作用(JQuery主要是做什么用的)

其实jquery是什么有什么作用的问题并不复杂,但是又很多的朋友都不太了解JQuery主要是做什么用的,因此呢,今天小编就来为大家分享jquery是什么有什么作用的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录J

2025年7月18日 08:30

分两种情况定义数组(C++编程,n”: 未声明的标识符 是哪的问题)

分两种情况定义数组(C++编程,n”: 未声明的标识符 是哪的问题)

大家好,如果您还对分两种情况定义数组不太了解,没有关系,今天就由本站为大家分享分两种情况定义数组的知识,包括C++编程,n”: 未声明的标识符 是哪的问题的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录C++编程,

2026年8月25日 17:30

网站在线咨询系统(网上客服软件)

网站在线咨询系统(网上客服软件)

大家好,关于网站在线咨询系统很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于网上客服软件的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录网上客服软件在线

2025年6月20日 16:00

consequence单词(consequence怎么记忆)

consequence单词(consequence怎么记忆)

大家好,关于consequence单词很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于consequence怎么记忆的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮

2025年12月6日 11:30

学好c语言对java有什么用(学习c语言对学习java有用吗)

学好c语言对java有什么用(学习c语言对学习java有用吗)

今天给各位分享学习c语言对学习java有用吗的知识,其中也会对学习c语言对学习java有用吗进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录学习c语言对学习java有用吗学习c语言对学习java有用么学完C语言

2025年9月3日 09:45

connectionstring属性尚未初始化怎么解决sql(急,高分!!ConnectionString 属性尚未初始化)

connectionstring属性尚未初始化怎么解决sql(急,高分!!ConnectionString 属性尚未初始化)

这篇文章给大家聊聊关于connectionstring属性尚未初始化怎么解决sql,以及急,高分!!ConnectionString 属性尚未初始化对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录急,高分!!Connectio

2025年6月3日 08:30

在线转换器花体字(英文花体字转换器)

在线转换器花体字(英文花体字转换器)

大家好,关于在线转换器花体字很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于英文花体字转换器的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录英文花体字转

2026年3月27日 12:45

近期文章

本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索