天天看點

Redis筆記Redis介紹服務端與用戶端指令資料操作與Python互動主從小結

記錄鍵值資料庫Redis指令筆記,以便後續使用檢視。

redis中文文檔:http://redis.cn/commands.html

目錄

  • Redis介紹
    • nosql概念介紹
    • 簡介
    • 特性
    • 優勢
  • 服務端與用戶端指令
    • 服務端
  • 資料操作
    • String
    • 鍵指令
    • hash
    • list
    • set
    • zset
  • 與Python互動
  • 主從小結
    • 概念
    • 簡單配置

Redis介紹

nosql概念介紹

  • 泛指非關系型的資料庫
  • 不支援SQL文法
  • 存儲結構跟傳統關系型資料庫中的那種關系表完全不同,nosql中存儲的資料都是KV形式
  • NoSQL的世界中沒有一種通用的語言,每種nosql資料庫都有自己的api和文法,以及擅長的業務場景
  • NoSQL中的産品種類相當多:
    • Mongodb
    • Redis
    • Hbase hadoop
    • Cassandra hadoop

簡介

  Redis是一個開源的使用ANSI C語言編寫、支援網絡、可基于記憶體亦可持久化的日志型、Key-Value資料庫,并提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。從2013年5月開始,Redis的開發由Pivotal贊助。

  Redis是 NoSQL技術陣營中的一員,它通過多種鍵值資料類型來适應不同場景下的存儲需求,借助一些高層級的接口使用其可以勝任,如緩存、隊列系統的不同角色。

特性

Redis 與其他 key - value 緩存産品有以下三個特點:

  1. Redis支援資料的持久化,可以将記憶體中的資料儲存在磁盤中,重新開機的 時候可以再次加載進行使用。
  2. Redis不僅僅支援簡單的key-value類型的資料,同時還提供list,set, zset,hash等資料結構的存儲。
  3. Redis支援資料的備份,即master-slave模式的資料備份。

優勢

  1. 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
  2. 豐富的資料類型 – Redis支援二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 資料類型操作。
  3. 原子 – Redis的所有操作都是原子性的,同時Redis還支援對幾個操作全并後的原子性執行。
  4. 豐富的特性 – Redis還支援 publish/subscribe, 通知, key 過期等等特性。

服務端與用戶端指令

服務端

  這裡使用windows10系統操作redis資料庫;

開啟服務端指令:(若沒有配置環境變量需先cd切換到下載下傳redis的存放目錄下)

  1. windows:redis-server.exe redis.windows.conf
  2. linux:redis-server “/…/…/redis.conf” (…代表指定的目錄路徑)

輸入windows伺服器的redis開啟指令,出現以下圖檔情況表示成功。

Redis筆記Redis介紹服務端與用戶端指令資料操作與Python互動主從小結

可以使用help檢視幫助文檔

redis-server help
           

用戶端指令: redis-cli [-h(指定連接配接redis資料庫ip) -p(指定端口)]

可以使⽤help檢視幫助⽂檔

redis-cli --help
           

連接配接本地redis資料庫指令:

Redis筆記Redis介紹服務端與用戶端指令資料操作與Python互動主從小結

運作測試指令:ping(若出現PONG則為正常)

Redis筆記Redis介紹服務端與用戶端指令資料操作與Python互動主從小結

切換資料庫,資料庫沒有名稱,預設有16個,通過0-15來辨別,連接配接redis預設選擇第一個資料庫:

select 10
           
Redis筆記Redis介紹服務端與用戶端指令資料操作與Python互動主從小結

資料操作

String

設定值:

set key value
           

設定值以及過期時間:

setex key seconds value
           

設定值以及過期時間:

追加内容:

append key value
           

擷取鍵的值:

get key
           

擷取多個值:

鍵指令

檢視所有鍵值對:

删除對應的鍵值對資料:

del key
           

判斷鍵是否存在:(存在傳回1,反之傳回0)

exists key
           

判斷類型:

type key
           

修改過期時間:

expire key seconds  
           

檢視過期時間:

tll key
           

hash

  hash類型:hash⽤于存儲對象,對象的結構為屬性、值(值的類型為string)。注意:哈希hash中的key指的是一個字典的變量值,而field為字典的鍵值(key)

設定單個屬性:

hset key field value
           

設定多個屬性:

擷取指定鍵所有的屬性:

hkeys 對象名
           

擷取一個字段的值:

hget key field
           

擷取多個字段的值:

例:擷取鍵u2屬性’name’、'age的值:

hmget u2 name age
           

擷取所有屬性的值:

hvals key
           

删除屬性的值:

hdel key field
           

list

list類型:

  1. 清單的元素類型為string
  2. 按照插入順序排序

在左側插⼊資料: insert(0, item)

lpush key value1 value2
           

