1、NOSQL簡介python
一、NoSQL:指的是非關係型的數據庫。用於超大規模數據的存儲。redis
二、NoSQL的特色:數據庫
①不須要預約義模式:緩存
不須要預先定義數據模式、表結構。即數據中的每條記錄均可能有不一樣的屬性和格式。服務器
②無共享架構:網絡
相對於 全共享架構:全部數據存儲在區域網絡中(跨機房、跨網段等)。NOSQL 每每將數據架構
劃分後存儲在各個本地服務器上。故而NOSQL的數據讀取性能更好。異步
③彈性可擴展:性能
能夠在系統運行時動態增長或者刪除結點。不須要停機維護,數據能夠自動遷移。spa
④分區:NOSQL 將數據分區,並將記錄分散在多個節點上面。而且在分區的同時還要進行
複製 操做。這樣既能提升並行性能,又能保證沒有單點失效的問題。
⑤異步複製:NOSQL是基於日誌的異步複製。這樣不會有網絡延時;缺點是並不能100%保證數據
的一致性。這樣的工做方式在出現故障時,可能對丟失少許數據。
⑥BASE特性:基本可用,軟狀態/柔性事物、最終一致性。
相對於事物嚴格的ACID特徵,NOSQL 數據庫保證的是BASE特性。
三、經常使用的 NOSQL數據庫
四、Redis 的概念:
Redis 是一個KEY-VALUE 存儲系統。和Memcached 相似,它支持存儲的 value 類型更多。包括 string、list、set(集合)、zset(有序集合) 和 hash(哈希類型)。
支持各類不一樣方式的排序。
爲保證效率,數據都緩存在內存中。
會週期性的把更新數據寫入磁盤或把修改操做寫入追加的記錄文件,在此基礎上實現主從同步。
Redis 提供了 Java C/C++ C# PHP Perl Python Ruby 等客戶端,使用方便。
五、Redis 中的 key通常都是字符串;value 能夠是:字符串、列表、集合、哈希類型。
六、list 和 set 的區別:元素是否能夠重複
list類型,list中的元素能夠重複:{1,2,3,1,2,3}
set類型,set中的元素不能夠重複:{1,2,3,4,5,6,7}
七、源碼安裝 Redis(通常安裝在 Linux 系統中)
[root@JSH-01 ~]# cd /usr/local/src
[root@JSH-01 src]# wget http://download.redis.io/releases/redis-3.0.1.tar.gz
[root@JSH-01 src]# tar zxf redis-3.0.1.tar.gz
[root@JSH-01 src]# ls
[root@JSH-01 src]# mv redis-3.0.1 /usr/local/redis
[root@JSH-01 local]# cd redis/
[root@JSH-01 redis]# make
[root@JSH-01 redis]# echo $? 查看返回值是否爲0 用於判斷是否安裝成功
[root@JSH-01 redis]# ls
00-RELEASENOTES COPYING Makefile redis.conf runtest-sentinel tests
BUGS deps MANIFESTO runtest sentinel.conf utils
CONTRIBUTING INSTALL README runtest-cluster src
[root@JSH-01 redis]# cd src/ 進入redis目錄下的 src目錄
[root@JSH-01 src]# make test 等待10分鐘左右
[root@JSH-01 src]# make install
[root@JSH-01 src]# redis-server &
The server is now ready to accept connections on port 6379
[root@JSH-01 src]# ps aux|grep redis 看到以下信息表明啓動成功
root 5156 0.1 0.7 140836 7824 pts/0 Rl 22:13 0:00 redis-server *:6379
root 5183 0.0 0.0 112664 968 pts/0 R+ 22:14 0:00 grep --color=autoredis
八、Linux 開機後啓動Redis的服務端
[root@JSH-01]# cd /usr/local/redis/src/
[root@JSH-01 src]# redis-server ../redis.conf
九、進入 Redis 客戶端
[root@JSH-01]# cd /usr/local/redis/src/
[root@JSH-01 src]# redis-cli
127.0.0.1:6379> keys *
1) "size"
2) "name"
3) "uuu"
4) "name1"
5) "Name"
6) "age"
7) "adress"
8) "abc"
9) "list1"
10) "time"
127.0.0.1:6379> get uuu
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> get size
"(tuple)"
2、Python 安裝 redis
一、在pycharm 的Terminal 中使用 pip install redis 安裝
二、鏈接 redis 服務器
鏈接redis服務器,必須知道redis服務器的ip地址和redis的端口,默認端口爲6379
import redis m = redis.Redis(host="192.168.6.137",port=6379) m.set("adress","Beijing!") print(m.get("adress"))
運行結果:
三、redis 鏈接池
redis-py使用 connection pool 來管理redis server的全部鏈接,避免每次創建、釋放鏈接的開銷。
默認,每一個Redis實例都會維護一個本身的鏈接。
能夠直接創建一個鏈接池做爲Redis的參數,這樣就能夠實現多個Redis實例共享一個鏈接池。
import redis pool = redis.ConnectionPool(host="192.168.6.137") y = redis.Redis(connection_pool=pool) y.set("name","python 3") print(y.get("name"))
運行結果:
3、Redis 的操做
提供 5 中數據類型的操做,分別是 string字符串類型、list列表類型、set集合類型、hash類型和字典
一、string 字符串的操做
格式 set(name, value, ex=None, px=None, nx=False, xx=False)
其中 ex,過時時間(秒) px,過時時間(毫秒)
nx,若是設置爲True,則只有name不存在時,當前set操做才執行,同setnx(name, value)
xx,若是設置爲True,則只有name存在時,當前set操做才執行 get(name)獲取值
set 命令用於設置給定 key 的值。若是 key 已經存儲其餘值, SET 就覆寫舊值,且無視類型。
mset 命令用於同時設置一個或多個 key-value 對。
Get 命令用於獲取指定 key 的值。若是 key 不存在,返回 None 。若是key 儲存的值不是字符串類型,返回一個錯誤。
Mget 命令返回全部(一個或多個)給定 key 的值。 若是給定的 key 裏面,有某個 key 不存在,那麼這個 key 返回 None
import redis m = redis.Redis(host="192.168.6.137",port=6379) m.set("adress","Beijing!") #設置單個key值 print(m.get("adress")) import redis pool = redis.ConnectionPool(host="192.168.6.137") y = redis.Redis(connection_pool=pool) y.mset({"name":"python3","age":"18"}) #設置多個key值 print(y.mget("name","age","size"))
運行結果: