文章目录
- Redis
- [1 介绍](#1 介绍)
- [2 Redis数据类型](#2 Redis数据类型)
-
- [2.1 String类型](#2.1 String类型)
- [2.2 hash类型](#2.2 hash类型)
- [2.3 list类型](#2.3 list类型)
- [2.4 set类型](#2.4 set类型)
- [2.5 zset类型](#2.5 zset类型)
Redis
1 介绍
Redis(Remote Dictionary Server)是一个开源的内存数据存储系统,它可以用作数据库、缓存和消息中间件。Redis支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等。它提供了丰富的命令集合,使得开发者可以方便地对这些数据结构进行操作。
以下是Redis的一些关键特性和优势:
-
内存存储: Redis数据完全存储在内存中,因此读写速度非常快。同时,Redis也可以将数据持久化到磁盘,以防止数据丢失。
-
丰富的数据结构: Redis支持多种数据结构,包括字符串、列表、集合、有序集合、哈希表等,每种数据结构都支持丰富的操作。
-
持久化: Redis支持将数据持久化到磁盘,可以选择使用RDB快照或者AOF(Append-Only File)日志文件的方式进行持久化。
-
高可用性: Redis支持主从复制,可以创建多个Redis副本来提供高可用性和容错性。
-
分布式: Redis Cluster是Redis的分布式解决方案,它可以将数据分布到多个节点上,提供横向扩展性。
-
事务支持: Redis支持事务,可以批量执行一系列命令,保证这些命令的原子性。
-
发布/订阅模式: Redis支持发布/订阅模式,可以用于消息传递和事件通知。
-
灵活性: Redis非常灵活,可以用于多种用途,包括缓存、计数器、消息队列等。
-
社区和生态系统: Redis拥有庞大的开发者社区和丰富的生态系统,有很多客户端库、工具和扩展可以使用。
2 Redis数据类型
2.1 String类型
字符串是Redis最简单的数据类型,可以存储文本、整数或者浮点数。字符串类型是二进制安全的,意味着它可以包含任意数据,比如图片或者序列化的对象。
使用场景
- 视频的播放量统计
- 共享session
常用命令
set key value
:设置String类型的键key
的值为value
get key
:获取String类型的键key
中的值value
- 例如:
incr key
:对键key
进行递增操作decr key
:对键key
进行递减操作- 例如:
setex key timeout value
:设置键key
在指定的时间后过期,单位是秒(s)ttl key
:获取键key
剩余时间- 例如:设置age的时间为10s,10s之后自动清空
例如:设置age的时间为20s,获取剩余时间为12s
2.2 hash类型
Hash类型是一种键值对的集合,适用于存储对象(例如用户信息、商品信息等)的属性和属性值。每个Hash类型的键可以包含多个字段和字段值,类似于关联数组。
在java中的比喻:
java
Map<String,Map<String,?>> map
使用场景
开发中不建议使用hash类型,如果一定要用它,使用对象转换为json类型
常用命令
-
hset key field value
: 设置Hash类型的键key
中字段field
的值为value
。 -
hget key field
: 获取Hash类型的键key
中字段field
的值。 -
例如:
-
hdel key field1 field2 ...
: 删除Hash类型的键key
中的一个或多个字段。 -
hexists key field
: 判断Hash类型的键key
中是否存在字段field
。 -
例如:
-
hkeys key
: 获取Hash类型的键key
中所有的字段名。 -
havls key
: 获取Hash类型的键key
中所有的字段值。 -
hlen key
: 获取Hash类型的键key
中字段的数量。
2.3 list类型
在Redis中,List(列表)是一种有序的字符串元素集合,它可以包含字符串、数字等类型的元素。List数据类型支持在头部(左侧)和尾部(右侧)快速添加、删除元素,因此常用来实现队列、栈等数据结构,也可以用来存储有序的元素集合。
使用场景:收藏文章列表
常用命令
lpush key value [value ...]
:在列表头部(左侧)插入一个或多个值。rpush key value [value ...]
: 在列表尾部(右侧)插入一个或多个值。lpop key
:移除并返回列表头部(左侧)的元素。rpop key
:移除并返回列表尾部(右侧)的元素。lrange key start stop
:获取列表指定范围内的所有元素。llen key
:获取列表的长度。- 例如:
2.4 set类型
Set是一个无序的、不重复的元素集合。以下是关于Redis中Set类型的一些重要特点:
-
无序性: Set中的元素是无序的,不像列表(List)类型那样有顺序。
-
不重复性: Set中不允许重复的元素,每个元素都是唯一的。
-
集合操作: Redis提供了丰富的集合操作,如求交集、并集、差集等,可以方便地对集合进行操作。
常用命令
-
sadd key member [member ...]
:将一个或多个元素添加到集合中。 -
srem key member [member ...]
:从集合中移除一个或多个元素。 -
smembers key
:返回集合中的所有元素。 -
scard key
:返回集合中的元素个数。 -
例如:
2.5 zset类型
ZSET 是 Redis 提供的一种有序集合数据类型。ZSET 中的每个成员都关联着一个分值(score),Redis 使用分值来对集合中的成员进行排序。ZSET 是有序的,这意味着你可以按照分值的范围或者按照成员来查询元素。
在 ZSET 中,每个成员都是唯一的,但是分值(score)可以重复。ZSET 中的成员按照分值从小到大进行排序,分值相同的成员按照字典序进行排序。
常用命令
-
zadd key score member [score member ...]
:向有序集合中添加一个或多个成员,或者更新已存在成员的分值。 -
zrem key member [member ...]
:从有序集合中移除一个或多个成员。 -
zscore key member
:获取有序集合中指定成员的分值。 -
zrank key member
:获取有序集合中指定成员的排名(按照分值从小到大排序)。 -
zrevrank key member
:获取有序集合中指定成员的排名(按照分值从大到小排序)。 -
zrange key min max
:按照分值范围获取成员列表,可以指定返回结果的数量和起始位置。 -
zrevrank key max min
:按照分值范围从大到小获取成员列表。 -
zcard key
:获取有序集合中的成员数量。