缓存 --- Redis基本数据类型
- Redis Intro
- 5种基础数据类型
Redis Intro
- Redis(Remote 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"