最近在學習scrapy redis,順便複習了redis。
本篇爲redis篇,包含實例演示,主從服務配置,python交互等內容。python
nosql數據庫:mysql
不支持SQL語法linux
存儲結構跟傳統關係型數據庫中的那種關係表徹底不一樣,nosql中存儲的數據都是KV形式git
NoSQL的世界中沒有一種通用的語言,每種nosql數據庫都有本身的api和語法,以及擅長的業務場景github
redi數據庫是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。正則表達式
windows:redis
安裝redis:
https://github.com/MSOpenTech/redis/releasessql
安裝redis管理客戶端:
https://redisdesktop.com/download數據庫
linux:ubuntu
安裝:sudo apt-get -y install redis-server
鏈接redis:redis-cli
重要配置項說明:配置文件位置:/etc/redis/redis.conf
bind ip 綁定ip以配置遠程訪問 port [num] 綁定端口 daemonize 是否以守護進程運行,推薦設置爲yes,不會在命令行阻塞,相似於服務 dbfilename 數據文件名稱 dir /xx/xx/redis 設置數據文件存儲的位置 log file /xx/xx/xx/redis-server.log 日誌文件位置 slaveof ip port 主從複製的ip端口
啓動redis:sudo server redis start
中止redis:sudo server redis stop
重啓redis:sudo server redis restart
加載指定的redis配置啓動:sudo redis-server /etc/redis/redis.conf
查看redis進程:ps-ef|grep redis
殺死進程:sudo kill -9 pid
redis是key-value的數據結構,每條數據都是一個鍵值對
鍵的類型是字符串,且鍵不能重複
redis鍵命令
redis鍵命令對全部數據類型通用
查找鍵:keys [正則表達式]
查看所有鍵:keys *
判斷鍵是否存在:exists key
查看鍵對應的值的類型:type key
刪除鍵對應的值的類型:del key1 key2 key3...
設置鍵的過時時間:expire key seconds
查看鍵的有效時間:ttl key
字符串類型是Redis中最爲基礎的數據存儲類型,它在Redis中是二進制安全的,這便意味着該類型能夠接受任何格式的數據,如JPEG圖像數據或Json對象描述信息等。在Redis中字符串類型的Value最多能夠容納的數據長度是512M。
新增與更新
設置鍵值(當鍵存在即爲更新值):set key value
舉個栗子:
# 設置鍵爲xianyu值爲plus的數據 set xianyu plus
設置鍵值以及過時時間:setex key seconds value
舉個栗子:
# 設置鍵爲xianyu值爲plus的數據,且3秒後過時 setex xianyu 3 plus
設置多個鍵值:mset key1 value1 key2 value2...
舉個栗子:
# 設置鍵爲xianyu[n]值爲plus[n]的數據 mset xianyu plus xianyu1 plus1 xianyu2 plus2
向現有的值追加其餘值:append key value
舉個栗子:
# 向鍵名爲xianyu的值中追加值1 append xianyu 1
查看
查看鍵值:get key
舉個栗子:
# 查看xianyu的值 get xianyu
查看多個鍵的值:mget key1 key2 key3...
舉個栗子:
# 查看xianyu1,xianyu2,xianyu3的值 mget xianyu1 xianyu2 xianyu3
刪除
刪除鍵:del key
hash哈希類型相關操做
hash類型的值的類型爲string
新增與修改
設置單個值:hset key field value
舉個栗子:
# 設置鍵xianyu的name屬性的值爲xianyuplus hset xianyu name xianyuplus
設置多個值:hmset key field1 value1 field2 value2 ...
舉個栗子:
# 設置xianyu的name值爲xianyuplus age值爲23 hmset xianyu name xianyuplus age 23
獲取
獲取單個鍵的全部屬性:hkeys key
舉個栗子:
# 獲取xianyu的全部屬性 hkeys xianyu
獲取單個屬性的值:hget key field
舉個栗子:
# 獲取xianyu的name值 hget xianyu name
獲取多個屬性的值:hmget key field1 field2 ...
舉個栗子:
# 獲取xianyu的name值和age值 hmget xianyu name age
獲取全部屬性的值:hvals key
舉個栗子:
hvals xianyu
刪除
刪除單個鍵全部屬性和值:del key
刪除鍵的屬性(對應的值也會被清空):hdel field1 field2...
舉個栗子:
# 刪除xianyu的name和age hdel xianyu name age
list類型的值爲string,值按照插入順序排序
新增
在list左邊插入數據:lpush key value1 value2 value3...
舉個栗子:
#插入1,2,3,4,5,6, lpush xianyu 1 2 3 4 5 6
在list右邊插入數據:rpush key value1 value2 value3...
舉個栗子:
#插入1,2,3,4,5,6, rpush xianyu 1 2 3 4 5 6
在指定元素前或後插入數據:linsert key before/after 現有元素 新元素
舉個栗子:
# 在1的前面插入a linsert xianyu before 1 a
獲取列表元素
獲取列表指定範圍內的值:lrange key start stop
注意:這裏的列表和python中的列表索引方式相同,從左往右以0開始,索引支持負數
舉個栗子:
# 獲取鍵爲xianyu的列表0到6的所有元素 lrange xianyu 0 6 # 獲取鍵爲xianyu的列表全部元素 lrange xianyu 0 -1
修改
設置指定索引位置的元素:lset key index value
舉個栗子:
lset xianyu 0 1
刪除
刪除指定元素:lrem key count value
將列表中前count次出現的值爲value的元素移除 count > 0: 從頭往尾移除 count < 0: 從尾往頭移除 count = 0: 移除全部
舉個栗子:
# 刪除從頭往尾數的兩個1 lrem xianyu 2 1
無序集合
元素爲string類型
元素具備惟一性,不重複
新增
添加元素:sadd key member1 member2 ...
舉個栗子:
# 向鍵xianyu的集合中添加元素a,b,c sadd xianyu a b c
獲取
獲取全部值:smembers key
舉個栗子:
# 獲取鍵xianyu的集合全部的值 smembers xianyu
刪除
刪除指定的元素:srem key member
舉個栗子:
# 刪除鍵xianyu的集合值指定的元素 srem xianyu a
sorted set,有序集合
元素爲string類型
元素具備惟一性,不重複
每一個元素都會關聯一個double類型的score,表示權重,經過權重將元素從小到大排序
新增
新增多個元素:zadd key score1 member1 score2 member2 ...
舉個栗子:
zadd xianyu 2 name 1 age
查看
這裏的有序集合和列表相同都有索引值
查看有序集合的值:zrange key start stop
舉個栗子:
# 獲取xianyu中0-6的值 zrange xianyu 0 6 # 獲取xianyu中全部的值 zrange xianyu 0 -1 # 獲取xianyu中權重最大最小中間的值
查看集合權重在指定範圍內的值:zrangebyscore key min max
舉個栗子:
zrangebyscore xianyu min max
返回成員member的score值:zscore key member
舉個栗子:
zscore xianyu a
刪除
刪除指定元素:zrem key member1 member2 ...
舉個栗子:
zrem xianyu a
刪除權重在指定範圍的元素:zrem key min max
舉個栗子:
zrem xianyu 1 2
安裝:pip install redis
導入模塊:from redis import *
經過init建立對象,指定參數host、port與指定的服務器和端口鏈接,host默認爲localhost,port默認爲6379,db默認爲0,默認沒有密碼。
red = StrictRedis(host='localhost', port=6379, db=0)
這裏不一樣類型擁有的方法和上面redis中講解的方法相同,這裏再也不贅述。
舉個栗子:
# 連接redis,建立stricredis對象 from redis import * if __name__=="__main__": try: #建立StrictRedis對象,與redis服務器鏈接 redis=StrictRedis() # 新增一個string類型 result=redis.set('name','xianyuplus') # 成功打印True,失敗打印False print(result) #獲取鍵name的值 result = redis.get('name') #輸出鍵的值,若是鍵不存在則返回None print(result) #設置鍵name的值,若是鍵已經存在則進行修改,若是鍵不存在則進行添加 result = redis.set('name','xianyu') #輸出響應結果,若是操做成功則返回True,不然返回False print(result) result = redis.delete('name') #輸出響應結果,若是刪除成功則返回受影響的鍵數,不然則返回0 print(result) #獲取全部的鍵 result=sr.keys() #輸出響應結果,全部的鍵構成⼀個列表,若是沒有鍵則返回空列表 print(result) except Exception as e: print(e)
一個master能夠擁有多個slave,一個slave能夠擁有多個slave,如此下去,造成了多級服務器集羣架構
master用來寫數據,slave用來讀數據,經統計:網站的讀寫比率是10:1
經過主從配置能夠實現讀寫分離
vim etc/redis/redis.conf bind [本機ip] sudo service redis stop redis-server redis.conf
sudo cp redis.conf ./slave.conf vim slave.conf bind [主配置的ip] slaveof [主配置的ip 端口號] port 6378 --這個端口號不能和主配置的相同 sudo redis-server slave.conf
redis-cli -h [主配置的ip] info Replication
主配置上寫入數據:set xianyu xianyuplus 從配置上讀取數據:get xianyu
以上就是關於redis的一些用法,重點部分仍是各個數據類型的操做,必定要照着敲一次才能記得住哦。