<code>目錄</code>
<a href="#redis" target="_blank">Redis</a>
<a href="#windows%E4%B8%8A%E7%9A%84%E5%9F%BA%E6%9C%AC%E9%85%8D%E7%BD%AE" target="_blank">【windows上的基本配置】</a>
<a href="#linux%E4%B8%8B%E7%9A%84%E4%BD%BF%E7%94%A8" target="_blank">Linux下的使用</a>
<a href="#docker%E5%AE%89%E8%A3%85redis" target="_blank">docker安裝redis</a>
<a href="#redis%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6" target="_blank">redis配置檔案</a>
<a href="#redis%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%B8%B8%E8%A7%84%E4%BD%BF%E7%94%A8" target="_blank">Redis指令行正常使用</a>
<a href="#%E5%B8%B8%E7%94%A8%E7%9A%84%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E6%93%8D%E4%BD%9C" target="_blank">常用的資料類型操作</a>
<a href="#%E8%BF%87%E6%9C%9F%E7%AD%96%E7%95%A5" target="_blank">過期政策</a>
<a href="#%E5%90%84%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E7%9A%84%E9%AB%98%E7%BA%A7%E6%93%8D%E4%BD%9C" target="_blank">各資料類型的進階操作</a>
<a href="#%E5%AD%97%E7%AC%A6%E4%B8%B2string" target="_blank">字元串 String</a>
<a href="#%E5%88%97%E8%A1%A8list" target="_blank">清單 list</a>
<a href="#%E9%9B%86%E5%90%88set" target="_blank">集合 set</a>
<a href="#%E6%9C%89%E5%BA%8F%E9%9B%86%E5%90%88zset" target="_blank">有序集合 zset</a>
<a href="#%E6%95%A3%E5%88%97hash" target="_blank">散列 hash</a>
<a href="#hyperloglog" target="_blank">HyperLogLog</a>
<a href="#geo%E5%9C%B0%E7%90%86%E4%BD%8D%E7%BD%AE" target="_blank">GEO【地理位置】</a>
<a href="#pub/sub%E5%8F%91%E5%B8%83%E8%AE%A2%E9%98%85" target="_blank">Pub/Sub釋出訂閱</a>
<a href="#%E4%BA%8B%E5%8A%A1" target="_blank">事務</a>
<a href="#%E6%9C%8D%E5%8A%A1%E5%99%A8" target="_blank">伺服器</a>
<a href="#runconfiguration" target="_blank">Run Configuration</a>
<a href="#%E6%95%B0%E6%8D%AE%E5%AE%89%E5%85%A8%E5%92%8C%E6%80%A7%E8%83%BD" target="_blank">資料安全和性能</a>
<a href="#%E6%8C%81%E4%B9%85%E5%8C%96%E7%AD%96%E7%95%A5" target="_blank">持久化政策</a>
<a href="#%E5%A4%8D%E5%88%B6" target="_blank">複制</a>
<a href="#%E6%95%B0%E6%8D%AE%E8%BF%81%E7%A7%BB" target="_blank">資料遷移</a>
<a href="#redis%E7%9A%84%E4%BD%BF%E7%94%A8" target="_blank">【Redis的使用】</a>
<a href="#%E4%BD%9C%E4%B8%BA%E6%97%A5%E5%BF%97%E8%AE%B0%E5%BD%95" target="_blank">作為日志記錄</a>
<a href="#%E4%BD%9C%E4%B8%BA%E7%BD%91%E7%AB%99%E7%BB%9F%E8%AE%A1%E6%95%B0%E6%8D%AE" target="_blank">作為網站統計資料</a>
<a href="#%E5%AD%98%E5%82%A8%E9%85%8D%E7%BD%AE%E4%BF%A1%E6%81%AF" target="_blank">存儲配置資訊</a>
<a href="#%E8%87%AA%E5%8A%A8%E8%A1%A5%E5%85%A8" target="_blank">自動補全</a>
<a href="#%E6%9E%84%E5%BB%BA%E9%94%81" target="_blank">建構鎖</a>
<a href="#%E4%BB%BB%E5%8A%A1%E9%98%9F%E5%88%97" target="_blank">任務隊列</a>
<a href="#java%E4%BD%BF%E7%94%A8redis" target="_blank">【Java使用redis】</a>
<a href="#jedis%E9%81%87%E5%88%B0%E7%9A%84%E5%BC%82%E5%B8%B8" target="_blank">jedis遇到的異常</a>
<a href="#springboot%E4%BD%BF%E7%94%A8redis" target="_blank">SpringBoot使用Redis</a>
目錄建立于2017-12-18
注冊為服務
<code>redis-server --service-install redis.windows.conf --loglevel verbose</code>
使用cmder
cmd 中運作 <code>E:/redis/redis-server.exe E:/redis/redis.windows.conf</code>
配置密碼
<code>requirepass redis1104</code>
用戶端登入 <code>auth redis1104</code>
下載下傳源碼,執行<code>make</code>進行編譯,編譯完成後,複制src目錄中的<code>redis-cli redis-server</code>就可以用了,redis-benchmark可選,測性能
再複制下面的簡化配置檔案,或者使用源碼中根目錄下的配置檔案自己配置下
<a href="https://raw.githubusercontent.com/Kuangcp/Configs/master/Database/redis/simple_redis.conf" target="_blank">簡化配置檔案</a>
再建立以下兩個腳本就可以便捷的使用redis了
<code>server_redis.sh</code>
<code>client_redis.sh</code>
<a href="https://github.com/Kuangcp/Notes/blob/master/Linux/Docker_Soft.md#%E5%AE%89%E8%A3%85redis">docker-install-redis</a>
<a href="https://github.com/Kuangcp/Configs/blob/master/Database/redis/explain_redis.conf" target="_blank">配置檔案講解</a>
<a href="https://github.com/Kuangcp/Configs/blob/master/Database/redis/redis.conf" target="_blank">原始配置檔案</a>
【<code>字元串</code>】
get
set
del
【<code>list 清單 (類似隊列)</code>】
rpush 右入隊列,末端
lpush 左
lrange 擷取範圍 0,-1 表示擷取全部
lindex 擷取指定index的元素
lpop 左出隊列
rpop
【<code>set 集合 (類似無序的Set)</code>】
sadd 添加一個對象<code>asdd key member</code>
smembers 擷取某Set所有元素 <code>smembers key</code>
sismember 查詢某Set是否含某元素,傳回類型是 0 1 <code>sismember key member</code>
srem 删除指定Set中指定元素 <code>srem key member</code>
【<code>hash 散列 (類似Map 嵌套,一個内置的微型redis)</code>】
hget
hset
hgetall 擷取某散列所有k-v
hdel 删除散列中指定k
hincrby 自增
【<code>zset 有序集合(元素是鍵值對,鍵是member成員,值是score分值必須是浮點數)</code>】
zadd 将一個給定分值的成員添加到有序集合裡 <code>zadd key 3.3 member</code>
zrange 根據元素在有序集合中的位置,從有序集合中擷取多個元素
zrange name 0 -1 withscores 擷取所有并擷取分值
zrange name 2 30 withscores
zrevrange 從大到小排序的擷取集合元素
zrangebyscore 擷取有序集合在給定範圍中的所有元素
zrangebyscore name 0 200 withscores
zrem
zincrby 自增
zinterstore 進行集合之間的并集(可以看作是多表連接配接)
<code>精度丢失問題</code>
<code>expire key seconds</code> 設定鍵的過期時間
<code>PTTL/TTL key</code> 檢視鍵剩餘過期時間(生存時間) ms/s
<a href="http://redisdoc.com/index.html" target="_blank">中文文檔</a>
字元串就是位元組組成的序列 可以放位元組串,整數,浮點數
<code>set key newval nx</code>存在則set失敗
<code>set key newval xx</code>不存在則set失敗
存入的String能被解析為數值 就能使用 incr incrby decr decrby
<code>incr</code> 是原子操作即并發的情況下不會有髒讀(可用于主鍵生成政策)
<code>getset key val</code> set新值,get舊值
<code>mset mget</code>
<code>mset key val key val</code>
<code>mget key key key</code> 傳回值組成的數組
<code>exists key</code> 有該值就傳回1否則0
<code>del key</code> 傳回1被删除,0 key不存在
<code>type key</code> 傳回值的類型
<code>expire key secondes</code> 設定或改變逾時時間,精度是秒或毫秒
<code>set key val ex secondes</code> set時設定逾時時間
<code>persist key</code> 去除逾時時間
<code>ttl key</code> 檢視剩餘存活時間 -1表示永久 -2表示沒有該key
<code>rpush key val val val</code>右/尾添加元素 lpush是左/頭,若表不存在就建立
<code>rpushx key value</code> 若表不存在就什麼都不做,否則尾插元素
<code>rpop key</code> 從list右/尾端中删除元素傳回元素值 沒有了就傳回null
阻塞式的清單彈出指令(block) <code>隊列很有用</code>
<code>blpop</code>
<code>brpop</code>
<code>bpoplpush</code>
<code>brpoplpush</code> 阻塞式先右彈再左進
<code>lrange key 0 -1</code> 取指定長度的list -1表示全部
<code>ltrim key 0 2</code> 截取目前的list
<code>lindex key offset</code> 傳回偏移量為offset的元素
<code>LINSERT key BEFORE|AFTER pivot value</code> 将值 value 插入到清單 key 當中,位于值 pivot 之前或之後。
當 pivot 不存在于清單 key 時,不執行任何操作。當 key 不存在時, key 被視為空清單,不執行任何操作。如果 key 不是清單類型,傳回一個錯誤。
<code>LREM key count value</code> 根據參數 count 的值,移除清單中與參數 value 相等的元素。
<code>SADD key member [member ...]</code>
<code>SCARD key</code> 傳回集合 key 的基數(集合中元素的數量)。
<code>SDIFF key [key ...]</code> 傳回一個集合的全部成員,該集合是所有給定集合之間的差集。不存在的 key 被視為空集。
<code>SDIFFSTORE destination key [key ...]</code> 這個指令的作用和 SDIFF 類似,但它将結果儲存到 destination 集合,而不是簡單地傳回結果集。如果 destination 集合已經存在,則将其覆寫。destination 可以是 key 本身。
<code>SINTER key [key ...]</code> 傳回一個集合的全部成員,該集合是所有給定集合的交集。不存在的 key 被視為空集。當給定集合當中有一個空集時,結果也為空集(根據集合運算定律)。
<code>SINTERSTORE destination key [key ...]</code> 與sdiffstore類似
<code>SISMEMBER key member</code> 判斷 member 元素是否集合 key 的成員。
<code>SMEMBERS key</code>
<code>SMOVE source destination member</code> 将 member 元素從 source 集合移動到 destination 集合。 SMOVE 是原子性操作。
<code>SPOP key</code> 移除并傳回集合中的一個随機元素
<code>SRANDMEMBER key [count]</code> 如果指令執行時,隻提供了 key 參數,那麼傳回集合中的一個随機元素
<code>SREM key member [member ...]</code> 移除集合 key 中的一個或多個 member 元素,不存在的 member 元素會被忽略。
<code>SUNION key [key ...]</code> 傳回一個集合的全部成員,該集合是所有給定集合的并集。
<code>SUNIONSTORE destination key [key ...]</code>
<code>SSCAN key cursor [MATCH pattern] [COUNT count]</code> 參考 SCAN 指令
ZADD
ZCARD
ZCOUNT
ZINCRBY
ZRANGE
ZRANGEBYSCORE
ZRANK
ZREM
ZREMRANGEBYRANK
ZREMRANGEBYSCORE
ZREVRANGE
ZREVRANGEBYSCORE
ZREVRANK
ZSCORE
ZUNIONSTORE
ZINTERSTORE
ZSCAN
ZRANGEBYLEX
ZLEXCOUNT
ZREMRANGEBYLEX
HDEL
HEXISTS
HGET
HGETALL
HINCRBY
HINCRBYFLOAT
HKEYS
HLEN
HMGET
HMSET
HSET
HSETNX
HVALS
HSCAN
HSTRLEN
PFADD
PFCOUNT
PFMERGE
GEOADD
GEOPOS
GEODIST
GEORADIUS
GEORADIUSBYMEMBER
GEOHASH
<code>PSUBSCRIBE pattern [pattern ...]</code>
訂閱一個或多個符合給定模式的頻道。每個模式以 * 作為比對符,比如 it* 比對所有以 it 開頭的頻道( it.news 、 it.blog 、 it.tweets 等等),
news.* 比對所有以 news. 開頭的頻道( news.it 、 news.global.today 等等),諸如此類。
<code>PUBLISH channel message</code>
将資訊 message 發送到指定的頻道 channel 。
<code>PUBSUB <subcommand> [argument [argument ...]]</code>
PUBSUB 是一個檢視訂閱與釋出系統狀态的内省指令, 它由數個不同格式的子指令組成, 以下将分别對這些子指令進行介紹。
<code>PUBSUB CHANNELS [pattern]</code> 列出目前的活躍頻道。設定pattern參數就會比對活躍頻道,否則是列出所有頻道
<code>PUBSUB NUMSUB [channel-1 ... channel-N]</code> 傳回給定頻道的訂閱者數量, 訂閱模式的用戶端不計算在内。
<code>PUBSUB NUMPAT</code> 傳回訂閱模式的數量。注意, 這個指令傳回的不是訂閱模式的用戶端的數量, 而是用戶端訂閱的所有模式的數量總和。
<code>PUNSUBSCRIBE [pattern [pattern ...]]</code>
訓示用戶端退訂所有給定模式。如果沒有模式被指定,也即是,一個無參數的 PUNSUBSCRIBE 調用被執行,
那麼用戶端使用 PSUBSCRIBE 指令訂閱的所有模式都會被退訂。在這種情況下,指令會傳回一個資訊,告知用戶端所有被退訂的模式。
<code>SUBSCRIBE channel [channel ...]</code>
訂閱給定的一個或多個頻道的資訊。
<code>UNSUBSCRIBE [channel [channel ...]]</code>
訓示用戶端退訂給定的頻道。如果沒有頻道被指定,也即是,一個無參數的 UNSUBSCRIBE 調用被執行,
那麼用戶端使用 SUBSCRIBE 指令訂閱的所有頻道都會被退訂。在這種情況下,指令會傳回一個資訊,告知用戶端所有被退訂的頻道。
<code>DISCARD</code> 取消事務,放棄執行事務塊内的所有指令。
<code>EXEC</code>
執行所有事務塊内的指令。假如某個(或某些) key 正處于 WATCH 指令的監視之下,且事務塊中有和這個(或這些) key 相關的指令,
那麼 EXEC 指令隻在這個(或這些) key 沒有被其他指令所改動的情況下執行并生效,否則該事務被打斷(abort)。
<code>MULTI</code> 标記一個事務塊的開始。事務塊内的多條指令會按照先後順序被放進一個隊列當中,最後由 EXEC 指令原子性(atomic)地執行。
<code>UNWATCH</code>
取消 WATCH 指令對所有 key 的監視。如果在執行 WATCH 指令之後, EXEC 指令或 DISCARD 指令先被執行了的話,那麼就不需要再執行 UNWATCH 了。
因為 EXEC 指令會執行事務,是以 WATCH 指令的效果已經産生了;而 DISCARD 指令在取消事務的同時也會取消所有對 key 的監視,是以這兩個指令執行之後,就沒有必要執行 UNWATCH 了。
<code>WATCH key [key ...]</code>
監視一個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他指令所改動,那麼事務将被打斷。
BGREWRITEAOF
BGSAVE
CLIENT GETNAME
CLIENT KILL
CLIENT LIST
CLIENT SETNAME
CONFIG GET
CONFIG RESETSTAT
CONFIG REWRITE
CONFIG SET
DBSIZE
DEBUG OBJECT
DEBUG SEGFAULT
FLUSHALL
FLUSHDB
INFO
LASTSAVE
MONITOR
PSYNC
SAVE
SHUTDOWN
SLAVEOF
SLOWLOG
SYNC
TIME
slaveof
<code>redis-server --port 9999 --slaveof 127.0.0.1 6379</code> 啟動一個9999端口作為6379的從伺服器進行同步
或者服務啟動後執行 <code>slaveof host port</code>(如果已經是從伺服器,就丢去舊伺服器的資料集,轉而對新的主伺服器進行同步)
從服務變成主服務 <code>slaveof no one</code> (同步的資料集不會丢失,迅速替換主伺服器)
loglevel
<code>./redis-server /etc/redis/6379.conf --loglevel debug</code>
使用主從複制來進行資料
搜尋建議
發送郵件
maven依賴(Spring 4.1.7):
<code>Spring配置檔案</code>
jedis 使用後要disconnect釋放連接配接,最新版本close就不用了,使用連接配接池就不用
jedis 的事務 使用exec釋放事務
Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.springframework.core.serializer.support.DeserializingConverter
版本對不上,要Spring和Spring-data-redis 和 redis和commons-lang3對應
目前是4.1.7 + 1.6.0 + 2.9.0 + 3.3.2 編譯通過了
<a href="/Java/Spring/SpringBootDatabase.md" target="_blank">SpringBoot配置Redis</a>