redis總結


1.什么是redis?

redis是一個基於內存的高性能key-value數據庫。可用於緩存,事件發布或訂閱,高速隊列等場景。

redis全稱為remote  dictionary server(遠程字典服務器)用C語言編寫的,是當下熱門的NoSql數據庫。

 

redis默認有16個數據庫,從0開始。可用  select 數據庫號 來選擇數據庫,默認使用的0號數據庫。

redis默認沒有密碼。

2.redis支持多種數據類型(string,list,hash,set,sorted set)

1)String

String是redis最基本的數據類型,redis中的一個字符串的value最多可以是512M

常用命令:set/get/mset/mget/incr/decr/incrby/decrby等

// 演示 set/get/mset/mget
127.0.0.1:6379> set k v OK 127.0.0.1:6379> get k "v" 127.0.0.1:6379> mset k1 v1 k2 v2 OK 127.0.0.1:6379> mget k1 k2 1) "v1" 2) "v2" 127.0.0.1:6379> // incr/incrby演示 操作的value必須是數字否則報錯。 127.0.0.1:6379> set k3 3 OK 127.0.0.1:6379> incr k3 (integer) 4 127.0.0.1:6379> incrby k3 3 (integer) 7 127.0.0.1:6379> get k3 "7" 127.0.0.1:6379>

2)list

redis 的list實現是一個雙向的鏈表。支持反向查找和遍歷;

常用命令:lPush/rPush/lPop/rPop/lRange等。

127.0.0.1:6379> lpush list a b c
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> rpush list 1 2 3
(integer) 6
127.0.0.1:6379> lrange list 0 -1
1) "c"
2) "b"
3) "a"
4) "1"
5) "2"
6) "3"
127.0.0.1:6379> rpop list
"3"
127.0.0.1:6379> lpop list
"c"
127.0.0.1:6379> 

3)Hash

redis的hash的value實際上是一個HashMap;

常用命令:hSet/hGet/hmSet/hmget/hgetAll/hDel等

127.0.0.1:6379> hset hash age 20
(integer) 1
127.0.0.1:6379> hget hash age
"20"
127.0.0.1:6379> hmset hash1 name tale age 20
OK
127.0.0.1:6379> hmget hash1 name age
1) "tale"
2) "20"
127.0.0.1:6379>      

4)set

set內部實現是一個value為null的HashMap。

常用命令:sAdd/sMembers/sPop/sRem/sDiff/sunion等

127.0.0.1:6379> sadd set a b c d
(integer) 4
127.0.0.1:6379> smembers set
1) "a"
2) "d"
3) "b"
4) "c"
127.0.0.1:6379> spop set
"c"
127.0.0.1:6379> srem set a
(integer) 1
127.0.0.1:6379> sadd set1 a b
(integer) 2
127.0.0.1:6379> sdiff set set1
1) "d"
127.0.0.1:6379> sunion set set1
1) "a"
2) "b"
3) "d"
127.0.0.1:6379>

5)sorted set

可以理解為有序的set。

實現方式:使用HashMap和跳躍表(SkipList)來保證數據的存儲和有序;

常用命令:zadd/zrem/zscore/zRange等;

127.0.0.1:6379> zadd zset 90 a 80 b 70 c
(integer) 3
127.0.0.1:6379> zrange zset 0 -1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "c"
2) "70"
3) "b"
4) "80"
5) "a"
6) "90"
127.0.0.1:6379>    

redis支持(部分支持)事務

redis執行事務的過程:

  • 開啟事務(multi)
  • 命令入隊
  • 執行事務(exec)

redis的單個命令執行都是遵循原子性的。

然而redis的事務卻不遵循原子性。比如:

127.0.0.1:6379> set k a
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set k1 1
QUEUED
127.0.0.1:6379> incr k
QUEUED
127.0.0.1:6379> get k1
QUEUED
127.0.0.1:6379> get k
QUEUED
127.0.0.1:6379> exec
1) OK
2) (error) ERR value is not an integer or out of range
3) "1"
4) "a"
127.0.0.1:6379>  

以上就可以看出redis的事務不是原子性的。原子性:是要么都執行,要么都不執行。

redis持久化

redis的持久化方式有兩種:RDB和aof(默認使用RDB,aof是關閉的:appendonly no)