在右側插⼊資料: append(item)

rpush key value1 value2
           

傳回清單⾥指定範圍内的元素:

  1. start、stop為元素的下标索引
  2. 索引從左側開始,第⼀個元素為0
  3. 索引可以是負數,表示從尾部開始計數,如-1表示最後⼀個元素
lrange key start stop
           

在指定元素的前或後插⼊新元素:

linsert key before或after 現有元素 新元素
           

設定指定索引位置的元素值:

  1. 索引從左側開始,第⼀個元素為0
  2. 索引可以是負數,表示尾部開始計數,如-1表示最後⼀個元素
lset key index value
           

删除指定元素:

  1. 将清單中前count次出現的值為value的元素移除
  2. count > 0: 從頭往尾移除
  3. count < 0: 從尾往頭移除
  4. count = 0: 移除所有
lrem key count value
           

例子:lrange查詢左右閉區間 []

1:向清單’a2’中加⼊元素’a’、‘b’、‘a’、‘b’、‘a’、‘b’

lpush a2 a b a b a b
           

2:從’a2’清單右側開始删除2個’b’

lrem a2 -2 b
           

3:檢視清單’py12’的所有元素(0)

lrange a2 0 -1
           

set

set類型:說明:對于集合沒有修改操作

  1. ⽆序集合
  2. 元素為string類型
  3. 元素具有唯⼀性,不重複

添加元素:

例1:向鍵’a3’的集合中添加元素’zhangsan’、‘lisi’、‘wangwu’:

sadd a3 zhangsan sili wangwu
           

傳回所有的元素:

smembers key
           

例2:擷取鍵’a3’的集合中所有元素

smembers a3
           

删除元素:

srem key member
           

例3:删除鍵’a3’的集合中元素’wangwu’

srem a3 wangwu
           

zset

zset類型:有序的集合(說明:沒有修改操作)

  1. sorted set,有序集合
  2. 元素為string類型
  3. 元素具有唯⼀性,不重複
  4. 每個元素都會關聯⼀個double類型的score,表示權重,通過權重将元素從⼩到⼤排序

添加元素:

zadd key score1 member1 score2 member2
           

例1:向鍵’a4’的集合中添加元素’lisi’、‘wangwu’、‘zhaoliu’、‘zhangsan’,權重分别為4、5、6、3

zadd a4 4 lisi 5 wangwu 6 zhaoliu 3 zhangsan
           

傳回所有的元素:

  1. 傳回指定範圍内的元素
  2. start、stop為元素的下标索引
  3. 索引從左側開始,第⼀個元素為0
  4. 索引可以是負數,表示從尾部開始計數,如-1表示最後⼀個元素
zrange key start stop	
           

例2:擷取鍵’a4’的集合中所有元素

zrange a4 0 -1
           

傳回score值在min和max之間的成員:

zrangebyscore key min max
           

例3:擷取鍵’a4’的集合中權限值在5和6之間的成員

zrangebyscore a4 5 6
           

傳回成員member的score值:

zscore key member
           

例4:擷取鍵’a4’的集合中元素’zhangsan’的權重

zscore a4 zhangsan
           

删除指定元素:

例5:删除集合’a4’中元素’zhangsan’

zrem a4 zhangsan
           

删除權重在指定範圍的元素:

zremrangebyscore key min max
           

例6:删除集合’a4’中權限在5、6之間的元素

zremrangebyscore a4 5 6
           

與Python互動

安裝redis第三方庫: pip install redis

使用python操作redis資料庫

  • 導入子產品
  • 建立redis資料庫對象()

    decode_responses=True :按照utf8的格式将

    bytes

    類型資料轉換成

    字元串

  • 執行redis指令
sr.set(key,value)
sr.get(key)
sr.delete(key)
           

注意:操作redis服務端時的指令與Python操作redis資料庫時的指令大緻相同,唯有服務端中的del删除指令在Python内變成delete即可。

主從小結

概念

master和slave都是一個redis執行個體(redis服務)

  1. ⼀個master可以擁有多個slave,⼀個slave⼜可以擁有多個slave,如此下去,形成了強⼤的多級伺服器叢集架構
  2. master用來寫資料,slave用來讀資料,經統計:網站的讀寫比率是10:1
  3. 通過主從配置可以實作讀寫分離

簡單配置

  1. 将主機redis的配置檔案影印一份并重命名為:slave.conf(名字可自定義)
  2. 修改從機的redis配置檔案vi slave.conf
  3. 編輯内容:
    • bind 【主機指定ip】
    • 添加:slaveof 【主機指定ip】 6379
    • 修改port 6378
  4. 儲存後,先運作主機redis,後運作從機redis;注意從機 會同時同步主機redis的資料,但是從機不可添加、修改、删除内容

更多筆記内容後續持續更新…