1. 程式人生 > 資料庫 >非關係型資料庫--Redis

非關係型資料庫--Redis

redis非關係型資料庫

特點

Redis為非關係型的資料庫的一種

  • 不支援SQL語法
  • Redis支援資料的持久化,可以將記憶體中的資料儲存在磁碟中,重啟的時候可以再次載入進行使用。
  • Redis儲存結構主要為K:V形式,跟關係型資料庫中關係表完全不同,同時還提供listsetzsethash等資料結構的儲存。
  • Redis支援資料的備份,即master-slave模式的資料備份。

應用場景

  • 用來做快取
    (ehcache/memcached) ——redis的所有資料是放在記憶體中的(記憶體型資料庫)
  • 可以在某些特定應用場景下替代傳統資料庫——比如社交類的應用
  • session共享、購物車 等

資料結構

rediskey-value的資料結構,每條資料都是⼀個鍵值對,鍵的型別是字串並且不能重複

鍵命令(公有命令)

  1. 檢視鍵
    1. keys * 檢視該資料庫中所有的鍵
    2. keys a* 檢視該資料庫中鍵名中包含a的鍵
    3. 注意:獲取的結果為鍵名而非鍵對應的值
  2. 刪除鍵
    del 鍵名1,鍵名2 刪除指定鍵(包括鍵中的值)
  3. 是否存在
    exists 鍵名 判斷指定鍵是否存在,存在返回1,不存在返回0
  4. 檢視鍵的型別
    type 鍵名 檢視鍵對應值的的型別
  5. 為已存在的鍵設定過期時間
    expire 鍵名 時間 時間單位為秒,例:expire a1 3 設定鍵a1的過期時間為3秒
    沒有指定過期時間的鍵,會⼀直存在,直到使⽤DEL移除
  6. 檢視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 檢視資料庫中儲存的鍵為nameage的字串資料("大明亮"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存在指定屬性為修改原屬性值,不存在則為新增新屬性

  1. 共有刪除方法(del 鍵名),刪除整個hash鍵(包括鍵名、所有屬性和值)

  2. 刪除屬性(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型別
  • 元素具有唯⼀性,不重複

  1. 格式:sadd 鍵名 元素1 元素2 ...
    例:sadd a3 張 王 李 向鍵a3的集合中新增元素 張、王、李
    鍵名不存在為新建,存在為新增

  2. 刪除
    刪除指定元素
    格式:srem 鍵名 指定元素
    例:srem a3 李 刪除鍵a3的集合中元素

  3. 獲取
    返回所有的元素
    格式:smembers 鍵名
    例:smembers a3 獲取鍵a3的集合中所有元素

有序集合zset

  • 元素為string型別
  • 元素具有唯⼀性,不重複
  • 每個元素都會關聯⼀個double型別的score,表示權重,通過權重將元素從⼩到⼤排序
  • 沒有修改操作
  1. 增加
    格式:zadd 鍵名 權重1 值1 權重2 值2 ...
    例1:zadd a4 4 一 5 二 6 三 3 四 向鍵a4的集合中新增元素一、二、三、四,權重分別為4、5、6、3

  2. 刪除

    1. 刪除指定元素
      格式:zrem 鍵名 值1 值2 ...
      例:zrem a4 三 刪除集合a4中元素
    2. 刪除權重在指定範圍的元素
      格式:zremrangebyscore 鍵名 最小權重 最大權重
      例:zremrangebyscore a4 5 6 刪除集合a4中權重在5、6之間的元素
  3. 查詢(獲取)

    1. 返回指定範圍內的元素
      格式:zrange key 元素開始索引 結束索引
      索引從左側開始,第⼀個元素為0
      索引可以是負數,表示尾部開始計數,如-1表示最後⼀個元素
      例:zrange a4 0 -1 獲取鍵a4的集合中所有元素

    2. 返回 權重值 在最大權重最小權重之間的元素
      格式:zrangebyscore 鍵名 最小權重 最大權重 包含最大最小權重
      例:zrangebyscore a4 5 6 獲取鍵a4的集合中權重值在5和6之間的成員

    3. 返回指定元素的權重值
      格式:zscore 鍵名 指定元素
      例:zscore a4 三 獲取鍵a4的集合中元素的權重

Python和redis的互動

  1. 安裝:pip install redis
    解除安裝:apt-get purge --auto-remove redis-server
    引數--auto-remove 表示:刪除安裝軟體包
    引數purge 表示:刪除本地檔案和配置檔案
  2. 引⼊模組:impor redis
  3. 構建資料庫連線物件:連線物件名 = StrictRedis(引數列表...)
    StrictRedis物件⽤於連線redis伺服器
    指定引數有:host IP 預設為localhostport 埠 預設為6379db 資料庫號預設為0password預設為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()