一、Redis安裝與配置
1.安裝
- 安裝包解壓縮
tar -xvf redis-5.0.7.tar
- 打開redis文件夾
cd redis-5.0.7
- 安裝gcc-c++依賴
yum install gcc-c++
- 編譯
make
- 安裝
make install
2.配置
- 進(jìn)入redis-5.0.7的utils包
cd utils
- 拷貝redis_init_script到/etc/init.d/
redis_init_script:redis的啟動(dòng)文件
cp redis_init_script /etc/init.d/
3、返回redis-5.0.7文件
cd root/user/home/software/redis-5.0.7
- 在/usr/local/在創(chuàng)建redis文件夾
redis.conf:redis的核心配置文件
mkdir /usr/local/redis -p
- 把redis.conf文件拷貝到/usr/local/redis文件夾下
cp redis.conf /usr/local/redis
- 進(jìn)入/usr/local/redis文件夾下
cd /usr/local/redis
- 編輯redis.conf文件
vim redis.conf
- 修改daemonize的值為:yes。表示設(shè)置redis后臺(tái)運(yùn)行。
- 修改dir的值為:/usr/local/redis/working。表示設(shè)置一個(gè)redis的工作空間。
- 修改bind的值為:0.0.0.0。表示設(shè)置外部的應(yīng)用可以遠(yuǎn)程訪問。
- 設(shè)置requirepass的值為:allens。表示設(shè)置一個(gè)訪問redis的密碼,一定要進(jìn)行設(shè)置,否則會(huì)給redis留下安全隱患。
- 回到/etc/init.d/文件夾下
cd /etc/init.d/
- 編輯redis_init_script文件
vim redis_init_script
- 修改CONF的值為/usr/local/redis/redis.conf。表示設(shè)置redis啟動(dòng)的核心配置文件的路徑。
- 給redis_init_script腳本設(shè)置權(quán)限
chmod 777 redis_init_script
- 啟動(dòng)redis
./redis_init_script start
- 查看redis的進(jìn)程
ps -ef | grep redis
- 設(shè)置redis的開機(jī)自啟動(dòng)
- 編輯redis_init_script文件,添加以下兩句話
#chkconfig: 22345 10 90
#description: Start and Stop redis
- 將redis_init_script文件注入到開機(jī)自啟動(dòng)服務(wù)中
chkconfig redis_init_script on
3. redis-cli的使用
- 在終端輸入redis-cli進(jìn)入
redis-cli
- 輸入redis的密碼。
注意:如果不輸入密碼就進(jìn)行操作會(huì)報(bào)“NOAUTH Authentication required.”
auth password
- 使用
crtl+c退出redis-cli。
另外還可以使用redis-cli ping驗(yàn)證redis服務(wù)是否還存活:
redis-cli -a password ping
如果返回了一個(gè)PONG,表示服務(wù)存活。
4. redis的關(guān)閉
- 進(jìn)入到/etc/init.d/文件夾下
cd /etc/init.d/
- 執(zhí)行redis_init_script腳本中的
stop指令
./redis_init_script stop
注意:如果此時(shí)報(bào)錯(cuò):NOAUTH Authentication required.。說明redis_init_script腳本中的stop指令下沒有設(shè)置redis的密碼,設(shè)置方式如下:
<!-- 在redis_init_script的以下這行代碼中加入:-a password。(password為:redis的密碼) -->
$CLIEXEC -a password -p $REDISPORT shutdown
二、Redis使用
鍵相關(guān)操作
- 查詢指定鍵是否存在
<!-- 輸出1代表存在,0代表不存在 -->
<!-- 格式:exists key -->
exists server:name => 1
exists server:blabla => 1
- 刪除一個(gè)存在的健值對(duì)
<!-- 格式:del key -->
del server:name
- expire:給指定的鍵設(shè)置一個(gè)過期時(shí)間(以秒為單位)。在過期時(shí)間內(nèi)給該鍵重新設(shè)置一個(gè)值,則該鍵值對(duì)的過期時(shí)間會(huì)被重置為-1(-1表示永不過期)。
set resource:lock "Redis Demo"
<!-- 設(shè)置鍵:resource:lock在120秒后過期 -->
<!-- 格式:expire key seconds -->
expire resource:lock 120
直接給一個(gè)鍵設(shè)置一個(gè)過期時(shí)間
<!-- 格式:set key value ex seconds -->
set resource:lock "Redis Demo" ex 120
- ttl:查詢過期時(shí)間(以秒為單位),查詢結(jié)果為-2表示該鍵值對(duì)已經(jīng)過期。-1表示該鍵值對(duì)永遠(yuǎn)不會(huì)過期。
<!-- 格式:ttl key -->
ttl resource:lock => -2
- persist:取消過期時(shí)間
<!-- 格式:persist key -->
persist resource:lock => 1
- rename:修改key的名字
<!-- 格式:rename key newkey -->
rename key newkey
- renamex:僅當(dāng)newkey不存在時(shí),將key改名為newkey
<!-- 格式:renamex key newkey -->
renamex key newkey
- type:返回可以存儲(chǔ)的數(shù)據(jù)的類型
<!-- 格式:type key -->
type key
1.字符串操作
- 存儲(chǔ)字符串
<!-- 格式:set key value -->
<!-- 鍵以“:”分割時(shí)候,會(huì)在redis服務(wù)器中進(jìn)行分組 -->
set server:name "fido"
- 查詢某個(gè)鍵的值
<!-- 格式:get key -->
<!-- "=>" 后面表示預(yù)計(jì)輸出的值 -->
get server:name => "fido"
- incr:原子性地增加存儲(chǔ)在給定鍵上的數(shù)值(加1),如果指定鍵上的數(shù)據(jù)不是integer型的或者數(shù)據(jù)超出取值范圍,則會(huì)報(bào)錯(cuò)。如果指定的鍵不存在,則會(huì)自動(dòng)創(chuàng)建一個(gè),并賦值為1.
set connections 10
<!-- 格式:incr key -->
incr connections => 11
- incrby:將鍵中包含的數(shù)字增加指定數(shù)值
<!-- 格式:incrby key increment -->
incrby connections 100 => 111
- decr:原子性的減少指定鍵上的數(shù)值(減1)。如果指定的鍵不存在,則會(huì)自動(dòng)創(chuàng)建一個(gè),并賦值為-1.
<!-- 格式:decr key -->
decr connections => 110
- decrby:將鍵中包含的數(shù)字減少指定數(shù)值.
<!-- 格式:decrby key decrement -->
decrby connections 10 => 100
2.List列表操作
使用rpush或lpush將新元素添加到列表中時(shí),如果數(shù)據(jù)庫(kù)中不存在指定的鍵,則會(huì)自動(dòng)創(chuàng)建一個(gè)鍵。
-
rpush:將新元素放在列表的末尾。
rpush和lpush可以一次性向一個(gè)列表中添加多個(gè)值
<!-- 格式:rpush key value1 [value2] -->
<!-- 返回的結(jié)果為列表的總長(zhǎng)度 -->
rpush friends "Alice" => 1
rpush friends "Bob" => 2
- lpush:將新元素放在列表的開頭。
<!-- 格式:lpush key value1 [value2] -->
lpush friends "Sam" => 3
- lrange:查看列表的子集。(第一個(gè)參數(shù)表示要查看的第一個(gè)元素的索引,第二個(gè)參數(shù)表示要檢索的最后一個(gè)元素的索引,設(shè)置為-1時(shí)表示檢索元素直到列表的末尾,-2表示檢索到倒數(shù)第二個(gè),依此類推。)
<!-- 格式:lrange key start end -->
lrange friends 0 0 => "Sam"
- llen:查看列表的長(zhǎng)度
<!-- 格式:llen key -->
llen friends => 3
- lpop:從列表中刪除第一個(gè)元素并返回它。
<!-- 格式:lpop key -->
lpop friends => "Sam"
- rpop:從列表中刪除最后一個(gè)元素并返回它。
<!-- 格式:rpop key -->
rpop friends => "Bob"
3.SET集合操作
- sadd:將給定成員添加到集合中,該命令也是可變參數(shù)。
<!-- 格式:sadd key member1 [member2] -->
<!-- 返回成功添加進(jìn)集合的個(gè)數(shù),如果集合中已經(jīng)存在該元素,則不會(huì)再次添加,所以不會(huì)進(jìn)行對(duì)該元素的計(jì)數(shù) -->
sadd superpowers "flight" => 1
sadd superpowers "x-ray vision" "reflexes" => 2
- scard:獲取集合的成員數(shù)。
<!-- 格式:scard key -->
scard superpowers => 3
- srem:移除集合中一個(gè)或多個(gè)成員
<!-- srem key member1 [member2] -->
<!-- 返回成功刪除的個(gè)數(shù) -->
srem superpowers "reflexes" => 1
- sismember:測(cè)試給定值是否在集合中。如果該值存在,則返回1,否則返回0。
<!-- 格式:sismember key member -->
sismember superpowers "flight" => 1
- smember:返回此集合中所有成員的列表
<!-- 格式:smembers key -->
smembers superpowers => "flight" "x-ray vision"
- sunion:組合兩個(gè)或更多集合,并返回所有元素的列表。
sadd birdpowers "pecking" "flight" => 2
<!-- 格式:sunion key1 key2 -->
sunion birdpowers superpowers => "x-ray vision" "flight" "pecking"
- spop:隨機(jī)刪除集合中的一個(gè)元素并返回
sadd letters a b c d e f => 6
<!-- 格式:spop key -->
spop letters => a
4.有序集合操作(zset)
- zadd:向有序集合添加一個(gè)或多個(gè)成員,或者更新已存在成員的分?jǐn)?shù)
<!-- 格式:zadd key score1 member1 [score2 member2] -->
zadd hackers 1940 "Alan Kay" => 1
- zrange:通過索引區(qū)間返回有序集合指定區(qū)間內(nèi)的成員
<!-- 格式:zrange key start stop -->
zrange hackers 0 -1 => "Alan Kay"
- zcard:獲取有序集合的個(gè)數(shù)
<!-- 格式:zcard key -->
zcard hackers => 1
- zcount:計(jì)算在有序集合中指定區(qū)間分?jǐn)?shù)的成員個(gè)數(shù)
<!-- 格式:zcount key min max -->
zcount hackers 1900 2000 => 1
5.哈希操作(hash)
- hset:將哈希表 key 中的字段 field 的值設(shè)為 value 。
<!-- 格式:hset key field1 value2 [field2 value2] -->
hset user:1000 name "John"
hset user:1000 email "john@example.com"
hset user:1000 password "123456"
- hget:獲取存儲(chǔ)在哈希表中指定字段的值。
<!-- 格式:hget key field1 -->
hget user:1000 name => "John"
- hmget:獲取所有給定字段的值
<!-- 格式:hget key field1 [field2] -->
hmget user:1000 name email => "John" "john@example.com"
- hgetall:獲取在哈希表中指定 key 的所有字段和值
<!-- 格式:hgetall key -->
hgetall user:1000 => "name" "John" "email" "john@example.com" "password" "123456"
- hlen:獲取哈希表中字段的數(shù)量
<!-- 格式:hlen key -->
hlen user:1000 => 3
- hkeys:獲取哈希表中的所有字段
<!-- 格式:hkeys key -->
hkeys user:1000 => "name" "email" "password"
- hexists:查詢哈希表中是否存在某個(gè)字段
<!-- 格式:hexists key field -->
hexists user:1000 name => 1
- hdel:刪除一個(gè)或多個(gè)哈希表字段
<!-- 格式:hdel key field1 [field2] -->
hexists user:1000 name => 1
- hincrby:為哈希表 key 中的指定字段的整數(shù)值加上增量 increment (原子方式)。
<!-- 格式:hincrby key field increment -->
hincrby user:1000 visits 1 => 1
- hincrbyfloat:為哈希表 key 中的指定字段的浮點(diǎn)數(shù)值加上增量 increment 。
<!-- 格式:hincrbyfloat key field increment -->
hincrbyfloat user:1000 score 80.5
- hmset:同時(shí)將多個(gè) field-value (域-值)對(duì)設(shè)置到哈希表 key 中。
<!-- 格式:hmset key field1 value1 [field2 value2] -->
hmset user:1000 age 26 gender 2
- hsetnx:只有在字段 field 不存在時(shí),設(shè)置哈希表字段的值。
<!-- 格式:hsetnx key value -->
hsetnx user:1000 name "Allen" => 1
- hvalues:獲取哈希表中所有字段的值
<!-- 格式:hvals key -->
hvals user:1000 => "john@example.com" "123456" "1" "80.5" "26" "2" "Allen"