Redis --- 基本数据类型

发布于:2025-04-17 ⋅ 阅读:(23) ⋅ 点赞:(0)

Redis --- 基本数据类型

Redis Intro

  • RedisRemote Dictionary Server)是一款开源的高性能键值存储系统,常用于缓存、消息中间件和实时数据处理场景。以下是其核心特点、数据类型及典型使用场景:

核心特点

特性 说明
基于内存 数据存储在内存中,读写速度极快(微秒级响应)。
持久化支持 支持 RDB(快照)和 AOF(日志)两种持久化方式,保障数据安全。
数据结构丰富 提供字符串、哈希、列表、集合等 8 种数据结构
高可用与分布式 支持主从复制、哨兵模式(Sentinel)和集群模式(Cluster),实现容灾和水平扩展。
原子操作 所有操作是原子的,支持事务和 Lua 脚本。
发布订阅 提供 Pub/Sub 模式,支持简单的消息队列功能。

5种基础数据类型

String

  • String 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value;
  • String 类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象;
  • String 类型是 Redis 最基本的数据类型,String 类型的值最大能存储 512MB;
    在这里插入图片描述
序号 语法 描述
1 SET key value 设置指定 key 的值
2 GET key 获取指定 key 的值
3 GETRANGE key start end 返回 key 中字符串值的子字符,end=-1 时表示全部
4 SETBIT key offset value 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)
5 MSET key value [key value ...] 同时设置一个或多个 key-value 对
6 MGET key1 [key2..] 获取所有(一个或多个)给定 key 的值
7 GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)
8 SETNX key value 只有在 key 不存在时设置 key 的值
9 STRLEN key 返回 key 所储存的字符串值的长度
10 MSETNX key value [key value ...] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在
11 INCR key 将 key 中储存的数字值增一
12 DECR key 将 key 中储存的数字值减一
13 INCRBY key increment 将 key 所储存的值加上给定的增量值
14 DECRBY key decrement 将 key 所储存的值减少给定的增量值
15 APPEND key value 如果 key 已经存在并且是一个字符串,APPEND 命令将指定的 value 追加到该 key 原来值 value 的末尾
127.0.0.1:6379> set k1 tom
OK
127.0.0.1:6379> get k1
"tom"
127.0.0.1:6379> set k1 harry
OK
127.0.0.1:6379> get k1
"harry"
127.0.0.1:6379> set k2 5
OK
127.0.0.1:6379> INCR k2
(integer) 6
127.0.0.1:6379> get k2
"6"
127.0.0.1:6379> INCRBY k2 101
(integer) 107
127.0.0.1:6379> get k1
"harry"
127.0.0.1:6379> APPEND k1 Potter
(integer) 11
127.0.0.1:6379> get k1
"harryPotter"

List

  • Redis列表是简单的字符串列表,按照插入顺序排序。
  • 你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)
    在这里插入图片描述
序号 命令语法 描述
1 LPUSH key value1 [value2] 将一个或多个值插入到列表头部,压子弹
2 LPOP key 移出并获取列表的第一个元素,发射子弹
3 LRANGE key start stop 获取列表指定范围内的元素
4 LPUSHX key value 将一个值插入到已存在的列表头部
5 LLEN key 获取列表长度
6 `LINSERT key BEFORE AFTER pivot value`
7 LINDEX key index 通过索引获取列表中的元素
8 LREM key count value 移除列表元素
9 LSET key index value 通过索引设置列表元素的值
127.0.0.1:6379> LPUSH names zhangsan lisi wangwu
(integer) 3
127.0.0.1:6379> LLEN names
(integer) 3
127.0.0.1:6379> LRANGE names 0 2
1) "wangwu"
2) "lisi"
3) "zhangsan"
127.0.0.1:6379> LPUSHX names louis
(integer) 4
127.0.0.1:6379> LRANGE names 0 2
1) "louis"
2) "wangwu"
3) "lisi"

SET

  • Redis 的 Set 是 String 类型的无序(号)集合。集合中成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
    在这里插入图片描述
