第一章 簡(jiǎn)介
Redis是一個(gè)開源高性能鍵值數(shù)據(jù)庫。它通過提供多種鍵值數(shù)據(jù)類型類適應(yīng)不同場(chǎng)景下的存儲(chǔ)需求,并借助許多高層及的接口使其可以勝任如緩存,隊(duì)列系統(tǒng)等不同的角色。
1.1 存儲(chǔ)結(jié)構(gòu)
使用鍵值存儲(chǔ) ,key = value 。key 為鍵名, value是鍵值
支持的物種數(shù)據(jù)類型如下:
? 字符串類型
? 散列類型
? 列表類型
? 集合類型
? 有序集合類型
1.2 內(nèi)存存儲(chǔ)和持久化
Redis 數(shù)據(jù)庫的所有數(shù)據(jù)都存儲(chǔ)在內(nèi)存中。由于內(nèi)存的讀寫速度遠(yuǎn)高于硬盤,因此Redis在性能對(duì)比其他的基于硬盤存儲(chǔ)的數(shù)據(jù)庫有巨大優(yōu)勢(shì),Redis 可以在一秒內(nèi)讀寫超過十萬個(gè)鍵值。
將數(shù)據(jù)存放在內(nèi)存中也有問題,例如,程序退出后數(shù)據(jù)容易丟失。不過redis 對(duì)持久化做了處理,可以將數(shù)據(jù)存放到硬盤中。
1.3 Redis與memcached 的區(qū)別
2 網(wǎng)絡(luò)Io模型
Memcached 是多線程,非阻塞復(fù)用的網(wǎng)絡(luò)模型。Redis是單線程的IO復(fù)用模型,可以將速度優(yōu)勢(shì)發(fā)揮到最大,如果吞吐量過大,容易阻塞。
2 內(nèi)存管理
Memcached 采用預(yù)分配池的方式,Redis采用現(xiàn)場(chǎng)分配申請(qǐng)內(nèi)存的方式。
2 存儲(chǔ)方式
Memcached 基本只支持簡(jiǎn)單的key-value 存儲(chǔ),redis 出來支持key/value 外還支 list,set, sorted ,set , hash .
第二章 安裝
Redis 約定,次版本號(hào)為偶數(shù)的為穩(wěn)定版,為奇數(shù)的為不穩(wěn)定版。
2.1 Linux 安裝
安裝linux 系統(tǒng)過程略過,直奔主題,安裝Redis數(shù)據(jù)庫
2 下載軟件包
第一種:官網(wǎng)下載已經(jīng)編譯好的源碼包,官網(wǎng)地址redis.io
第二種:使用wget命令
Wget ?http://download.redis.io/redis-stable.tar.gz
2 tar -xvzf redis-stable.tar.gz
2 cd redis-stable
2 make
2 make install
Redis 沒有其他的外部依賴 ,安裝過程比較的簡(jiǎn)單,執(zhí)行make install 是為了將可執(zhí)行程序復(fù)制到/usr/local/bin 目錄下,以便于以后不用到安裝目錄就可以執(zhí)行程序。make test 命令請(qǐng)選擇性執(zhí)行。
2.2 Windows 安裝
聽說有windows版本但沒有用過
2.3 啟動(dòng)停止Redis
最常用的兩個(gè)程序:redis-server 和 redis-cli .
redis-server : 服務(wù)器, redis-cli 命令行客戶端
2.3.1 啟動(dòng)redis
啟動(dòng)redis 有兩種方式:直接啟動(dòng)和初始化腳本啟動(dòng)。 分別使用與開發(fā)環(huán)境和生產(chǎn)環(huán)境中。
2 直接啟動(dòng)
直接運(yùn)行redis-server 即可,redis 默認(rèn)的接口為6379 .
指定端口啟動(dòng),redis-server --port 6380 ?指定6380 為redis 接口
2 初始化腳本啟動(dòng)
在redis源代碼目錄下,有一個(gè)Utils文件夾,下面有一個(gè)名為redis_init_script 的 初始化腳本文件。使用初始化腳本文件啟動(dòng)步驟:
? 將該文件拷貝到/etc/init.d 目錄下,可以修改文件名,可以不修改,修改文件名是為了更好的辨別redis 的啟動(dòng)接口。
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"
? 建立需要的文件
/etc/redis 存放redis 配置文件 ? ?路徑可以修改,但要與上面的路徑統(tǒng)一
/var/redis/端口號(hào) 存放持久化文件
? 修改配置文件
在源碼安裝目錄有一個(gè)名為redis.conf 的文件,這個(gè)便是配置文件,修改下面幾項(xiàng):
daemoniz ? ?yes ? ? 一守護(hù)進(jìn)程的方式運(yùn)行
pidfile /var/run/redis_端口號(hào).pid ? ? 設(shè)置文件PID 位置
port ? ? ? ?端口號(hào) 設(shè)置redis 的監(jiān)聽端口
dir ? ? ? ? ?/var/redis/端口號(hào) ? ? ?設(shè)置持久化文件存放的位置
執(zhí)行完上面的命令之后,可以使用 /etc/init.d/redis_端口號(hào) start ?來啟動(dòng)Redis 了 ,而后需要執(zhí)行下面命令,是Redis 跟隨系統(tǒng)啟動(dòng)
sudo update-rc.d redis_端口號(hào) ? defaults
2.3.2 停止Redis
強(qiáng)制終止redis 進(jìn)程有可能會(huì)導(dǎo)致數(shù)據(jù)丟失。正確的停止Redis的方法是 發(fā)送shutdown 命令,語法格式:Redis-cli ? shutdown ?;蛘呤褂胟ill 命令 ,殺死進(jìn)程pid的方式也可以
redis-cli -h 127.0.0.1 -p 6379 ?指定redis 主機(jī) 和監(jiān)聽端口
redis-cli ping ? ? ? ? ? ? ? 測(cè)試客戶端與redis的鏈接是否正常,正常收到pong
第三章 數(shù)據(jù)類型
Redis 支持5種數(shù)據(jù)類型,說明如下:
3.1字符串
Redis 字符串是一個(gè)字節(jié)序列。在 Redis 中字符串是二進(jìn)制安全的,這意味著它們沒有任何特殊終端字符來確定長度,所以可以存儲(chǔ)任何長度為 512 兆的字符串。
示例
redis 127.0.0.1:6379> SET name "yi"
OK
redis 127.0.0.1:6379> GET name
"yi"
在上面的例子中,SET 和 GET 是 Redis 命令,name 和 "yiibai" 是存儲(chǔ)在 Redis 的鍵和字符串值。
3.2哈希
Redis哈希是鍵值對(duì)的集合。 Redis哈希是字符串字段和字符串值之間的映射,所以它們用來表示對(duì)象。
示例
redis 127.0.0.1:6379> HMSET user:1 username yiibai password yiibai points 200
OK
redis 127.0.0.1:6379> HGETALL user:1
1) "username"
2) "yi"
3) "password"
4) "yi"
5) "points"
6) "200"
在上面的例子中,哈希數(shù)據(jù)類型用于存儲(chǔ)包含用戶基本信息的用戶對(duì)象。這里 HSET,HEXTALL 是 Redis 命令同時(shí) user:1 也是一個(gè)鍵。
3.3列表
Redis 列表是簡(jiǎn)單的字符串列表,通過插入順序排序??梢蕴砑右粋€(gè)元素到 Redis 列表的頭部或尾部。
示例
redis 127.0.0.1:6379> lpush tutoriallist redis
(integer) 1
redis 127.0.0.1:6379> lpush tutoriallist mongodb
(integer) 2
redis 127.0.0.1:6379> lpush tutoriallist rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange tutoriallist 0 10
1) "rabitmq"
2) "mongodb"
3) "redis"
列表的最大長度為 ?232 - 1 個(gè)元素(4294967295,每個(gè)列表的元素超過四十億)。
3.4集合
Redis 集合是字符串的無序集合。在 Redis 可以添加,刪除和測(cè)試成員存在的時(shí)間復(fù)雜度為 O(1)。
示例
redis 127.0.0.1:6379> sadd tutoriallist redis
(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist mongodb
(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist rabitmq
(integer) 1
redis 127.0.0.1:6379> sadd tutoriallist rabitmq
(integer) 0
redis 127.0.0.1:6379> smembers tutoriallist
1) "rabitmq"
2) "mongodb"
3) "redis"
注:在上面的例子中 rabitmq 被添加兩次,但由于它是只集合具有唯一特性。集合中的成員最大數(shù)量為 232 - 1(4294967295,每個(gè)集合有超過四十億條記錄)。
3.5集合排序
不同的是,一個(gè)有序集合的每個(gè)成員都可以排序,就是為了按有序集合排序獲取它們,按權(quán)重分值從最小到最大排序。雖然成員都是獨(dú)一無二的,按權(quán)重分?jǐn)?shù)值可能會(huì)重復(fù)。
示例
redis 127.0.0.1:6379> zadd tutoriallist 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd tutoriallist 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE tutoriallist 0 1000
1) "redis"
2) "mongodb"
3) "rabitmq"
第四章 Redis Java
詳細(xì)信息可以查看這篇文章:http://www.cnblogs.com/edisonfeng/p/3571870.html
參考:http://www.yiibai.com/redis/
---------------------------------------------------
少年聽雨歌樓上,紅燭昏羅帳。
壯年聽雨客舟中,江闊云低,斷雁叫西風(fēng)。
感謝支持!
---起個(gè)名忒難
--------------------------------------------------------