Redis數據庫詳解

NoSQLmysql

若殺死進程應使用pkillweb

數據設計模式:分佈式、非關係型、不提供ACIDredis

特性:簡單數據模型、源數據和應用數據分離、弱一致性算法

優點:sql

  避免沒必要要的複雜性數據庫

  高吞吐量,編程

  高 水平擴展能力和低端硬件集羣設計模式

  不使用對象-關係映射數組

缺點:緩存

   不支持ACID

   功能過於簡單

   沒有統一的數據查詢模型

 

特色:

處理差大量的數據

運行再便宜的pc服務器集羣上

擊碎了性能瓶頸

 

使用場景:

一、對數據併發讀寫

二、對海量數據的高效率存儲與訪問

三、對數據的高可擴展性和高可用性(分佈式)

NOSQL的數據存儲模型

   鍵值模型

        數據模型:key-value存儲

        查找速度快

        缺點:數據無結構,一般被當作字符串或二進制數據

        應用場景:內容緩存

        實例:redis、Dynmo

   列式模型

        數據模型:數據按列存儲,將一列數據存在一塊兒

        優勢:查找迅速,可擴展性強、易於實現分佈式

        缺點:功能相對於SQL有限

        應用場景:分佈式文件系統或分佈式存儲

        實例:Bigtables、CassandraHBaseHypertable

   文檔模型

        數據模型:與鍵值模型類似,value指向結構化數據;

        優勢:數據格式不嚴格,無需定義事先定義結構

        缺點:查新性能不高,缺少統一查詢語法

        應用場景:web應用,

        實例:MongoDB、CouchDB

   圖式模型

        數據模型:圖結構模型

        優勢:利用圖結構相關算法提升性能,並是特殊場景應用需求

        缺點:難以實現分佈式、功能有限

        應用場景:社交網站、推薦系統、關係圖譜

        實例:Neo4J

 

NoSQL

特性

一、基於文檔數據庫系統(JSONBSON半結構化數據/)

二、保證其性能

      C++研發

      支持各類索引

      不支持事務,

      操做是在內存中進行(延遲寫操做)

三、支持擴展性

       支持複製

四、支持基於文檔的查詢

五、支持使用數據的分組集合操做

六、支持網格文件系統(GridFS)

七、支持地理位置空間索引

八、支持動態查詢,查詢的性能剖析

九、基於複製進行故障轉移,經過選舉協議選舉。自動故障轉移

適用場景

一、web網站

二、緩存

三、海量存儲

四、高可擴展性

五、應用程序編程環境中

數據庫模型

面向collection(集合)的數據庫

使用數據庫:但數據庫無需建立

每個文檔至關於一個mysql的行,多個文檔組合起來至關於一個集合,至關於mysql的集合

集合無需事先定義

基於C/S架構:服務器端mongod,客戶端mongo

 

Redis介紹

服務端默認鏈接端口號爲6379

是一個key-value存儲系統,它支持存儲的value類型不少。包括string(字符串)list(鏈表)set(集合)zset(有序集合)

支持各類不一樣方式的排序

爲保證效率,數據都是緩存在內存中,他也能夠週期性的把更新的數據寫入磁盤或者把修改操做寫入追加的記錄文件。

 

適用場合:目前全球最大的redis用戶時新浪微博

                應用程序直接訪問redis

                應用程序直接訪問redis,只有當redis訪問你失敗時才訪問mysql(redis集羣與mysql集羣數據同步)

 

redis數據庫提供縱多種靈活的數據結構和數據操做,爲不一樣的數據構建不一樣的庫

 

安裝

下載安裝包:http://redis.io/download

 wget http://download.redis.io/releases/redis-3.2.3.tar.gz

 tar xzf redis-3.2.3.tar.gz

 cd redis-3.2.3

make MALLOC=libc  && cd src &&  make install

mv redis-benchmark  redis-check-aof  redis-check-rdb redis-cli mkreleasehdr.sh redis-sentinel  redis-server  redis-trib.rb   /usr/sbin/

啓動多端口:   redis-server --port 6380 &

關閉redis:使用pkill    redis-server

命令(Strings類型)

