什么是Redis:
概念:
Redis (REmote DIctionary Server) 是用 C 語言開發的一個開源的高性能鍵值對(key-value)數據庫。
特征:
1. 數據間沒有必然的關聯關系
2. 內部采用單線程機制進行工作
3. 高性能。官方提供測試數據,50個並發執行100000 個請求,讀的速度是110000 次/s,寫的速度是81000次/s。
4. 多數據類型支持
- 字符串類型 string
- 列表類型 list
- 散列類型 hash
- 集合類型 set
- 有序集合類型 sorted_set
4. 持久化支持。可以進行數據災難恢復
在什么情況下使用Redis?
- 為熱點數據加速查詢(主要場景),如熱點商品、熱點新聞、熱點資訊、推廣類等高訪問量信息等
- 任務隊列,如秒殺、搶購、購票排隊等
- 即時信息查詢,如各位排行榜、各類網站訪問統計、公交到站信息、在線人數信息(聊天室、網站)、設備信號等
- 時效性信息控制,如驗證碼控制、投票控制等
- 分布式數據共享,如分布式集群架構中的 session 分離
- 消息隊列
- 分布式鎖
Redis 的基本操作:
信息添加
功能:設置 key,value 數據
命令: set kye value
例如: set name “李四”
信息查詢
功能:根據 key 查詢對應的 value,如果不存在,返回空(nil)
命令:
get key
范例:
get name
清除屏幕信息
功能:清除屏幕中的信息
命令
clear
退出客戶端命令行模式
功能:退出客戶端
命令
quit
exit
<ESC>
幫助
功能:獲取命令幫助文檔,獲取組中所有命令信息
命令
help 命令名稱
help @組名
key 基本操作
刪除指定key
del key
獲取key是否存在
exists key
獲取key的類型
type key
為指定key設置有效期
expire key seconds
pexpire key milliseconds
expireat key timestamp
pexpireat key milliseconds-timestamp
獲取key的有效時間
ttl key
pttl key
切換key從時效性轉換為永久性
persist key
為key改名
rename key newkey
renamenx key newkey
對所有key排序
sort
其他key通用操作
help @generic
查詢key
keys pattern
* 匹配任意數量的任意符號
? 配合一個任意符號
[] 匹配一個指定符號
db 基本操作
切換數據庫
select index
其他操作
quit
ping
echo message
數據移動
move key db
數據清除
dbsize
flushdb
flushall
string 類型
- 存儲的數據:單個數據,最簡單的數據存儲類型,也是最常用的數據存儲類型
- 存儲數據的格式:一個存儲空間保存一個數據
- 存儲內容:通常使用字符串,如果字符串以整數的形式展示,可以作為數字操作使用string
string 類型數據的基本操作
添加/修改
set key value
獲取數據
get key
刪除數據
del key
添加/修改多個數據
mset key1 value1 key2 value2
獲取多個數據
mget key1 key2
獲取數據字符個數(字符串長度)
strlen key
追加信息到原始信息后部(如果原始信息存在就追加,否則新
append key val
設置數值數據增加指定范圍
incr key (加一)
incrby key (可以指定數值,如果為數值是負數那就是減操作)
incrementincrbyfloat key increme (小數)
設置數值數據減少指定范圍的值
decr key(減一)
decrby key increme(可以指定數值,如果為負數那就是增加操作)
設置數據具有指定的生命周期
setex key seconds value (單位為秒)
psetex key milliseconds value (單位為毫秒)
string 類型數據操作的注意事項
- 數據操作不成功的反饋與數據正常操作之間的差異 數據未獲取到(nil)等同於null
- ① 表示運行結果是否成功
- (integer) 0 → false 失敗
- (integer) 1 → true 成功
- ② 表示運行結果值
- (integer) 3 → 3 3個
- (integer) 1 → 1 1個
- ① 表示運行結果是否成功
- 數據最大存儲量512MB
- 數值計算最大范圍(java中的long的最大值)92233720368547758
hash 類型
- 新的存儲需求:對一系列存儲的數據進行編組,方便管理,典型應用存儲對象信息
- 需要的存儲結構:一個存儲空間保存多個鍵值對數據
- hash類型:底層使用哈希表結構實現數據存儲
hash 類型數據的基本操作
添加/修改數據
hset key field value
獲取數據
hget key field (單個)
hgetall key(所有)
刪除數據
hdel key field1 [field2]
添加/修改多個數據
hmset key field1 value1 field2 value2 …
獲取多個數據
hmget key field1 field2 …
獲取哈希表中字段的數量
hlen key
獲取哈希表中是否存在指定的字段
hexists key field
獲取哈希表中所有的字段名或字段值
hkeys key(獲取key值)
hvals key(獲取value值)
設置指定字段的數值數據增加指定范圍的值
hincrby key field increment(整數)
hincrbyfloat key field increment(小數)
hash 類型數據操作的注意事項
- hash類型下的value只能存儲字符串,不允許存儲其他數據類型,不存在嵌套現象。如果數據未獲取到, 對應的值為(nil) hash 類型數據操作的注意事項 每個 hash 可以存儲 2 32 - 1 個鍵值對
- hash類型十分貼近對象的數據存儲形式,並且可以靈活添加刪除對象屬性。但hash設計初衷不是為了存 儲大量對象而設計的,切記不可濫用,更不可以將hash作為對象列表使用
- hgetall 操作可以獲取全部屬性,如果內部field過多,遍歷整體數據效率就很會低,有可能成為數據訪問 瓶
list 類型
- 數據存儲需求:存儲多個數據,並對數據進入存儲空間的順序進行區分
- 需要的存儲結構:一個存儲空間保存多個數據,且通過數據可以體現進入順序
- list類型:保存多個數據,底層使用雙向鏈表存儲結構實現
list 類型數據基本操作
添加/修改數據
lpush key value1 [value2] …… (從左開始)
rpush key value1 [value2] ……(從右開始)
獲取數據
lrange key start stop
lindex key index
llen key
獲取並移除數據
lpop key(左)
rpop key(右)
規定時間內獲取並移除數據
blpop key1 [key2] timeout
brpop key1 [key2] timeout
brpoplpush source destination timeout
移除指定數據
lrem key count value
list 類型數據操作注意事項
- list中保存的數據都是string類型的,數據總容量是有限的,最多2 32 - 1 個元素 (4294967295)。
- list具有索引的概念,但是操作數據時通常以隊列的形式進行入隊出隊操作,或以棧的形式進行入棧出棧操作
- 獲取全部數據操作結束索引設置為-1
- list可以對數據進行分頁操作,通常第一頁的信息來自於list,第2頁及更多的信息通過數據庫的形式加載
set 類型
- 新的存儲需求:存儲大量的數據,在查詢方面提供更高的效率
- 需要的存儲結構:能夠保存大量的數據,高效的內部存儲機制,便於查詢
- set類型:與hash存儲結構完全相同,僅存儲鍵,不存儲值(nil),並且值是不允許重復的
set 類型數據的基本操作
添加數據
sadd key member1 [member2]
獲取全部數據
smembers key
刪除數據
srem key member1 [member2]
獲取集合數據總量
scard key
判斷集合中是否包含指定數據
sismember key member
隨機獲取集合中指定數量的數據
srandmember key [count]
隨機獲取集合中的某個數據並將該數據移出集合
spop key [count]
求兩個集合的交、並、差集
sinter key1 [key2](交集)
sunion key1 [key2](並集)
sdiff key1 [key2](差集)
求兩個集合的交、並、差集並存儲到指定集合中
sinterstore destination key1 [key2](交)
sunionstore destination key1 [key2](並)
sdiffstore destination key1 [key2] (差)
將指定數據從原始集合中移動到目標集合中
smove source destination member
set 類型數據操作的注意事項
- set 類型不允許數據重復,如果添加的數據在 set 中已經存在,將只保留一份 set 類型數據操作的注意事項
- set 雖然與hash的存儲結構相同,但是無法啟用hash中存儲值的空間
sorted_set 類型
- 新的存儲需求:數據排序有利於數據的有效展示,需要提供一種可以根據自身特征進行排序的方式
- 需要的存儲結構:新的存儲模型,可以保存可排序的數據
- sorted_set類型:在set的存儲結構基礎上添加可排序字段
sorted_set 類型數據的基本操作
添加數據
zadd key score1 member1 [score2 member2]
獲取全部數據
zrange key start stop [WITHSCORES]
zrevrange key start stop [WITHSCORES]
刪除數據
zrem key member [member ...]
按條件獲取數據
zrangebyscore key min max [WITHSCORES] [LIMIT]
zrevrangebyscore key max min [WITHSCORES]
條件刪除數據
zremrangebyrank key start stop
zremrangebyscore key min max
獲取集合數據總量
zcard key
zcount key min max
集合交、並操作
zinterstore destination numkeys key [key ...]
zunionstore destination numkeys key [key ...]
獲取數據對應的索引(排名)
zrank key member
zrevrank key membe
score值獲取與修改
zscore key member
zincrby key increment member
獲取當前系統時間
time
sorted_set 類型數據操作的注意事項
- score保存的數據存儲空間是64位,如果是整數范圍是-9007199254740992~9007199254740992
- score保存的數據也可以是一個雙精度的double值,基於雙精度浮點數的特征,可能會丟失精度,使用時 候要慎重
- sorted_set 底層存儲還是基於set結構的,因此數據不能重復,如果重復添加相同的數據,score值將被反 復覆蓋,保留最后一次修改的結果
學習的視頻是:https://www.bilibili.com/video/av76235738/?spm_id_from=333.788.videocard.3