序号 命令语法 描述
1 SADD key member1 [member2] 向集合添加一个或多个成员
2 SMEMBERS key 返回集合中的所有成员
3 SCARD key 获取集合的成员数
4 SRANDMEMBER key [count] 返回集合中一个或多个随机数
5 SISMEMBER key member 判断 member 元素是否是集合 key 的成员
6 SREM key member1 [member2] 移除集合中一个或多个成员
7 SDIFF key1 [key2] 返回给定所有集合的差集
8 SINTER key1 [key2] 返回给定所有集合的交集
9 SUNION key1 [key2] 返回所有给定集合的并集
10 SPOP key 移除并返回集合中的一个随机元素
11 SSCAN key cursor 迭代集合中的元素
127.0.0.1:6379> SADD course redis
(integer) 1
127.0.0.1:6379> SADD course mysql
(integer) 1
127.0.0.1:6379> SADD course redis
(integer) 0
127.0.0.1:6379> SADD course mongodb
(integer) 1
127.0.0.1:6379> SMEMBERS course
1) "mongodb"
2) "mysql"
3) "redis"
127.0.0.1:6379> SRANDMEMBER course
"mongodb"
127.0.0.1:6379> SRANDMEMBER course
"redis"
127.0.0.1:6379> SRANDMEMBER course
"mysql"
127.0.0.1:6379> SRANDMEMBER course
"mongodb"
127.0.0.1:6379> SRANDMEMBER course
"mysql"
127.0.0.1:6379> SMEMBERS course
1) "mongodb"
2) "mysql"
3) "redis"

ZSET

  • Redis 有序集合和集合一样也是string类型元素的集合且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数
  • redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。
  • 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
    在这里插入图片描述
序号 命令语法 描述
1 ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
2 ZCARD key 获取有序集合的成员数
3 ZCOUNT key min max 计算在有序集合中指定区间分数的成员数
4 ZRANK key member 返回有序集合中指定成员的索引
5 ZSCORE key member 返回有序集中,成员的分数值
6 ZREM key member [member ...] 移除有序集合中的一个或多个成员
127.0.0.1:6379> ZADD leaderboard 100 "Alice"
(integer) 1
127.0.0.1:6379> ZADD leaderboard 200 "Bob"
(integer) 1
127.0.0.1:6379> ZADD leaderboard 150 "Charlie"
(integer) 1
127.0.0.1:6379> ZADD leaderboard 100 "Alice"
(integer) 0
127.0.0.1:6379> ZRANGE leaderboard 0 -1 WITHSCORES
1) "Alice"
2) "100"
3) "Charlie"
4) "150"
5) "Bob"
6) "200"
127.0.0.1:6379> ZRANK leaderboard "Charlie"
(integer) 1
127.0.0.1:6379> ZREVRANK leaderboard "Charlie"
(integer) 1
127.0.0.1:6379> ZSCORE leaderboard "Bob"
"200"
127.0.0.1:6379> ZINCRBY leaderboard 50 "Alice"
"150"
127.0.0.1:6379> ZRANGE leaderboard 0 -1 WITHSCORES
1) "Charlie"
2) "150"
3) "Alice"
4) "150"
5) "Bob"
6) "200"
127.0.0.1:6379> ZCOUNT leaderboard 100 200
(integer) 3
127.0.0.1:6379> ZREM leaderboard "Charlie"
(integer) 1
127.0.0.1:6379> ZRANGE leaderboard 0 -1 WITHSCORES
1) "Alice"
2) "150"
3) "Bob"
4) "200"


操作说明:
1. ZADD:向 ZSET 中添加成员及其分数。
2. RANGE:按分数从小到大返回 ZSET 中的成员及其分数。
3. ZRANK:返回成员在 ZSET 中的排名(从小到大)。
4. REVRANK:返回成员在 ZSET 中的排名(从大到小)。
5. ZSCORE:返回指定成员的分数。
6. ZINCRBY:增加指定成员的分数。
7. ZCOUNT:返回分数在指定范围内的成员数量。
8. ZREM:移除 ZSET 中的指定成员。

HASH

  • Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
    在这里插入图片描述
序号 命令语法 描述
1 HSET key field value 将哈希表 key 中的字段 field 的值设为 value
2 HGET key field 获取存储在哈希表中指定字段的值
3 HGETALL key 获取在哈希表中指定 key 的所有字段和值
4 HEXISTS key field 查看哈希表 key 中,指定的字段是否存在
5 HKEYS key 获取所有哈希表中的字段
6 HVALS key 获取哈希表中所有值
7 HLEN key 获取哈希表中字段的数量
8 HMGET key field1 [field2] 获取所有给定字段的值
9 HMSET key field1 value1 [field2 value2] 同时将多个 field-value (域-值)对设置到哈希表 key 中
127.0.0.1:6379> HMSET hpe name zhangsan age 18 gender men birth 2000-01-01
OK
127.0.0.1:6379> HKEYS hpe
1) "name"
2) "age"
3) "gender"
4) "birth"
127.0.0.1:6379> HvalS hpe
1) "zhangsan"
2) "18"
3) "men"
4) "2000-01-01"
127.0.0.1:6379> HGETALL hpe
1) "name"
2) "zhangsan"
3) "age"
4) "18"
5) "gender"
6) "men"
7) "birth"
8) "2000-01-01"

网站公告

今日签到

点亮在社区的每一天
去签到