希望文章能给到你启发和灵感~
如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏 支持一下博主吧~
阅读指南
- 开篇说明
- 一、基础环境说明
-
- [1.1 硬件环境](#1.1 硬件环境)
- [1.2 软件环境](#1.2 软件环境)
- 二、Redis的特点和适用场景
- 三、Redis的数据类型和使用
-
- 3.1`字符串(String)`
- [3.2 `列表(List):`](#3.2
列表(List):
) - [3.3 `集合(Set):`](#3.3
集合(Set):
) - [3.4 `有序集合(Sorted Set):`](#3.4
有序集合(Sorted Set):
) - [3.5 `哈希(Hash):`](#3.5
哈希(Hash):
) - [3.6 `位图(Bitmaps)`](#3.6
位图(Bitmaps)
) - [3.7 `超日志(HyperLogLog):`](#3.7
超日志(HyperLogLog):
) - [3.8 `地理空间(Geo):`](#3.8
地理空间(Geo):
) - [3.9 `流(Streams):`](#3.9
流(Streams):
)
- 四、最后
开篇说明
说到redis,一定不陌生,Redis是一个开源的、
基于内存的
、支持多种类型数据结构的键值存储数据库,都知道他能实现快速读写
、高并发访问
和实时性
快等特点,这篇就主要说说他的特点使用场景、以及我们日常可能常用的命令;
一、基础环境说明
考虑环境因素,大家适当的对比自己的软硬件环境情况分析~请仔细阅读硬件、软件环境
1.1 硬件环境
演示环境:Windows 11 专业版
1.2 软件环境
数据存储:Redis 3.0.504
二、Redis的特点和适用场景
-
缓存(Caching)
Redis最常见的用途是作为
缓存层
,比如存储一些热点数据,来减少我们数据库的访问压力。这原因其事很简单,因为Redis是基于内存
的,因此其读写速度非常快
,可以显著提升应用的响应速度
。同时,Redis支持多种数据过期策略
,能够自动清理长时间未访问的数据
,优化内存使用。 -
会话管理
(Session Management)在Web应用中,Redis可以用来存储用户会话信息。
-
消息队列
(Message Queue)Redis的列表(Lists)和发布/订阅(Pub/Sub)功能可以用来实现简单的消息队列系统。虽然Redis不是专门设计来作为消息队列的,但在一些轻量级的场景下,使用Redis作为消息队列可以简化系统架构,降低部署成本。
-
计数器
(Counters)Redis的原子操作特性使得它非常适合实现计数器功能。例如,可以使用INCR命令来实现页面的访问计数、用户的点赞数统计等。由于Redis的操作是原子性的,因此不需要担心并发更新导致的数据不一致问题。
-
排行榜
(Leaderboards)利用Redis的有序集合(Sorted Sets)可以方便地实现排行榜功能。有序集合中的每个成员都有一个分数与之关联,Redis会根据分数对成员进行排序。这使得Redis成为实现排行榜、热门榜单等功能的理想选择。
-
社交网络功能
(Social Networking Features)Redis可以用来实现社交网络中的一些常见功能,如用户关注关系、好友列表、点赞、评论等。通过合理设计数据结构,Redis可以高效地存储和查询这些社交数据,支持大规模用户的实时交互。
-
分布式锁
(Distributed Locks)在分布式系统中,Redis可以用来实现分布式锁。通过Redis的SETNX(Set if Not eXists)命令或Lua脚本,可以确保在分布式环境中只有一个客户端能够获取锁,从而避免数据竞争和一致性问题。
-
地理空间信息
(Geospatial Information)Redis的地理空间索引功能可以用来存储和查询地理位置信息。这使得Redis在需要处理地理位置数据的场景(如地图应用、物流追踪等)中非常有用。
-
实时分析
(Real-time Analytics)虽然Redis主要是一个内存数据库,但它也可以与一些外部系统(如Apache Kafka、Apache Spark等)结合使用,来实现实时数据分析。通过将数据先写入Redis,然后再由其他系统进行处理和分析,可以显著提升数据分析的实时性和准确性。
三、Redis的数据类型和使用
redis中的数据类型目前主要分为几种,分别是字符串,列表,集合(有序和无序),哈希,位图,超日志,地理空间,流;后4个类型内容相对较多,我们这里就不细说了,后续再另起篇幅来细讲;
尝试使用一下命令时,请先保证自己的redis已正确安装并且已经通过客户端登录了;
3.1字符串(String)
Redis 中最基本的类型,是二进制安全的,即意味着它们能包含任何数据,比如图片或者序列化的对象。字符串类型的值最大能存储 512MB。
bash
// 设置键的值为字符串。如果键已存在,则覆盖原有值
SET key value
bash
// 获取键的值。如果键不存在,则返回nil。
GET key
bash
// 将键的整数值增加1。如果键不存在,则将其值初始化为0再执行增加操作。
INCR key
// 有递增,自然有递减
DECR key
bash
// 获取一个或多个键的值。
MGET key1 [key2...]
3.2 列表(List):
Redis 的列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
【1】如何列表中添加元素:lpush和rpush,实现左边和右边插入的方式;
【2】如何列表中删除元素:lpop和rpop,实现左边和右边移除的方式;
【3】如何查询列表中的元素:0~-1代表取所有元素,这里有点类似python切片
的取法;
【4】如何移除指定元素:lrem key count value:移除列表中等于value的元素。count>0时,从表头开始搜索;count<0时,从表尾开始搜索;count=0时,移除所有等于value的元素。
3.3 集合(Set):
Redis 的集合是一个无序
的字符串集合,不允许有重复
的元素。集合是通过哈希表
实现的,所以添加,删除,查找的复杂度都是 O(1)。
所谓复杂度,也就是从复杂度的角度方面来看,理论上来讲,它不随你的数据量大小的增加而增加他增删查的执行时间,也就是你数据量再大,也不影响我的执行时间;不过吧,实际情况未必是这样,毕竟复杂度并不考虑具体的执行速度或硬件限制;而且有些情况这个复杂度也不是固定的,O(1)也可能比那成O(n);
【1】查询结合内的元素:smembers key
【2】集合添加元素:sadd key value
【3】检查member是否是集合key的成员。:sismember key member
【4】移除集合中一个或多个成员。:srem key member
3.4 有序集合(Sorted Set):
Redis 的有序集合和集合一样也是字符串集合
,不允许重复
的成员。为了实现排序,给每个成员都关联一个 double 类型的分数
。这使得有序集合既可以做为一个 set 来使用,又可以保存一个 value 对应的 score,从而实现排序等功能。
【1】向有序集合添加一个或多个成员,或者更新已存在成员的分数。
【2】返回有序集合中指定范围的成员,可包含分数。
【3】移除有序集合中的一个或多个成员。
【4】返回有序集合中成员的排名(按分数从低到高)。
zrank这里注意一下返回的情况,默认情况下返回0代表分数是最高的,如果第二返回的是1,依次类推就行,相反的zrevrank 则是和上面的相反;
3.5 哈希(Hash):
Redis 的哈希是键值对的集合。Redis 中的哈希类型可以存储不定数量的键值对,是一个字符串类型的 field 和 value 的映射表。
【1】hset key field value
:为哈希表中的字段赋值。
【2】hget key field
:获取哈希表中字段的值。
【3】hmset key field1 value1 [field2 value2...]
:同时设置哈希表中的多个字段。
【4】hgetall key
:获取哈希表中所有的字段和值。
【注】以下内容这里我们只做了解,具体使用根据实际场景再来说明;
3.6 位图(Bitmaps)
位图严格来说,不算是 Redis 的一种数据类型,但它是一个字符串的二进制表示形式,因此可以使用字符串类型来实现。位图支持位级别的操作,可以非常高效地处理大量的数据,例如用于用户签到、统计在线人数等场景。
【1】setbit key offset value
设置位(SETBIT)SETBIT命令用于将位图指定偏移量上的位设置为0或1。
key:位图的键名。
offset:位的偏移量(从0开始)。
value:要设置的值(0或1)。
【2】getbit key offset
获取位,GETBIT命令用于获取位图指定偏移量上的位的值。
【3】bitcount key [start end]
统计位,用于统计位图中值为1的位的数量
【4】bitop operation destkey key [key ...]
位运算,用于对一个或多个位图执行位运算,并将结果保存到新的位图中
【5】bitops key bit [start] [end]
用于查找位图中第一个被设置为指定值的二进制位,并返回它的偏移量。
3.7 超日志(HyperLogLog):
Redis 的 HyperLogLog 是一种概率性的数据结构,用于估计一个集合中不重复元素的数量。与集合相比,HyperLogLog 在保持一定的准确度的基础上,内存消耗极低。
3.8 地理空间(Geo):
Redis 3.2 版本中引入了地理空间数据类型,允许存储地理位置信息,并可以基于这些信息执行地理空间相关的查询,比如计算两个位置之间的距离,或者查找给定半径内的所有位置等。
3.9 流(Streams):
Redis 5.0 引入了 Streams 数据类型,它是一个新的强大的支持多播的原生数据类型,可以看作是一个仅追加的日志数据结构,用于消息队列等场景。
四、最后
【1】在Redis中,位图(Bitmap)、HyperLogLog、Geo和流(Stream)都被视为Redis支持的数据结构或数据类型,但它们各自具有不同的特性和应用场景。
【2】本篇我们只需要知道redis前5五种常见的数据类型
的用法即可
【3】不同版本的redis,这些数据类型并不都是有的,例如Geo是Redis 3.2版本
中新增的一种数据类型,流是Redis 5.0版本
中新增加的数据结构,这个需要注意一下