Python基礎——NOSQL(0515)

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"))

運行結果:

相關文章
相關標籤/搜索