string是最簡單的類型,string類型是二進制安全的,redisstring能夠包含任何數據。

 

redis-cli        //登陸客戶端

set   鍵   值     //設置key對應的值爲string類型的value,若鍵存在,那麼對應的值會覆蓋原有的值。

setnx   鍵   值     //設置key對應的值爲string類型的value,若鍵存在則返回0,不存在則插入。

setex  鍵  數字  值     //設置key對應的值爲string類型的value,並指定此鍵值對應的有效期(默認爲秒)

mset  鍵  值  鍵  值 ......  //批量設置多個key的值,成功返回ok,失敗返回0

msetnx  鍵  值  鍵  值 ......  //批量設置多個key的值,成功返回ok,失敗返回0.不會覆蓋已經存在的鍵值對!

get     鍵       //獲取值

getset   鍵  值  //替換key的值,並返回key的舊值

mget    鍵   鍵   鍵 ..... //批量獲取多個key的值,若對應key不存在則對應返回nil

incr   鍵 //key的值作加加操做,並返回新的值

incrby   鍵  數值   //incr相似,加指定值,key不存在會添加key,並認爲原來的value0

decr   鍵 //key的值作減減操做,並返回新的值

decrby  鍵  數值   //incr相似,減指定值,key不存在會添加key,並認爲原來的value0

append  鍵   添加的新值  //給指定key的字符串追加value,返回新字符串的長度

 

命令(hashes類型)

Redish hash 是一個syringe類型的fieldvalue的映射表。他的添加、刪除操做都是01(平均)

hash特別適合於存儲對象。相較於將對象的每個字段存成單個string類型。

將一個對象存儲在hash類型中會佔用更少的內存,而且能夠更方便的存取整個對象。

 

hset  鍵  hash表字段    對應的值    //設置一個hash表,若key不存在則先建立

hsetnx  鍵   hash表字段   值     //設置一個hash表,若key不存在則先建立,若存在返回0

hmset   鍵  hash表字段   值  hash表字段   值   //同時設置hash的多個表與值

hget   鍵  hash表字段    //獲取hash表中的值

hmget    //獲取所有指定的hash field

hexists    鍵  表字段   //測試指定表字段是否存在,存在返回1.

hlen  鍵  //返回指定hashfield數量

hdel   鍵  表字段  //刪除指定的表字段中的值

hkeys  鍵   //返回hash的全部表字段

 

命令(lists類型)

list是一個鏈表結構,主要功能是pushpop、獲取一個範圍的全部值等,操做中的key理解爲鏈表的名字。

Redis的list類型其實就是一個每一個子元素都是一個string類型的雙向鏈表。

咱們能夠經過push、pop操做從鏈表的頭部或者尾部添加刪除元素,這樣list既能夠做爲棧,又能夠做爲隊列。

 

lpush   鍵   值  //key對應的list的頭部添加字符串元素

rpush   鍵   值  //key對應的list的尾部添加字符串元素

linsert   鍵  before  舊值   新插入的值    //key對應的list的特定位置前或者後插入字符串

lrange   鍵  0 -1  //取值,從頭開始取,從尾到頭爲正方向

lset    鍵   下標 值  //設置list中指定下標的元素值,用於替換,下標:第一個單詞下標爲0,依次往下數。

lrem   鍵   N個   值   //從某個鍵中刪除N個與其餘值相同的值(N<0從尾部刪除,N=0所有刪除)

ltrim   鍵   下標   下標  //保留從下標到下標內的內容,未保留的值將所有刪除

lpop   鍵   //從表的頭部刪除元素,並返回刪除的元素

rpop   鍵   //從表的尾部刪除元素,並返回刪除的元素

rpoplpush  鍵   鍵 //把第一個鍵中的尾部的一個值彈出,給到第二個鍵中,而且是從頭部壓入。

lindex   鍵  索引(數字)  //返回名稱爲keylistindex位置的元素

 

命令(sets類型)

set是集合,它是string類型的無序集合,set是經過hash  table實現的,添加、刪除和查找的複雜度都說0(1)。對集合咱們能夠取並集、交集、差集。經過這些操做咱們能夠實現sns中的好友推薦和blogtag功能。

    例子:

        set1 (1,2)  set223

        取set1與2的並集:123

        取set1與2的交集:2

        取set1與2的差集:13

