Redis(一)

Redis的優(yōu)勢

存儲(chǔ)優(yōu)勢

1. 字符類型(string)

2. 散列類型(hash)

3. 列表類型(list)

4. 集合類型(set)

5. 有序集合(zset)

image-20191227092350030.png

功能

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
59972587.jpg

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):

  1. redis不支持自定義數(shù)據(jù)庫名詞
  2. 每個(gè)數(shù)據(jù)庫不能單獨(dú)設(shè)置授權(quán)
  3. 每個(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"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • NOSQL類型簡介鍵值對:會(huì)使用到一個(gè)哈希表,表中有一個(gè)特定的鍵和一個(gè)指針指向特定的數(shù)據(jù),如redis,volde...
    MicoCube閱讀 4,160評(píng)論 2 27
  • 一、Redis高可用概述 在介紹Redis高可用之前,先說明一下在Redis的語境中高可用的含義。 我們知道,在w...
    空語閱讀 1,681評(píng)論 0 2
  • 企業(yè)級(jí)redis集群架構(gòu)的特點(diǎn) 海量數(shù)據(jù) 高并發(fā) 高可用 要達(dá)到高可用,持久化是不可減少的,持久化主要是做災(zāi)難恢復(fù)...
    lucode閱讀 2,283評(píng)論 0 7
  • 關(guān)于Redis的一些分享NoSQL 3v+3高 3v: volume海量 variety多樣 velocity實(shí)...
    Mason啊閱讀 402評(píng)論 0 2
  • 摘自http://xiaoh.me/2016/06/30/redis-advanced/ 排序 redis支持對l...
    鴕鳥要抬頭閱讀 66,823評(píng)論 1 3

友情鏈接更多精彩內(nèi)容