Redis 資料型別
- string(字串): 基本的資料儲存單元,可以儲存字串、整數或者浮點數。
- hash(雜湊):一個鍵值對集合,可以儲存多個欄位。
- list(列表):一個簡單的列表,可以儲存一系列的字串元素。
- set(集合):一個無序集合,可以儲存不重複的字串元素。
- zset(sorted set:有序集合): 類似於集合,但是每個元素都有一個分數(score)與之關聯。
- 點陣圖(Bitmaps):基於字串型別,可以對每個位進行操作。
- 超日誌(HyperLogLogs):用於基數統計,可以估算集合中的唯一元素數量。
- 地理空間(Geospatial):用於儲存地理位置資訊。
- 釋出/訂閱(Pub/Sub):一種訊息通訊模式,允許客戶端訂閱訊息通道,並接收發布到該通道的訊息。
- 流(Streams):用於訊息佇列和日誌儲存,支援訊息的持久化和時間排序。
- 模組(Modules):Redis 支援動態載入模組,可以擴充套件 Redis 的功能。
String(字串)
- string 是 redis 最基本的型別,你可以理解成與 Memcached 一模一樣的型別,一個 key 對應一個 value。
- string 型別是二進位制安全的。意思是 redis 的 string 可以包含任何資料,比如jpg圖片或者序列化的物件。
- string 型別是 Redis 最基本的資料型別,string 型別的值最大能儲存 512MB。
常用命令
SET key value:設定鍵的值。
GET key:獲取鍵的值。
INCR key:將鍵的值加 1。
DECR key:將鍵的值減 1。
APPEND key value:將值追加到鍵的值之後
案例
# redis-cli -p 6379
127.0.0.1:6379> set key1 v1 #設定key的值
OK
127.0.0.1:6379> get key1 #獲取key的值
"v1"
127.0.0.1:6379> keys *
1) "key1"
127.0.0.1:6379> append key1 "hello" #追加字串
(integer) 7
127.0.0.1:6379> get key1
"v1hello"
127.0.0.1:6379> strlen key1 #獲取當前字串的長度
(integer) 7
127.0.0.1:6379> EXISTS key1 #判斷當前key是否存在
(integer) 1
127.0.0.1:6379> APPEND name xiaoli #追加字串,如果當前key不存在,相當於set
(integer) 6
- 字串自增減、步長
127.0.0.1:6379> SET views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> INCR views #自增1
(integer) 1
127.0.0.1:6379> get views
"1"
127.0.0.1:6379> INCR views
(integer) 2
127.0.0.1:6379> DECR views #自減1
(integer) 1
127.0.0.1:6379> DECR views
(integer) 0
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> INCRBY views 10 #自增步長10
(integer) 10
127.0.0.1:6379> INCRBY views 10
(integer) 20
127.0.0.1:6379> DECRBY views 6 #自減步長10
(integer) 14
- 擷取字串
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> KEYS *
(empty array)
127.0.0.1:6379> set key1 helloxiaoming
OK
127.0.0.1:6379> get key1
"helloxiaoming"
127.0.0.1:6379> GETRANGE key1 0 3 #擷取字串【0,3】
"hell"
127.0.0.1:6379> GETRANGE key1 0 -1 #獲取全部字串
"helloxiaoming"
- 替換字串
127.0.0.1:6379> set key2 sdagasdg
OK
127.0.0.1:6379> get key2
"sdagasdg"
127.0.0.1:6379> SETRANGE key2 1 00 #替換指定位置開始的字串
(integer) 8
127.0.0.1:6379> get key2
"s00gasdg"
- setex&setnx
setex (set with expire) #設定過期時間
setnx (set if not exist) #不存在再設定(在分散式鎖中常常使用!!!)
127.0.0.1:6379> SETEX key3 30 hello #設定key3的值為hello,30s過期。
OK
127.0.0.1:6379> ttl key3
(integer) 19
127.0.0.1:6379> SETNX mykey redis #設定mykey的值為redis,返回結果為1,設定成功
(integer) 1
127.0.0.1:6379> keys *
1) "key1"
2) "mykey"
3) "key2"
127.0.0.1:6379> setnx mykey mysql #設定mykey的值為mysql,返回結果為0,設定失敗,因為已近存在
(integer) 0
127.0.0.1:6379> get key3
(nil)
127.0.0.1:6379> get mykey
"redis"
- mset&mget
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 #同時設定多個值
OK
127.0.0.1:6379> KEYS *
1) "k2"
2) "k3"
3) "k1"
127.0.0.1:6379> MGET k1 k2 k3 #同時獲取多個值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> MSETNX k1 v1 k4 v4 #msetnx是一個原子性操作,要麼一起成功,要麼一起失敗。
(integer) 0
127.0.0.1:6379> get k4
(nil)
- 物件
127.0.0.1:6379> mset user:1 {name:zhangsan,age:100} #設定一個user:1的物件,值為json字元來儲存一個物件! user:{id}:{filed}
OK
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 1
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) "user:1:age"
2) "1"
- getset
127.0.0.1:6379> GETSET db redis #如果不存在,則返回nil
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> GETSET db mysql #如果存在值,取舊值,設新值
"redis"
127.0.0.1:6379> get db
"mysql"