Redis(2015.08.03筆記一)

1、redis簡介

 

Redis是一種面向"鍵/值"對數據類型的內存數據庫,能夠知足咱們對海量數據的讀寫需求。php

redis的鍵只能是字符串 html

redis的值支持多種數據類型:redis

        1:字符串 string算法

        2:哈希 hashshell

        3:字符串列表 list數據庫

        4:字符串集合 set 不重複(只用於string),無序數組

        5:有序集合sorted set ,不重複,有序併發

        6:HyperLogLog 結構(redis2.8.9版本纔有,用來作基數統計的算法。)app

特色:負載均衡

高性能(Redis讀的速度是11W次/s,寫的速度是8.1W次/s)

原子性(保證數據的準確性,原子操做,)

持久存儲(兩種方式RDB/快照,AOF/日誌)

主從結構(master-slave,負載均衡,高可用)

集羣(3.0版本)

 

 

應用:應用在高併發和實時請求的場景。

新浪微博

hash:關注列表,粉絲列表

string:微博數,粉絲數(避免使用select count(*) from...)

sorted set:TopN,熱門微博

 

 

redis使用的是c語言實驗的

 

2、環境搭建

首先安裝c的編譯環境

yum -y install cpp

yum -y install binutils

yum -y install glibc

yum -y install glibc-kernheaders

yum -y install glibc-common

yum -y install glibc-devel

yum -y install gcc

yum -y install make

若是上面的軟件都安裝以後再執行make命令還報錯,就須要在make命令後面加個選項了

make MALLOC=libc

http://www.phperz.com/article/14/1219/42002.html

 

 

 

 

 

 

 

 

 

 

 

 

redis安裝部署(單機)

redis官網:http://redis.io/(中文www.redis.cn)

解壓:tar -zxvf redis-2.8.19.tar.gz

編譯、安裝

make

make install(將redis-3.0.0/src目錄下面的可執行文件拷貝到/usr/local/bin目錄下面,做用是在其餘目錄下執行腳本不須要指定絕對路徑或者須要切換到路徑才能執行腳本,至關於添加環境變量(將src配置到PATH))

 

加壓縮後,執行make命令編譯redis

make install

 

拷貝配置文件

cp redis/redis.conf /etc/

修改配置文件redis.conf

daemonize yes(後臺運行)

logfile /usr/local/redis/log(後臺啓動的日誌文件存放路徑)

 

啓動

redis-server /etc/redis.conf [--port 6379]

redis客戶端(client,鏈接到本地的數據庫)

redis-cli [-h 127.0.0.1] [-p 6379]

-h(鏈接的是哪個數據庫)-p(是端口號)

關閉

redis-cli shutdown

 

 

 

 

 

 

其餘路徑均可以調用bin目錄下的shell腳本,

目錄下面

(啓動)redis-server

 

 

 

 

daemonize yes(後臺運行)

logfile /usr/local/redis/log(日誌文件)

 

 

 

 

 

 

 

查進程ps –ef|grep redis

 

中止

中止後須要從新啓動才能進入

 

 

3、redis的特性【多數據庫】

多數據庫

每一個數據庫對外都是以一個從0開始的遞增數字命名,不支持自定義的    

redis默認支持16個數據庫,能夠經過修改databases參數來修改這個默認值

redis默認選擇的是0號數據庫

SELECT 數字: 能夠切換數據庫

多個數據庫之間並非徹底隔離的,flushall

 

 

 

0-15,修改配置文件(修改數值)

 

 

數據庫之間是相互隔離的

清空全部的數據庫(停掉這個命令)

 

4、redis基礎命令

得到符合規則的鍵名稱

keys 表達式(?,* ,[],\?)

判斷一個鍵是否存在

exists key

刪除鍵

del key

del key1 key2

批量刪除

redis-cli del `redis-cli keys "key*"`

得到鍵值的數據類型type

返回值多是這五種類型(string,hash,list,set,zset)

注意:redis不區分命令大小寫

 

 

 

keys *(查詢全部的鍵,*是通配符)

keys crxy*

 

key crxy?

\?(轉義字符查詢問號)

查詢鍵是否存在exists crxy

 

 

 

刪除鍵

(integer(整數),返回值是2,說明成功刪除2個)

 

在外面執行key *操做

 

在外面批量刪除知足某些條件的鍵,反引號執行命令並獲取返回值,至關於先執行redis-cli,進入後再執行刪除

 

將命令傳給腳本執行

獲取鍵的類型

 

 

redis的help命令

"help @<group>" to get a list of commands in <group>

 

"help <command>" for help on <command>

 

"help <tab>" to get a list of possible help topics

 

"quit" to exit

 

 

 

列出的命令都是能夠操做string類型的

 

按tab補全命令(小技巧)

 

 

5、redis數據類型之string

字符串類型是redis中最基本的數據類型,它能存儲任何形式的內容,包含二進制數據,甚至是一張圖片(二進制內容)。一個字符串類型的值存儲的最大容量是1GB

