南县做网站,杭州富阳网站建设公司,软件开发具体工作内容,免费下载个人简历表格大家好#xff0c;我是白晨#xff0c;一个不是很能熬夜#xff0c;但是也想日更的人。如果喜欢这篇文章#xff0c;点个赞#x1f44d;#xff0c;关注一下#x1f440;白晨吧#xff01;你的支持就是我最大的动力#xff01;#x1f4aa;#x1f4aa;#x1f4aa…大家好我是白晨一个不是很能熬夜但是也想日更的人。如果喜欢这篇文章点个赞关注一下白晨吧你的支持就是我最大的动力 文章目录 Redis键值概述一、Redis数据类型概述常用数据类型StringListHashSetZset 扩展数据类型BitMapHyperLogLogGEOBitFieldStream 二、Redis键key操作常用操作及示例keys *exists keytype keydel keyunlink keyttl keyexpire key secondsmove key dbindexselect dbindexdbsizeflushdbflushall 常用操作汇总 总结 Redis键值概述 一、Redis数据类型概述 首先要强调一点Redis是key value类型的数据库Redis所说的数据类型都是key value中的value的数据结构 而key都是字符串。
常用数据类型
Redis中有经常使用的有五大数据类型分别是——String字符串Hash哈希List列表Set集合、Zset有序集合。 String
String是redis最基本的类型一个key对应一个value。
String类型是二进制安全的意思是Redis的String可以包含任何数据比如jpg图片或者序列化的对象 。
String类型是Redis最基本的数据类型一个Redis中字符串value最多可以是512M。 List
Redis列表是简单的字符串列表按照插入顺序排序。你可以添加一个元素到列表的头部左边或者尾部右边。
List中最多可以最多可以包含 2 32 − 1 2^{32} - 1 232−1 个元素 (4294967295, 每个列表超过40亿个元素)。 Hash
Redis Hash 是一个 String 类型的 field字段 和 value值 的映射表Hash 特别适合用于存储对象。
Redis 中每个 Hash 可以存储 2 32 − 1 2^{32} - 1 232−1 键值对 (4294967295, 每个哈希结构可存储40多亿个元素)。 Set
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的这就意味着集合中不能出现重复的数据。
Redis 中Set集合是通过哈希表实现的这里先这样认为所以添加删除查找的复杂度都是 O(1)。
集合中最大的成员数为 2 32 − 1 2^{32} - 1 232−1 (4294967295, 每个集合可存储40多亿个成员)。 Zset
Redis Zset 和 Set 一样也是String类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数redis正是通过分数来为集合中的成员进行从小到大的排序。
Zset的成员是唯一的,但分数(score)却可以重复。
Zset集合是通过哈希表实现的所以添加删除查找的复杂度都是 O(1)。 集合中最大的成员数为 2 32 − 1 2^{32} - 1 232−1。 扩展数据类型
随着 Redis 版本的更新后面又支持了五种数据类型 BitMap2.2 版新增、HyperLogLog2.8.9 版本新增、GEO3.2 版新增、BitField3.2 版新增、Stream5.0 版新增。
BitMap
Redis中的BitMap不是一个独立的数据类型而是基于String类型实现的一种特殊的数据结构。BitMap主要用于存储大量二进制位0或1的数据这些位可以代表不同的状态或标志。
BitMap即位图是一串连续的二进制数组0和1可以通过偏移量offset定位元素。BitMap通过最小的单位bit来进行 0|1 的设置表示某个元素的值或者状态时间复杂度为O (1)。由于bit是计算机中最小的单位使用它进行储存将非常节省空间特别适合一些数据量大且使用二值统计的场景。
示例如下图 Redis的BitMap实际上是利用String类型的最大容量512 MB存储一个连续的二进制序列其中每个字节的8位可以分别代表8个独立的状态。这意味着你可以用一个BitMap来跟踪多达数百万甚至数十亿的状态只要状态总数不超过即大约 2 32 2^{32} 232。 HyperLogLog
HyperLogLog 是用来做基数统计的算法HyperLogLog 的优点是在输入元素的数量或者体积非常非常大时计算基数所需的空间总是固定且是很小的。
在 Redis 里面每个 HyperLogLog 键只需要花费 12 KB 内存就可以计算接近 2 64 2^{64} 264 个不同元素的基数。这和计算基数时元素越多耗费内存就越多的集合形成鲜明对比。
但是因为 HyperLogLog 只会根据输入元素来计算基数而不会储存输入元素本身所以 HyperLogLog 不能像集合那样返回输入的各个元素。 GEO
Redis的GEO类型主要用于存储地理位置信息并对存储的信息进行操作。GEO实际上是一种有序集合zset它的每个元素都包含三个属性经度longitude、纬度latitude和位置名称member。通过这些属性我们可以在Redis中存储地理位置的坐标并对它们进行一些有用的操作。 BitField
Redis的BITFIELD命令可以将一个Redis字符串看作是一个由二进制位组成的数组并对这个数组中任意偏移进行访问。BITFIELD命令的作用在于它能够将很多小的整数储存到一个长度较大的位图中又或者将一个非常庞大的键分割为多个较小的键来进行储存从而非常高效地使用内存使得Redis能够得到更多不同的应用特别是在实时分析领域。
说白了就是通过BITFIELD命令我们可以一次性对多个比特位域进行操作。 Stream
Redis Stream 主要用于消息队列MQMessage QueueRedis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能但它有个缺点就是消息无法持久化如果出现网络断开、Redis 宕机等消息就会被丢弃。
简单来说发布订阅 (pub/sub) 可以分发消息但无法记录历史消息。
而 Redis Stream 提供了消息的持久化和主备复制功能可以让任何客户端访问任何时刻的数据并且能记住每一个客户端的访问位置还能保证消息不丢失 二、Redis键key操作 常用操作及示例
keys * 查看当前库的所有key 示例如下
127.0.0.1:6379 keys *
(empty array)
127.0.0.1:6379 set k1 v1
OK
127.0.0.1:6379 set k2 v2
OK
127.0.0.1:6379 keys *
1) k2
2) k1exists key 检查key是否存在存在返回1不存在返回0 示例如下
127.0.0.1:6379 keys *
1) k2
2) k1
127.0.0.1:6379 EXISTS k1
(integer) 1
127.0.0.1:6379 EXISTS k3
(integer) 0type key 返回key的类型 示例如下
127.0.0.1:6379 type k1
stringdel key 删除一个或多个key 示例如下
127.0.0.1:6379 keys *
1) k2
2) k1
127.0.0.1:6379 del k1
(integer) 1
127.0.0.1:6379 keys *
1) k2unlink key 非阻塞删除一个或多个key并异步释放和key相关的内存返回1表示删除成功返回0表示删除失败 示例如下
127.0.0.1:6379 keys *
1) k1
2) k2
127.0.0.1:6379 unlink k1
(integer) 1
127.0.0.1:6379 keys *
1) k2ttl key 获取key的剩余过期时间单位为秒-1表示永不过期-2表示已过期 示例如下
127.0.0.1:6379 set k1 v1
OK
127.0.0.1:6379 ttl k1
(integer) -1
127.0.0.1:6379 expire k1 10 # 设置过期时间为10s
(integer) 1
127.0.0.1:6379 ttl k1
(integer) 5
127.0.0.1:6379 ttl k1
(integer) -2expire key seconds 设置key的过期时间单位为秒返回1表示设置成功返回0表示设置失败 自Redis 7.0expire支持如下参数 NX只有当key没有设置过期时间才会执行命令已经设置过的不能再设置XX 只有当key有过期时间才会执行命令设置没有设置过的不能设置GT 只有当新的过期时间大于当前过期时间时才会设置只会增加过期时间LT 只有当新的过期时间大于当前过期时间时才会设置只会减少过期时间 可选参数这里先不做演示有兴趣的小伙伴可以自己去尝试。 示例如下
127.0.0.1:6379 set k1 v1
OK
127.0.0.1:6379 ttl k1
(integer) -1
127.0.0.1:6379 expire k1 10 # 设置过期时间为10s
(integer) 1 # 1表示成功0表示失败
127.0.0.1:6379 ttl k1
(integer) 5
127.0.0.1:6379 ttl k1
(integer) -2Redis 的过期时间设置有四种形式 EXPIRE 秒——设置指定的过期时间(秒)表示的是时间间隔。 PEXPIRE 毫秒——设置指定的过期时间以毫秒为单位表示的是时间间隔。 EXPIREAT 时间戳-秒——设置指定的 Key 过期的 Unix 时间单位为秒表示的是时间/时刻。 PEXPIREAT 时间戳-毫秒——设置指定的 Key 到期的 Unix 时间以毫秒为单位表示的是时间/时刻。 move key dbindex 将当前数据库的key移动到给定的数据库dbindex0~15。 Redis支持多个数据库每个数据库都是一个独立的键值空间这意味着同一个Redis实例中的不同数据库可以拥有相同的key。在某些情况下我们可能需要将一个key从一个数据库移动到另一个数据库。 示例如下
127.0.0.1:6379 keys *
1) k1
2) k2
127.0.0.1:6379 move k1 13
(integer) 1select dbindex 切换到指定的数据库dbindex0~15默认为0。 示例如下
127.0.0.1:6379 select 13
OK
127.0.0.1:6379[13] keys *
1) k1
127.0.0.1:6379[13] select 0
OK
127.0.0.1:6379 keys *
1) k2dbsize 返回当前数据库的key的总数 示例如下
127.0.0.1:6379 keys *
1) k1
2) k2
127.0.0.1:6379 dbsize
(integer) 2
127.0.0.1:6379 select 13
OK
127.0.0.1:6379[13] keys *
1) k1
127.0.0.1:6379[13] dbsize
(integer) 1flushdb 删除当前数据库中的所有Key不会影响其他库 示例如下
127.0.0.1:6379[13] keys *
1) k1
127.0.0.1:6379[13] flushdb
OK
127.0.0.1:6379[13] keys *
(empty array)
127.0.0.1:6379[13] select 0 # 不影响其他库
OK
127.0.0.1:6379 keys *
1) k1
2) k2flushall 删除所有数据库中的所有Key 示例如下
127.0.0.1:6379[13] select 0
OK
127.0.0.1:6379 keys *
1) k1
2) k2
127.0.0.1:6379 select 13
OK
127.0.0.1:6379[13] keys *
1) k3
2) k4
127.0.0.1:6379[13] flushall
OK
127.0.0.1:6379[13] keys *
(empty array)
127.0.0.1:6379[13] select 0 # 0和13号数据库中的数据都被清除了
OK
127.0.0.1:6379 keys *
(empty array)常用操作汇总
命令描述keys *查看当前库的所有keyexists key检查key是否存在存在返回1不存在返回0type key返回key的类型del key删除一个或多个keyunlink key删除一个或多个key并异步释放和key相关的内存ttl key获取key的剩余过期时间单位为秒-1表示永不过期-2表示已过期。expire key seconds设置key的过期时间单位为秒move key dbindex将当前数据库的key移动到给定的数据库dbindexselect dbindex切换到指定的数据库dbindexdbsize返回当前数据库的key的总数flushdb删除当前数据库中的所有Keyflushall删除所有数据库中的所有Key
这里补充一点Redis中的操作一般是1代表操作执行成功0代表操作执行失败。 总结 在本文中我们对Redis的键值存储进行了全面的概述和介绍。首先我们了解了Redis的五大基本数据类型String字符串、Hash哈希、List列表、Set集合和Zset有序集合并探讨了它们各自的特点和用法。随后我们介绍了五种扩展数据类型BitMap、HyperLogLog、GEO、BitField和Stream以及它们在实际应用中的用途和优势。
在键key操作方面我们涵盖了常用的操作包括查看、检查、删除、移动、切换数据库以及设置过期时间等。这些操作丰富了我们对Redis数据管理的理解使我们能够更有效地管理和操作Redis中的数据。
通过本文的学习读者可以更加深入地了解Redis的键值存储特性为其在实际应用中的使用提供了更多的参考和指导。Redis作为一款高性能的键值存储数据库在各种场景下都具有广泛的应用前景希望本文能为读者在Redis的学习和应用上提供一些帮助和启发。 如果讲解有不对之处还请指正我会尽快修改多谢大家的包容。
如果大家喜欢这个系列还请大家多多支持啦
如果这篇文章有帮到你还请给我一个大拇指 和小星星 ⭐️支持一下白晨吧喜欢白晨【Redis】系列的话不如关注白晨以便看到最新更新哟