sadd   鍵  值(元素)   //向名稱爲keyset中添加元素

srem   鍵   值  //刪除名稱爲keyset中的元素

spop  鍵  //隨機彈出並刪除集合中的一個元素

srandmember   鍵/集合    //隨機返回鍵或者集合中的一個元素,但不會刪除這個元素

sdiff  鍵  鍵   //返回兩個數組中的差集,以第一個鍵中的元素爲標準

sdiffstore  存儲鍵    鍵    鍵  //返回兩個鍵中元素的差集而且保存到一個鍵中

sinter   鍵  鍵   //返回全部給定鍵的交集

sinterstore  存儲鍵    鍵    鍵  //返回兩個鍵中元素的交集而且保存到一個鍵中

sunion  鍵  鍵  //返回全部給定key的並集

sunionstore  存儲鍵   鍵  鍵  //返回全部給定key的並集,而且保存到一個鍵中

smove   鍵(移除)   (添加要剪切的元素   //從第一個集合中移除一個元素,並移動到第二個對應的集合中

smembers    //查看添加的集合

scard   鍵/集合    //查看集合中元素的個數

 

命令(sorted  sets類型)

是set的一個升級版本,他是在set的基礎上增長了一個順序屬性,這個 屬性在添加、修改元素的時候能夠指定,每次指定後,zset會自動從新按新的值調整順序。

能夠理解爲兩列的mysql表,一列存儲value(),一列存儲順序。

操做中key(鍵)理解爲zset的名字。

 

zadd  鍵   順序(數字值  //向鍵中的元素添加順序,用於排序,若元素存在,則更新其順序。

zrem   鍵   值  //刪除集合中的元素

zrank   鍵   值//返回名稱爲鍵中元素的排名,(score從小到大排序),即下標。排完序而後找索引值

zrevrank  鍵   值//返回名稱爲鍵中元素的排名,(score從大到小排序),即下標。排完序而後找索引值

zrangebyscore  鍵  數字 數字  withscores  // 先升序排序,返回score給定範圍內的數字。數字 數字:這兩個數字爲範圍

zcount  鍵   數字 數字   //返回集合中給定score在給定範圍的數量

zcard   鍵     //返回集合中全部元素的個數

zremrangebyrank   鍵   數字  數字  //刪除集合中排名在給定範圍中的元素(按索引來刪除)

zremrangebyscore   鍵   數字  數字  //刪除集合中排名在給定範圍中的元素(按順序來刪除)

zrange  鍵  0  -1   withscores //在集合中取元素。0-1爲索引,從第一個到最後一個(升序)withscores爲輸出順序號。

zrevrange  鍵  0  -1   withscores //在集合中取元素。0-1爲索引,從第一個到最後一個(降序)withscores爲輸出順序號。

 

鍵值相關命令

keys  *   //返回庫中全部的鍵,模糊匹配,my*m*y.........均可以。

exists  鍵  //確認一個鍵是否存在

del   鍵   //刪除一個鍵

expire   鍵  數字()   //對一個已存在的鍵設置過時時間

persist   鍵   //取消給鍵的過時時間

ttl   鍵  //獲取這個鍵的有效時長,直至爲-1,說明此值已通過期

randomkey  //隨機返回鍵空間值得一個鍵

move   //將當前數據庫中的鍵轉移到其餘數據庫中

select  數字   //選擇數據庫,進入客戶端時,默認進入0數據庫,一共16個數據庫。

rename   鍵名   鍵新名    //重命名鍵

type  鍵   //返回鍵的類型

 

服務器相關命令

ping   //測試鏈接是否正常

select  數字(0-15)  //選擇數據庫,Redis數據庫編號從0-15,咱們能夠選擇任意一個數據庫來進行數據存取。

dbsize    // 返回當前數據庫中key的數目

info      //獲取服務器的信息和統計

config   鍵  //實時傳輸與存儲收到的請求

flushdb   //刪除當前數據庫中全部的key

flushall   //刪除全部數據庫中的全部的鍵

相關文章
相關標籤/搜索