命令

set/get(setnx)

mset/mget

incr/decr/incrby/decrby/incrbyfloat

append(string鍵,假如儲存的是2.1,能夠認爲這是個字符串,它能夠轉換爲integer或者float類型)

strlen(查看值的長度)

可到官網查看

 

命令

set/get(setnx)

mset/mget(設置多個鍵值/查看多個鍵值)

 

setnx會判斷是否處在(set直接賦值,不會判斷值是否存在)

 

 

incr(每次遞增長1,前提是值是數字類型,若不是則會報錯)

 

 

遞減刪除1(decr)

 

每次遞增長几incrby

 

能夠是小數和負數

 

拼接append,獲取字符串長度(strlen)

 

6表示字符串的長度

 

 

6、redis數據類型之hash

hash類型的存儲了字段和字段值的映射,字段值只能是字符串,不支持其餘數據類型。hash類型的鍵至多能夠存儲2^32-1個字段。

hash類型適合存儲對象:如圖:1-1和1-2

redis能夠爲任何鍵增減字段而不影響其餘

命令

hset/hget/hmset/hmget/hgetall(hsetnx)

hexists,判斷鍵中的屬性是否存在

hincrby(hash類型沒有hincr命令)

hdel

hkeys/hvals

hlen(獲取鍵中包含多少個字段)

 

 

 

 

key=value

(鍵=值)

 

hset(儲存)user:100(這是個有意義鍵名,用戶:用戶ID,方便之後查找),hget(查詢)

 

hmset(同時設置多個屬性),hmget(同時查詢多個屬性)Gender0、1性別是男或女

hsetnx(若是有就建立,不然不建立)

 

遞增操做

hincrby

 

(hdel)刪除某個字段

hget(查詢鍵值)

 

 

 

exists user:100(通用查詢鍵是否存在)

 

7、redis數據類型之list

list是一個有序的字符串列表,列表內部實現是使用雙向鏈表(linked list)實現的。

list還能夠做爲隊列使用(後面講)

一個列表類型的鍵最多能容納2^32-1個元素。

命令

lpush/rpush/lpop/rpop

llen/lrange(-1表示最後一個元素的位置,-2倒數第二個元素)

lrem(lrem key count value)count分爲三種狀況

count > 0 : 從表頭開始向表尾搜索,移除與 value 相等的元素,數量爲 count 。

count < 0 : 從表尾開始向表頭搜索,移除與 value 相等的元素,數量爲 count 的絕對值。

count = 0 : 移除表中全部與 value 相等的值。

lindex(查詢指定角標數據)

lset(修改指定角標的元素)

ltrim(截取)

linsert before|after(向指定元素先後插入元素)

rpoplpush:將元素從一個列表轉到另外一個列表

 

 

Lpush是左側插入,rpush是從列表右側插入數據

 

lpop(從列表左側彈出元素,彈出後就是刪除列表中的元素),rpop(從列表右側彈出元素)

 

負數就是獲取最後一個元素的角標(當沒法獲知list裏面有多少個元素時,-1當成最後一個元素的角標)

 

llen list是獲取列表元素的長度

 

 

lrem list 2 a(正數,從列表的左側開始查找,將正數個元素刪掉,負數就是從右側查找,刪除絕對值個元素)

lrem list -1 a右側

lrem list 0 a(若是是0就會刪除全部元素)

 

lset修改指定角標的值

ltrim截取

插入

 

 

8、redis數據類型之set

set集合中的元素都是不重複的,無序的,一個集合類型鍵能夠存儲至多 2^23-1(long類型的最大值)個元素

set集合類型和list列表類型的類似之處,如圖:2-1所示

命令

sadd/smembers/srem/sismember

sdiff/sinter(交集)/sunion(並集)

sdiffstore/sinterstore/sunionstore

scard(獲取集合長度)/spop(隨機從集合中取出並刪除一個元素)

srandmember key [count]

若是 count 爲正數,且小於集合基數,那麼命令返回一個包含 count 個元素的數組,數組中的元素各不相同。若是 count 大於等於集合基數,那麼返回整個集合。

若是 count 爲負數,那麼命令返回一個數組,數組中的元素可能會重複出現屢次,而數組的長度爲 count 的絕對值。

 

sadd set a(隨機插入a元素到set名稱的集合)smembers set(獲取集合裏面的全部的元素,元素是無序的)

Srem set a b(刪除集合裏面的某些元素)(判斷集合是否存在某個元素,返回值1/0(存在/不存在))

 

sdiff set set1(求集合set有的元素而集合set1卻沒有的元素,集合順序互換改變求值也會互換)

 

sinter(求交集,集合順序不影響)

並集

sunionstore aaa set set1 (將set和set1 並集儲存在aaa)

 

 

 

srandmember set1 2(從集合中隨機返回2個元素,2是正數,返回值小於等於集合元素數量,元素值不重複)

 

負數取的元素可能重複

相關文章
相關標籤/搜索