非關係型資料庫--Redis
redis非關係型資料庫
特點
Redis
為非關係型的資料庫的一種
- 不支援SQL語法
Redis
支援資料的持久化,可以將記憶體中的資料儲存在磁碟中,重啟的時候可以再次載入進行使用。Redis
儲存結構主要為K:V
形式,跟關係型資料庫中關係表完全不同,同時還提供list
,set
,zset
,hash
等資料結構的儲存。Redis
支援資料的備份,即master-slave
模式的資料備份。
應用場景
- 用來做快取
ehcache/memcached
) ——redis
的所有資料是放在記憶體中的(記憶體型資料庫) - 可以在某些特定應用場景下替代傳統資料庫——比如社交類的應用
- session共享、購物車 等
資料結構
redis
是key-value
的資料結構,每條資料都是⼀個鍵值對,鍵的型別是字串並且不能重複
鍵命令(公有命令)
- 檢視鍵
keys *
檢視該資料庫中所有的鍵keys a*
檢視該資料庫中鍵名中包含a
的鍵- 注意:獲取的結果為鍵名而非鍵對應的值
- 刪除鍵
del 鍵名1,鍵名2
刪除指定鍵(包括鍵中的值) - 是否存在
exists 鍵名
判斷指定鍵是否存在,存在返回1
,不存在返回0
- 檢視鍵的型別
type 鍵名
檢視鍵對應值的的型別 - 為已存在的鍵設定過期時間
expire 鍵名 時間
時間單位為秒,例:expire a1 3
設定鍵a1的過期時間為3秒
沒有指定過期時間的鍵,會⼀直存在,直到使⽤DEL
移除 - 檢視key的過期時間
ttl 鍵名
字串string
Redis
中最為基礎的資料儲存型別- 在
Redis
中是二進位制儲存的,即可以接受任何格式的資料,如JPEG影象
資料或Json物件
描述資訊等 - 在
Redis
中字串型別的Value
最多可以容納的資料長度是512M
增
命令 | 作用 | 例子 | 含義 |
---|---|---|---|
set 新鍵名 值 |
新增一條字串資料 | set name "小明" |
儲存一條name:"小明" |
mset 鍵1 值1 鍵2 值2 ... |
新增多條字串資料 | mset name "小明" age 18 |
儲存兩條name:"小明" ,age:18 資料 |
setex 鍵 時間 值 |
新增一條資料並設定過期時間(秒) | setex name 10 "小明" |
儲存一條資料並設定過期時間為10秒 |
注意: 使用set 鍵名 值
新增資料時若設定的鍵不存在則為新增,若存在則為修改
刪
使用redis
資料共有的刪除方法:del 鍵名
改
命令 | 作用 | 例子 | 含義 |
---|---|---|---|
set 指定鍵名 值 |
修改指定鍵的字串資料 | set name "大明" |
將儲存的name:"小明" 字串資料修改為name:"大明" |
append 指定鍵 增加值 |
為指定的鍵追加資料 | append name "亮" |
在原儲存的字串資料中追加資料(name:"大明亮" ) |
獲取(查)
命令 | 作用 | 例子 | 含義 |
---|---|---|---|
get 指定鍵 |
檢視指定的鍵中的資料 | get name |
檢視資料庫中儲存的鍵為name 的字串資料("大明亮" ) |
mget 指定鍵1 鍵2 |
檢視多個指定鍵中的資料 | mget name age |
檢視資料庫中儲存的鍵為name 和age 的字串資料("大明亮" 和18 ) |
注意: 根據鍵獲取值,如果 不存在此鍵則返回nil
表示空
雜湊hash
hash
⽤於儲存物件,物件的結構為屬性:值
,值的型別為string
增
命令 | 作用 | 例子 | 含義 |
---|---|---|---|
hset 鍵名 新屬性 值 |
在hash中新增一個屬性 | hset student name "小明" |
屬性名為name ,值為小明 |
hmset 鍵名 屬性1 值1 屬性2 值2 ... |
在hash中新增多個屬性 | hmset student sex "男" age 18 |
屬性名為sex、age ,值為男、18 |
注意: 增加屬性時,若鍵不存在則會新建一條hash資料
,若存在並且型別為hash
則表示追加屬性,若存在但不是hash
型別則會報錯
改
命令 | 作用 | 例子 | 含義 |
---|---|---|---|
hset 鍵名 指定屬性 值 |
修改hash中指定屬性中的值 | hset student name "大明" |
將原屬性(name:"小明" )修改為name:"大明" |
注意: 使用hset 鍵名 屬性名 值
時,若hash
中存在指定屬性為修改原屬性值,不存在則為新增新屬性
刪
-
共有刪除方法(
del 鍵名
),刪除整個hash
鍵(包括鍵名、所有屬性和值) -
刪除屬性(
hdel 鍵名 屬性1 屬性2 ...
),刪除指定屬性及其對應值
獲取(查)
命令 | 作用 | 例子 | 含義 |
---|---|---|---|
hget 鍵名 屬性 |
檢視指定的鍵中屬性對應的值 | hget student name |
獲取屬性名為name 對應的值("大明" ) |
hmget 鍵名 屬性1 屬性2 |
檢視多個指定鍵多個屬性對應的值 | hmget student name age |
結果為:"大明" 和"18" |
hkeys 鍵名 |
檢視指定鍵中的所有屬性名 | hkeys student |
結果為:"name" 、"sex" 和"age" |
hvals 鍵名 |
檢視指定鍵中的所有屬性對應的值 | hvals student |
結果為:"大明" 、"男" 和"18" |
hgetall 鍵名 |
檢視指定鍵中的所有屬性及對應的值 | hgetall student |
結果為:"name" 、"大明" 、"sex" …` |
列表list
列表的元素型別為string
增
命令 | 作用 | 例子 | 備註 |
---|---|---|---|
lpush 鍵名 值1 值2 ... |
儲存一組字串資料並命名 | lpush a1 a b c |
資料從左側開始插入,即插入順序為:c、b、a ,鍵名為a1 |
rpush 鍵名 值1 值2 ... |
儲存一組字串資料並命名 | lpush a1 0 1 |
資料從右側開始插入,即插入順序為:0、1 ,鍵名為a1 |
注意:若鍵名
不存在則表示新建;存在則表示在末尾新增
在指定元素的前或後插⼊新元素
格式:linsert 鍵名 before/after 指定元素 新元素
查詢
返回列表⾥指定範圍內的元素
格式:lrange 鍵名 開始索引 結束索引
- 索引從左側開始,第⼀個元素為0
- 索引可以是負數,表示尾部開始計數,如-1表示最後⼀個元素
改
修改 指定索引位置 的元素值
格式:lset 鍵名 索引 新值
擷取修剪
列表只保留指定區間內的元素(包含上下標元素),不在指定區間之內的元素都將被刪除
格式:ltrim 鍵名 開始索引 結束索引
- 索引從左側開始,第⼀個元素為0
- 索引可以是負數,表示尾部開始計數,如-1表示最後⼀個元素
無序集合set
- 元素為
string
型別 - 元素具有唯⼀性,不重複
-
增
格式:sadd 鍵名 元素1 元素2 ...
例:sadd a3 張 王 李
向鍵a3的集合中新增元素 張、王、李
鍵名不存在為新建,存在為新增 -
刪除
刪除指定元素
格式:srem 鍵名 指定元素
例:srem a3 李
刪除鍵a3的集合中元素李
-
獲取
返回所有的元素
格式:smembers 鍵名
例:smembers a3
獲取鍵a3的集合中所有元素
有序集合zset
- 元素為
string
型別 - 元素具有唯⼀性,不重複
- 每個元素都會關聯⼀個
double
型別的score
,表示權重,通過權重將元素從⼩到⼤排序 - 沒有修改操作
-
增加
格式:zadd 鍵名 權重1 值1 權重2 值2 ...
例1:zadd a4 4 一 5 二 6 三 3 四
向鍵a4的集合中新增元素一、二、三、四,權重分別為4、5、6、3 -
刪除
- 刪除指定元素
格式:zrem 鍵名 值1 值2 ...
例:zrem a4 三
刪除集合a4中元素三
- 刪除權重在指定範圍的元素
格式:zremrangebyscore 鍵名 最小權重 最大權重
例:zremrangebyscore a4 5 6
刪除集合a4中權重在5、6之間的元素
- 刪除指定元素
-
查詢(獲取)
-
返回指定範圍內的元素
格式:zrange key 元素開始索引 結束索引
索引從左側開始,第⼀個元素為0
索引可以是負數,表示尾部開始計數,如-1表示最後⼀個元素
例:zrange a4 0 -1
獲取鍵a4的集合中所有元素 -
返回 權重值 在
最大權重
和最小權重
之間的元素
格式:zrangebyscore 鍵名 最小權重 最大權重
包含最大最小權重
例:zrangebyscore a4 5 6
獲取鍵a4的集合中權重值在5和6之間的成員 -
返回指定元素的權重值
格式:zscore 鍵名 指定元素
例:zscore a4 三
獲取鍵a4的集合中元素三
的權重
-
Python和redis的互動
- 安裝:
pip install redis
解除安裝:apt-get purge --auto-remove redis-server
引數--auto-remove
表示:刪除安裝軟體包
引數purge
表示:刪除本地檔案和配置檔案 - 引⼊模組:
impor redis
- 構建資料庫連線物件:
連線物件名 = StrictRedis(引數列表...)
StrictRedis物件
⽤於連線redis
伺服器
指定引數有:host
IP 預設為localhost
、port
埠 預設為6379
、db
資料庫號預設為0
、password
預設為None
例:sr = StrictRedis(host='localhost',port=6379,db=0)
簡寫sr=StrictRedis()
管道
管道可以快取命令,減少客戶端與redis-server互動的次數
# 建立一個管道值
pipe = con.pipeline()
pipe.get('name')
pipe.set('name','xiao')
# 提交
pipe.execute()