RDB持久化方式:redis會fork一個子進程和父進程的數據、環境變量等一致,在指定時間間隔內保存數據到臨時文件中,待持久化結束,再替換上一次持久化文件。整個過程中,主進程是不進行任何IO操作的。

redsi.conf配置文件中:

save 900 1     #900秒內如果超過1個Key被修改,則啟動快照保存
save 300 10    #300秒內如果超過10個Key被修改,則啟動快照保存
save 60 10000  #60秒內如果超過10000個重點被修改,則啟動快照保存

rdb在指定時間內修改次數超過規定次數就會產生rdb文件(文件名默認為:dump.rdb 建議不要修改文件名)

flushAll也會產生dump.rdb文件,但是里面是空的,無意義;

rdb快照:

  • save:只管保存,其他不管,全部阻塞
  • bgsave:會在后台進行異步快照操作,快照的同時還可以響應客戶端請求。

優點:高效。

缺點:數據一致性較弱,會缺失最后一次持久化的數據。fork的時候內存數據被克隆了一份,消耗內存。

 

aof持久化方式:采用文件追加的方式。持續追加會導致文件越來越大,因此增加了重寫機制,當aof文件超過閾值,會觸發重寫機制,redis就會啟動aof文件的內容壓縮,

只保留可以恢復數據的最小指令集,可以使用bgrewrietaof

rewrite(重寫)原理:aof文件持續增長過大,超過閾值(64M)是,fork一個新的進程來重寫aof文件,沒有讀取舊aof文件而是將內存的數據庫的內存以命令的方式重寫了一個aof文件。redis會記錄上一次重寫是aof文件的大小,默認配置aof文件是上一次aof文件大小的一倍。

 

redis默認不開啟aof持久化。需要在redis.conf文件修改appendonly on 修改為yes

如aof文件被寫壞,可用命令:redis-check-aof--fix進行修復

優點:數據一致性較強。

缺點:相同數據集的數據aof文件要大於rdb文件,恢復速度慢於rdb

當rdb和aof同時開啟的時候,redis只會找aof文件。

 

主從復制:主機可以進行讀寫操作,從機只能讀,不能寫。

一主二仆:一個主機兩個從機

同時啟動三個或多個:

redis-server ../redis6379.conf   
redis-cli -p 6379

redis-server ../redis6380.conf   
redis-cli -p 6380

redis-server ../redis6381.conf   
redis-cli -p 6381

6380和6381作為從機執行: slaveof 127.0.0.1 6379(slaveof ip 主機端口)

薪火相傳:6379端口為6380主機,6380端口為6381的主機。

反客為主:人為方式;當主機down,命令:slaveof no one

哨兵模式:監聽主機,當主機down了,會投票從機當主機。(二者投票數相同會重新投票)

在sentinel.conf文件配置,如果沒有則自己創建。

sentinel monitor 主機名字(隨意起)127.0.0.1 主機端口 1   // 1表示投票數為1時成為主機
//然后命令啟動哨兵模式
./redis-sentinel ../sentinel.conf

//以上操作是在centos環境操作的。

哨兵模式可實現高可用。

redis的應用場景有哪些會話緩存(最常用)

  1. 消息隊列,
  2. 比如支付
  3. 活動排行榜或計
  4. 發布,訂閱消息(消息通知)
  5. 商品列表,評論列表等

 

 redis常用命令:

keys * // 查看當前庫的所有key
exists key // 判斷是否存在key
ttl key  // 查看key的過期時間 返回-2表示已過期或者不存在-1表示永不過期
expire key 秒  // 為key設置過期時間
type key // 判讀key的類型

// 事務
multi   // 事務開啟
exec   // 事務執行
watch key [key]  // 監視一個或多個key,如果在事務執行之前,這些key被操作,事務將被打斷
unwatch // 取消watch命令對所有key的監視
discard  // 取消事務

select 1 //選擇redis的1號數據庫

config get //獲得服務配置
confi get dir //獲取redis的安裝位置
flushdb //刪除當前選擇的數據庫中的key
flushall //刪除所有數據庫中的鍵

info
info replication // 查看當前角色,主機,從機


redsi-benchmark --help //redis自帶的性能測試工具,此命令不是在redis里面使用

 命令大全

 

 

 

 

 http://doc.redisfans.com/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM