Redis的優(yōu)勢
存儲(chǔ)優(yōu)勢
1. 字符類型(string)
2. 散列類型(hash)
3. 列表類型(list)
4. 集合類型(set)
5. 有序集合(zset)

功能
1. 可以為每個(gè)key設(shè)置超時(shí)時(shí)間;
2. 可以通過列表類型來實(shí)現(xiàn)分布式隊(duì)列的操作
3. 支持發(fā)布訂閱的消息模式
簡單
1. 提供了很多命令與redis進(jìn)行交互
Redis的應(yīng)用場景
1. 數(shù)據(jù)緩存(商品數(shù)據(jù)、新聞、熱點(diǎn)數(shù)據(jù))
2. 單點(diǎn)登錄
3. 秒殺、搶購
4. 網(wǎng)站訪問排名
5. 應(yīng)用的模塊開發(fā)
Redis安裝
1 先到Redis官網(wǎng)(redis.io)下載redis安裝包
本人使用的tar http://download.redis.io/releases/redis-3.2.11.tar.gz
2 解壓安裝包
tar -zxvf redis-3.2.11.tar.gz
3 編譯源程序
編譯 redis 報(bào)錯(cuò) error: jemalloc/jemalloc.h: No such file or directory,使用如下命令
yum -y install gcc gcc-c++ libstdc++-devel
make MALLOC=libc
cd redis-3.2.11
make
cd src
make install PREFIX=/usr/local/redis
4 將配置文件移動(dòng)到redis目錄
cp /usr/local/redis-3.2.11/redis.conf /usr/local/redis
5 啟動(dòng)redis 服務(wù)
cd /usr/local/redis/bin
./redis-server ../redis.conf
6 默認(rèn)情況,Redis不是在后臺(tái)運(yùn)行,我們需要把redis放在后臺(tái)運(yùn)行
vim /usr/local/redis/redis.conf
#將daemonize的值改為yes

