構建高性能數據庫緩存之Redis(一)

1、Redis概述

11 什麼是redis

Redis是一個開源的用ANSI C編寫、支持網絡、基於內存、亦可持久化的日誌型、Key-Value數據庫,根據DB-Engines.com站點月度排行的數據顯示,Reidis是最流行的鍵值對存儲數據庫,如今的開發由VMware主持。php


wKiom1ORgiOT6tamAAL9ocNaFLQ737.jpg


12 Redis支持語言與數據類型

Redis提供多種語言的API,包括:PerlPHPPythonRubyLuaCC++C#等;與Memcache相比,Redis中值(Value)的類型不只限於字符串(strings),能夠支持的類型還包括哈希表(hashes)、列表(lists)、集合(sets)和排序集(sorted sets)。並且值的類型決定了值自己支持的操做,Redis支持不一樣無序、有序的列表,無序、有序的集合間的交集、並集等高級服務器端原子操做。html


13 持久化

Redis一般將所有的數據存儲在內存中。2.4版本後可配置爲使用虛擬內存[6]一部分數據集存儲在硬盤上,但這個特性廢棄了。redis

目前經過兩種方式實現持久化shell

使用快照,一種半持久耐用模式。不時的將數據集以異步方式從內存以RDB格式寫入硬盤。數據庫

1.1版本開始使用更安全的AOF格式替代,一種只能追加的日誌類型。將數據集修改操做記錄起來。Redis可以在後臺對只可追加的記錄做修改來避免無限增加的日誌。vim

 

14同步

Redis支持主從同步,數據能夠從主服務器任意數量的從服務器上同步,從服務器能夠是關聯其餘從服務器的主服務器,這使得Redis能夠執行單層樹複製。從盤能夠有意無心的對數據進行寫操做,使得從數據庫在任何地方同步樹時,能夠訂閱一個頻道並接收主服務器完整的消息發佈記錄;同步對讀取操做的可擴展性和數據冗餘何有幫助。至今使用Redis的公司包括百度、新浪、搜狐、TencentDisqusDiscourse、暴雪娛樂、TweetDeckGitHUBTwitter等;安全

 

參考文獻:bash

http://zh.wikipedia.org/zh/Redis服務器

http://baike.baidu.com/view/4595959.htm?fr=aladdin網絡

http://redis.cn/topics/introduction.html


2、安裝Redis

21 下載、編譯與安裝

Redis官網下載地址:http://download.redis.io/releases/redis-2.8.9.tar.gz

 

##代碼段

[root@redis_mastersource]# cd /home/source/

[root@redis_mastersource]# wget http://download.redis.io/releases/redis-2.8.9.tar.gz

[root@redis_mastersource]# tar -xf redis-2.8.9.tar.gz

[root@redis_masterredis-2.8.9]# cd redis-2.8.9

[root@redis_masterredis-2.8.9]# make

[root@redis_masterredis-2.8.9]# make install

22 配置與運行Redis

#代碼段

[root@redis_masterredis-2.8.9]# mkdir /etc/redis

[root@redis_masterredis-2.8.9]# cp redis.conf /etc/redis/

[root@redis_master~]# vim /etc/redis/redis.conf

##提示:指定存放redis日誌的文件,默認發送至/dev/null文件中;

logfile"/var/log/redis/redis.log"

[root@redis_master~]# mkdir /var/log/redis/

[root@redis_master~]# redis-server /etc/redis/redis.conf &

 

221 檢測運行結果

#代碼段

[root@redis_master~]# netstat -lntp | grep redis

tcp        0     0 0.0.0.0:6379               0.0.0.0:*   LISTEN      40299/redis-server 

tcp        0     0 :::6379                     :::*       LISTEN      40299/redis-server 


3、測試

31 Redis客戶端鏈接模式

[root@redis_master~]# redis-cli set mykey 'hello world!'            #設置一個keyvalue

OK

[root@redis_master~]# redis-cli get mykey                           #獲取key上的value

"helloworld!"

[root@redis_master~]# redis-cli type mykey       #獲取key的類型,顯示結果爲字符串(string

String

[root@redis_master~]# redis-cli strlen mykey     #獲取key的長度,其中空格也佔用一個字符;

(integer) 12

 

##提示:能夠經過SHELL腳本操縱Redis數據庫;

32 telnet 客戶端鏈接模式

[root@redis_master~]# telnet 127.0.0.1 6379

Trying 127.0.0.1...

Connected to127.0.0.1.

Escape characteris '^]'.

set test"welcome to bei jing"

+OK

get test

$19

welcome to beijing

strlen test

:19

quit

+OK

Connection closedby foreign host.

33 附加shell測試腳本

[root@redis_master~]# cat test_redis.sh

#!/bin/sh
#descrition: testredis database 
#author: cfwl,crate date of 2014-06-06 
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
 
#operation redisdatabase
printf"\033[32mPlease Input One \'Key\' and \'Value\':\033[0m " key value
read key value
 
#create key 
redis-cli SET $key$value
printf"\n"
 
#To obtain key
redis-cli GET $key
printf"\n"
 
#Judge key to datatype
redis-cli TYPE$key
printf"\n"
 
#Delete key
printf"\033[33mYour Miss Delete The key? \(y|n\):\033[0m  "
read str
while [[ $str !="y" ]]
        do
                printf "\033[33mYour MissDelete The key? \(y|n\):\033[0m  "
                read str
                [ $str = 'y' ] &&redis-cli DEL $key $value && printf "\n"
        done
 
#Judge key ifexists
redis-cli EXISTS$key



34 測試結果wKiom1ORg33hPV0OAAD5d5s5x68967.jpg


4、相關參數詳解

SET                      建立一個key

GET                      獲取一個key的值;

DEL                      ***一個key

TYPE                     獲取一個key的類型;

EXISTS                   判斷一個key是否存在,0:存在,1,不存在;

KEYS                         獲取給定模糊匹配的key

EXPIRE                       設置一個key過時的秒數;

PERSTST                      ***一個key過時的秒數;

PEXPIRE                      設置一個key過時的毫秒數;

RENAME                   將一個key重命名;

RENAMENX                 將一個key重命名,且新的key必須是不存在的能夠;

TTL                      獲取key的有效時間;

相關文章
相關標籤/搜索