緩存 --- 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"