7 客戶端連接
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379
8 停止redis實(shí)例
/usr/local/redis/bin/redis-cli shutdown 或者kill -9 pid
9 讓redis開機(jī)自啟
vim /etc/rc.local
#加入
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis-conf
10 /usr/local/redis/bin目錄下的文件作用
redis-benchmark:redis性能測試工具
redis-check-aof:檢查aof日志的工具
redis-check-dump:檢查rdb日志的工具
redis-cli:連接用的客戶端
redis-server:redis服務(wù)進(jìn)程
Redis的配置
daemonize:如需要在后臺(tái)運(yùn)行,把該項(xiàng)的值改為yes
pdifile:把pid文件放在/var/run/redis.pid,可以配置到其他地址
bind:指定redis只接收來自該IP的請求,如果不設(shè)置,那么將處理所有請求,在生產(chǎn)環(huán)節(jié)中最好設(shè)置該項(xiàng)
port:監(jiān)聽端口,默認(rèn)為6379
timeout:設(shè)置客戶端連接時(shí)的超時(shí)時(shí)間,單位為秒
loglevel:等級(jí)分為4級(jí),debug,revbose,notice和warning。生產(chǎn)環(huán)境下一般開啟notice
logfile:配置log文件地址,默認(rèn)使用標(biāo)準(zhǔn)輸出,即打印在命令行終端的端口上
database:設(shè)置數(shù)據(jù)庫的個(gè)數(shù),默認(rèn)使用的數(shù)據(jù)庫是0
save:設(shè)置redis進(jìn)行數(shù)據(jù)庫鏡像的頻率
rdbcompression:在進(jìn)行鏡像備份時(shí),是否進(jìn)行壓縮
dbfilename:鏡像備份文件的文件名
dir:數(shù)據(jù)庫鏡像備份的文件放置的路徑
slaveof:設(shè)置該數(shù)據(jù)庫為其他數(shù)據(jù)庫的從數(shù)據(jù)庫
masterauth:當(dāng)主數(shù)據(jù)庫連接需要密碼驗(yàn)證時(shí),在這里設(shè)定
requirepass:設(shè)置客戶端連接后進(jìn)行任何其他指定前需要使用的密碼
maxclients:限制同時(shí)連接的客戶端數(shù)量
maxmemory:設(shè)置redis能夠使用的最大內(nèi)存
appendonly:開啟appendonly模式后,redis會(huì)把每一次所接收到的寫操作都追加到appendonly.aof文件中,當(dāng)redis重新啟動(dòng)時(shí),會(huì)從該文件恢復(fù)出之前的狀態(tài)
appendfsync:設(shè)置appendonly.aof文件進(jìn)行同步的頻率
vm_enabled:是否開啟虛擬內(nèi)存支持
vm_swap_file:設(shè)置虛擬內(nèi)存的交換文件的路徑
vm_max_momery:設(shè)置開啟虛擬內(nèi)存后,redis將使用的最大物理內(nèi)存的大小,默認(rèn)為0
vm_page_size:設(shè)置虛擬內(nèi)存頁的大小
vm_pages:設(shè)置交換文件的總的page數(shù)量
vm_max_thrrads:設(shè)置vm IO同時(shí)使用的線程數(shù)量
多數(shù)據(jù)的支持
默認(rèn)支持16個(gè)數(shù)據(jù)庫;可以理解為一個(gè)命名空間
與關(guān)系型數(shù)據(jù)庫不一樣的點(diǎn):
- redis不支持自定義數(shù)據(jù)庫名詞
- 每個(gè)數(shù)據(jù)庫不能單獨(dú)設(shè)置授權(quán)
- 每個(gè)數(shù)據(jù)庫之間并不是完全隔離??梢酝ㄟ^flushall命令情況redis實(shí)例面的所有數(shù)據(jù)庫中的數(shù)據(jù)
通過select dbid 去選擇不同的數(shù)據(jù)庫命名空間。dbid的取值范圍默認(rèn)是0-15
使用入門
1. 獲得一個(gè)符合匹配規(guī)則的鍵名列表
keys pattern [?/* /[]]
keys ip:black
2. 判斷一個(gè)鍵是否存在,Exists key
3. type key去獲得這個(gè)key的數(shù)據(jù)結(jié)構(gòu)類型
各種數(shù)據(jù)結(jié)構(gòu)的使用
字符類型
一個(gè)字符類型的key默認(rèn)存儲(chǔ)的最大容量是512M
賦值和取值
set key value
get key
遞增數(shù)字
incr key
key的設(shè)計(jì)
對象類型:對象id:對象屬性:對象子屬性
建議對key進(jìn)行分類,同步在wiki統(tǒng)一管理
短信重發(fā)機(jī)制: sms:limit:mobile 13888888888 expire
incrby key increment 遞增指定的整數(shù)
decr key 原子遞減
append key value 向指定的key追加字符串
strlen key 獲得key對應(yīng)的value的長度
mget key key.. 同時(shí)獲得多個(gè)key的value
mset key value key value ... 同時(shí)設(shè)置多個(gè)key
setnx key value 設(shè)置key,如果存在返回0 不存在設(shè)置值 多用來分布式鎖
列表類型
可以存儲(chǔ)一個(gè)有序的字符串列表
LPUSH/RPUSH:從左邊或者右邊push數(shù)據(jù)
LPUSH/RPUSH key value value ...
llen key 獲得列表的長度
lrange key start stop 索引可以是負(fù)數(shù),-1表示最右邊的第一個(gè)元素
lrem key count value 被移除元素的數(shù)量。 列表不存在時(shí)返回 0
lset key index value 通過索引來設(shè)置元素的值
lpop/rpop 從左邊或者右邊取數(shù)據(jù)
散列類型
hash key value 不支持?jǐn)?shù)據(jù)類型的嵌套
比較適合存儲(chǔ)對象
person
age 18
sex male
name zhangsan
hset key field value 設(shè)置key的屬性值
hget key field value 獲得key的屬性值
hmset key field value [field value ...] 一次性設(shè)置多個(gè)值
> hmset person age 18 sex male name zhangsan
hmget key field field ... 一次性獲取多個(gè)值
> hmget person age sex name
hexists key field 判斷字段是否存在.存在返回1 不存在返回0
hincrby key increment 遞增指定的整數(shù)
hsetnx
hdel key field [field ...] 刪除一個(gè)或多個(gè)字段
集合類型
集合類型不允許存在重復(fù)的數(shù)據(jù),而且無序.
sadd key member [member...] 增加數(shù)據(jù);如果value已經(jīng)存在,則會(huì)忽略存在的值,否則返回成功加入的元素的數(shù)量
srem key member 刪除元素
smemebers key 獲取所有的數(shù)據(jù)
sdiff 對多個(gè)集合執(zhí)行差集運(yùn)算
> sadd s1 1 2 3
> sadd s2 1 2 3 4 5
> sdiff s2 s1
"4"
"5"
sunion 對多個(gè)集合執(zhí)行并集操作,同時(shí)存在兩個(gè)集合里面的所有值
>sunion s1 s2
"1"
"2"
"3"
"4"
"5"
有序集合
zadd key [NX|XX] [CH] [INCR] score member [score member ...]
添加指定的成員指定的分?jǐn)?shù)存放在鍵的有序集合
> zadd student 50 zhangsan
> zadd student 60 lisi
> zadd student 70 wangwu
zrange key start stop [WITHSCORES] 去獲得元素。 withscores是可以獲得元素的分?jǐn)?shù)
如果兩個(gè)元素的score是相同的話,那么根據(jù)(0<9<A<Z<a<z) 方式從小到大
> zrange student 0 3 withscores
"zhangsan"
"50"
"lisi"
"60"
"wangwu"
"70"
Redis事務(wù)處理
multi 開啟事務(wù)
exec 執(zhí)行事務(wù)
> multi
> set name zhangsan
> set age 18
> exec
> get name
"zhangsan"
過期時(shí)間
expire key seconds 設(shè)置key的過期時(shí)間
ttl 獲取key的過期時(shí)間
發(fā)布訂閱
publish channel message
subscribe channel [...]
> publish queue1 test1
> subscribe queue1
"test1"