隨着訪問量的提高,關係型數據庫多多少少遇到了瓶頸,爲了克服這一問題,NoSQL(Not Only SQL)應運而生,它同時具有了高性能、可擴展性強、高可用等優勢。 java
redis是如今受歡迎的NoSQL數據庫之一,是由C語言開發的,包含多種數據結構,支持網絡,基於內存,可選持久性的鍵值對存儲數據庫。linux
* redis支持多種數據結構 * redis經過key-value的形式存儲數據 * redis支持數據的持久化 * redis支持主從模式,能夠配置集羣 * 基於內存運行,性能高效
附一個官網地址,奇妙連接redis
redis雖然也有Windows版,可是仍是推薦在linux系統下安裝。數據庫
tar -zxvf redis-6.2.1.tar.gz -C dir
。進入解壓後的src目錄中,執行make
命令,此命令編譯C,可是須要gcc支持,沒有可使用yum提早下載gcc。安全
make distclean
將以前編譯的內容清除。make install
命令將可執行文件拷貝到/usr/local/bin
。主要有如下三種方式服務器
redis-server
網絡
redis-server &
數據結構
redis-server redis.conf &
併發
主要有一下兩種方式app
kill -9 pid
redis-cli shutdown
redis-cli -h ipadress -p port shutdown
。redis默認帶有客戶端爲redis-cli
鏈接方式爲 redis-cli -h ipadress -p port -a password
,若是redis安裝在本機且端口爲默認的6379能夠直接使用redis-cli
鏈接。
退出客戶端只須要執行exit
命令。
redis-benchmark
命令,參數具體以下表ping
命令,須要在客戶端中執行,鏈接正常返回PONG
。info
命令,須要在客戶端中執行,也能夠在後面加指定內容信息,例info cpu
。select index
命令切換數據庫實例。dbsize
命令。flushdb
。flushall
。config get *
,也能夠執行某條配置,例config get port
。redis本質上仍是數據庫,職能是儲存數據,針對於程序處理後的數據,redis提供了多種數據類型存儲。
特色:單key對應單個value
特色:單key對應多個value,value容許重複且有序(按插入順序排序)
特色:單key對應多個value,value不容許重複且無序。
特色:單key對應多個filed-value對。
特色:單key對應多個value,每一個value對應一個score值,value不容許重複且有序(按照score從小到大排序)
<font color=red>全部操做命令都在客戶端中使用。</font>
keys *
*
匹配一個或多個字符 ?
匹配一個字符 []
匹配一個字符且字符須要在[]中提早定義。exists key1 [key2 ...]
move key index
ttl key
expire key seconds
type key
rename key newkey
del key1 [key2 ...]
set key value
get key
append key value
set
incr key
decr key
incrby key offset
decrby key offset
strlen key
getrange key startIndex endIndex
getrange key 0 -1
setrange key startIndex value
setex key seconds value
setnx key value
mset key1 value1 [key2 value2 ...]
mget key1 [key2 ...]
msetnx key1 value1 [key2 value2 ...]
lpush key value1 [value2 ...]
lpush k1 1 2 3
,插入結果爲3 2 1lrange key startIndex endIndex
lrange key 0 -1
rpush key value1 [value2 ...]
lpop key [count]
lindex key index
llen key
rpop key [count]
lrem key count value
在指定列表中刪除count個與value相等的值。
sadd key member1 [member2 ...]
smembers key
sismember key member
scard key
srem key member1 [member2 ...]
srandmember key count
在指定集合中隨機獲取count個值。
spop key count
smove source dest member
sdiff key1 key2 [key3 ...]
sinter key1 key2 [key3 ...]
sunion key1 key2 [key3 ...]
hset key field1 value1 [field2 value2 ...]
hget key field
hmset key field1 value1 [field2 value2 ...]
hmget key field1 [field2 ...]
hgetall key
hdel key field1 [field2 ...]
hlen key
hexists key field
hkeys key
hvals key
hincrby key field int
hincrbyfloat key field float
hsetnx key field value
zadd key score1 member1 [score2 member2 ...]
zrange key startIndex endIndex [withscores]
zrange key 0 -1
zrevrange
命令,參數不變。zrangebyscore key min max [withscores]
zrevrangebyscore
命令,參數不變。zrem key member1 [member2 ...]
zcard key
zrank key member
zrevrank
命令,參數不變。zcount key min max
zscore key member
redis的配置文件模板在解壓目錄根目錄的redis.conf,這裏簡單說幾個配置。
1. requirepass 配置訪問密碼,默認不使用密碼。 2. 若是配置了密碼,須要將protected-mode設置成yes
redis是基於內存的數據庫,防止意外丟失數據,redis支持數據的持久化,將內存中的數據存到磁盤,下次redis服務啓動的時候再從磁盤讀取到內存中。
RDB策略是redis默認的持久化策略。
在指定的時間間隔內,redis服務執行指定次數的寫操做,會自動觸發一次持久話操做。
RDB策略默認的時間間隔是,1分鐘內10000次,5分鐘內10次,15分鐘內1次。
具體配置略。
AOF策略採用操做日誌的方式來記錄每一次寫操做,每次redis啓動時,都會從新執行一遍記錄的操做指令。
部分配置:
appendfsync AOF異步策略
redis爲了追求執行的高效性,犧牲了事務的原子性。redis的事務是將一系列命令放在一塊兒,將命令序列化以後依次執行,只能實現部分原子性。
redis的事務是將一系列命令先壓入命令隊列再執行,若是在壓入命令隊列時出現錯誤,則事務被放棄,事務內的全部命令都不執行;如果在執行事務的過程當中出現錯誤,則只有出錯的命令沒法執行,其他命令正常執行。
multi
exec
discard
watch key
unwatch
redis同時還提供了客戶端之間交互的功能,可是大部分此功能都是由消息中間件完成,因此只作瞭解。
subscribe ch1 [ch2 ...]
publish ch1 message
psubscribe ch1*
redis支持集羣模式,提供了主機數據更新後根據配置和策略自動同步到從機的master/slave機制,master服務以寫爲主,slave只能進行讀操做。
主要實現了,主寫從讀,讀寫分離
info replication
命令查看redis服務的主從角色。設置主從關係,設從不設主。
主機宕機,從機上位操做步驟
slaveof no one
斷開當前的主從狀態。redis的主從模式實現了功能,可是主機宕機以後須要手動從新設置主從狀態,並且咱們沒法預測主機當時時間,爲了解決這個問題redis提供了哨兵模式。
哨兵模式主要是經過哨兵程序監控主機狀態,當發現主機宕機以後,在從機中選舉一個新的主機。
哨兵程序的配置模板在reids根目錄的sectinel.conf
具體配置略。
簡略配置,新建一個配置文件,只加入以下配置。
sentinel monitor dc-redis ipadress port num
隨後啓動哨兵
redis-sentinel sentinel.conf
啓動哨兵以後,當主機再發生宕機,則會進行選舉出現新的主機,當原主機修復以後,自動成爲新主機的從機。
jedis是redis官方推出的java控制redis的工具,主要是將redis的操做指令封裝成了java方法,此處暫略。
redis的starter中對原有的API進行了修改,因此使用方法上和操做命令略有不一樣,此處暫略。