摘要:將值插入到列表當(dāng)中,位于值之前或之后有多個(gè)值默認(rèn)第一個(gè)對(duì)數(shù)據(jù)類型的操作類似于集合模式不變,但是一個(gè)鍵值對(duì)插入獲得多個(gè)插入獲得鍵值刪除返回長(zhǎng)度查看哈希表中,給定域是否存在。的缺點(diǎn)是最后一次持久化后的數(shù)據(jù)可能丟失。
redis redis簡(jiǎn)介
簡(jiǎn)介:Redis:REmote DIctionary Server(遠(yuǎn)程字典服務(wù)器),是完全開(kāi)源免費(fèi)的,用C語(yǔ)言編寫(xiě)的,遵守BSD協(xié)議,是一個(gè)高性能的(key/value)分布式內(nèi)存數(shù)據(jù)庫(kù),基于內(nèi)存運(yùn)行并支持持久化的NoSQL數(shù)據(jù)庫(kù),是當(dāng)前最熱門(mén)的NoSql數(shù)據(jù)庫(kù)之一,也被人們稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器
redis功能1.內(nèi)存存儲(chǔ)和持久化:redis支持異步將內(nèi)存中的數(shù)據(jù)寫(xiě)到硬盤(pán)上,同時(shí)不影響繼續(xù)服務(wù)
2.取最新N個(gè)數(shù)據(jù)的操作,如:可以將最新的10條評(píng)論的ID放在Redis的List集合里面
3.模擬類似于HttpSession這種需要設(shè)定過(guò)期時(shí)間的功能
4.發(fā)布、訂閱消息系統(tǒng)
5.定時(shí)器、計(jì)數(shù)器......
redis學(xué)習(xí)步驟1.數(shù)據(jù)類型、基本操作和配置
2.持久化:RDB/AOF
3.事務(wù)的控制
4.主從復(fù)制
windows系統(tǒng)下的redis安裝以及卸載 安裝環(huán)境變量: 將解壓縮的安裝包放到指定位置,復(fù)制路徑到Path中
注冊(cè)系統(tǒng)服務(wù): 進(jìn)入需要安裝的redis目錄下面執(zhí)行cmd:
redis-server --service-install redis.windows.conf --service-name redis
卸載redis-server --service-uninstall --service-name redis
啟動(dòng)net start redis
關(guān)閉net stop redis
使用redis1.啟動(dòng)redis服務(wù)
2.Redis-cli -p 6379連接端口號(hào)為6379的redis
3.輸入set k1 v1,就是往redis數(shù)據(jù)庫(kù)中存放了一個(gè)鍵為k1值為v1的數(shù)據(jù)
4.輸入 get k1即可獲得數(shù)據(jù)庫(kù)中保存的k1對(duì)應(yīng)的值
5.退出當(dāng)前客戶端:shutdown(退出Redis),quit(返回)
6;關(guān)閉redis服務(wù):net stop redis
7:客戶端默認(rèn)不顯示中文redis-cli --raw -p 6379
需要了解的常識(shí)問(wèn)題1.redis默認(rèn)16個(gè)數(shù)據(jù)庫(kù),類似數(shù)組下表從零開(kāi)始,初始默認(rèn)使用零號(hào)庫(kù)
2.select命令切換數(shù)據(jù)庫(kù):select 3 切換到下標(biāo)為3的庫(kù)
3.dbsize命令:查看當(dāng)前數(shù)據(jù)庫(kù)的key的數(shù)量
4.flushdb命令:清空當(dāng)前庫(kù)
5.Flushall命令 : 清空全部庫(kù)
6.redis默認(rèn)端口號(hào)為6379
7.redis默認(rèn)不設(shè)置密碼(快速)
類似于關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)類型,redis的五大數(shù)據(jù)類型是程序往redis數(shù)據(jù)庫(kù)存數(shù)據(jù)的5中形式
string:string是redis最基本的類型,一個(gè)key對(duì)應(yīng)一個(gè) value(重要)
hash:哈希,類似java里的Map集合,常用來(lái)存儲(chǔ)java里面的Object(非常重要)
list:Redis 列表是簡(jiǎn)單的字符串列表,按照插入順序排序, 你可以添加一個(gè)元素導(dǎo)列表的頭部(左邊)或者尾 部(右邊),類似于LinkList
set:Redis的Set是string類型的無(wú)序不重復(fù)集合。它是通過(guò)HashTable實(shí)現(xiàn)實(shí)現(xiàn)的
zset(sorted set):有序集合,Redis zset 和 set 一樣也 是string類型元素的集合,且不允許重復(fù)的成員,不同的是 每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類型的分?jǐn)?shù) redis正是通過(guò)分?jǐn)?shù)來(lái)為集合中的成員進(jìn)行從小到大的排序.zset的成員是唯一的,但分?jǐn)?shù)(score)卻可以重復(fù).
5大數(shù)據(jù)類型分類介紹 對(duì)key的操作keys *:查詢?cè)搸?kù)中所有key
scan:循環(huán)查詢鍵
exists key:判斷某個(gè)key是否存在
expire key 秒鐘:為給定的key設(shè)置過(guò)期時(shí)間
ttl key: 查看還有多少秒過(guò)期,-1表示永不過(guò)期,-2表示已過(guò)期
type key:查看你的key是什么類型
get key:返回 key 所關(guān) 聯(lián)的字符串值,如果 key 不存在那么返回特殊值 nil
set key value:設(shè)置值
del key:刪除
對(duì)string數(shù)據(jù)類型的操作append key value:如果 key 已經(jīng)存在并且是一個(gè)字符串,APPEND 命令將 value 追加到 key 原來(lái)的值的末尾。如果 key 不存在, APPEND 就簡(jiǎn)單地將給定 key 設(shè)為 value ,就像執(zhí)行 SET key value 一樣。
strlen key :返回 key 所儲(chǔ)存的字符串值的長(zhǎng)度。
incr/decr/incrby/decrby:自增/自減/加指定值/減指定值
getrange key start end/setrange key index value:返回 key 中字符串值的子字符串/用 value 參數(shù)覆寫(xiě)給定 key 所儲(chǔ)存的字符串值,從偏移量 index開(kāi)始。
setex key seconds value/setnx key value:將值 value 關(guān)聯(lián)到 key ,并將 key 的生存時(shí)間設(shè)為 seconds (以秒為單位).如果 key 已經(jīng)存在,SETEX 命令將覆寫(xiě)舊值/將 key 的值設(shè)為 value ,當(dāng)且僅當(dāng) key 不存在。
mset/mget/msetnx:設(shè)置多個(gè)/獲得多個(gè)/設(shè)置多個(gè)當(dāng)key不存在時(shí)
getset:將給定 key 的值設(shè)為 value ,并返回 key 的舊值(old value)。
對(duì)list數(shù)據(jù)類型的操作數(shù)據(jù)可重復(fù):(l可以理解為頭,r理解為尾),有下標(biāo),它是一個(gè)字符串鏈表,left、right都可以插入添加;如果鍵不存在,創(chuàng)建新的鏈表;如果鍵已存在,新增內(nèi)容;如果值全移除,對(duì)應(yīng)的鍵也就消失了。鏈表的操作無(wú)論是頭和尾效率都極高,但假如是對(duì)中間元素進(jìn)行操作,效率就很慘淡了。
lpush/rpush/lrange key start stop:左加入/右加入/獲取區(qū)間數(shù)據(jù)0 -1代表取全部
lpop key/rpop key:移除并返回列表頭部/尾部
llen key:長(zhǎng)度
lrem key count value:移除列表中與參數(shù) value 相等指定count個(gè)數(shù)的元素。
ltrim key start stop:獲取指定區(qū)間的數(shù)據(jù)在賦值給key
rpoplpush k1 k2:將第一個(gè)列表尾部元素拿出放到第二個(gè)列表頭部
lset key index value:將列表 key 下標(biāo)為 index 的元素的值設(shè)置為 value 。
linsert key before/after pivot value:將值 value 插入到列表 key 當(dāng)中,位于值 pivot 之前或之后,有多個(gè)值默認(rèn)第一個(gè)
對(duì)hash數(shù)據(jù)類型的操作類似于Map集合,KV模式不變,但V是一個(gè)鍵值對(duì)
hset/hget/hmset/hmget/hgetall/hdel:插入/獲得/多個(gè)插入/獲得鍵值/刪除
hlen key:返回長(zhǎng)度
hexists key field:查看哈希表 key 中,給定域 field 是否存在。
hkeys/hvals:取出所有的域/取出所有的域的值
hincrby key field increment/hincrbyfloat:為哈希表 key 中 的域 field 的值加上增量 increment /為哈希表 key 中的域 field 加上浮點(diǎn)數(shù)增量 increment
hsetnx:和set類似,key不存在賦值,key存在操作無(wú)效
對(duì)set數(shù)據(jù)類型的操作sadd/smembers key/sismember key member:將一個(gè)或多個(gè) member 元素加入到集合 key 當(dāng)中,已經(jīng)存在于集合的 member 元素將被忽略/返回集合 key 中的所有成員/判斷 member 元素是否集合 key 的成員
scard key:獲取集合里面的元素個(gè)數(shù)
srem key value:刪除集合中元素
srandmember key num:某個(gè)整數(shù)(隨機(jī)出num個(gè)數(shù)):那么返回指定集合中的一個(gè)隨機(jī)元素
spop key :移除并返回集合中的一個(gè)隨機(jī)元素。
smove k1 k2 member:將 member 元素從 k1集合移動(dòng)到 k2集合。
sdiff k1 k2.....:差集,在第一個(gè)里面而不在后面任何一個(gè)set里面的項(xiàng)
sinter:交集
sunion:并集
對(duì)zset數(shù)據(jù)類型的操作在set基礎(chǔ)上,加一個(gè)score值。之前set是k1 v1 v2 v3,現(xiàn)在zset是k1 score1 v1 score2 v2
zadd key score member:將一個(gè)或多個(gè) member 元素及其 score 值加入到有序集 key 當(dāng)中
zrem key value:移除key集合中的value值
zcard:返回元素個(gè)數(shù)
zcount key min max:返回元素個(gè)數(shù),scores分?jǐn)?shù)在min和max之間
zrank key value:返回有序集 key 中成員 value的排名。其中有序集成員按 score 值遞增(從小到大)順序排列。zrevrank key value:從大到小
zrange key index [withscores]:返回區(qū)間中的數(shù)據(jù)(分?jǐn)?shù)從小到大)
zrevrange key index [withscores];返回區(qū)間中的數(shù)據(jù)(分?jǐn)?shù)從大到小)
參考鏈接
redis命令大全
redis是內(nèi)存數(shù)據(jù)庫(kù),內(nèi)存里面的數(shù)據(jù)在關(guān)機(jī)或者斷電時(shí)會(huì)清空,那么怎么把內(nèi)存中的時(shí)候永久保存下來(lái)就是持久化(把數(shù)據(jù)保存到本地硬盤(pán)),通常用兩種方式:
RDB(Redis DataBase)
AOF(Append Only File)
RDB在指定的時(shí)間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫(xiě)入磁盤(pán),也就是行話講的Snapshot快照,它恢復(fù)時(shí)是將快照文件直接讀到內(nèi)存里,Redis會(huì)多帶帶創(chuàng)建(fork)一個(gè)子進(jìn)程來(lái)進(jìn)行持久化,會(huì)先將數(shù)據(jù)寫(xiě)入到一個(gè)臨時(shí)文件中,待持久化過(guò)程都結(jié)束了,再用這個(gè)臨時(shí)文件替換上次持久化好的文件。整個(gè)過(guò)程中,主進(jìn)程是不進(jìn)行任何IO操作的,這就確保了極高的性能如果需要進(jìn)行大規(guī)模數(shù)據(jù)的恢復(fù),且對(duì)于數(shù)據(jù)恢復(fù)的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺點(diǎn)是最后一次持久化后的數(shù)據(jù)可能丟失。
RDB配置 RDB注意事項(xiàng)1.通過(guò)配置滿足條件時(shí)快照可以自動(dòng)觸發(fā),并產(chǎn)生dump.rdb文件,當(dāng)然也可以通過(guò)save命令手動(dòng)觸發(fā)快照,在save的時(shí)候阻塞其他操作,bgsave會(huì)在后臺(tái)異步進(jìn)行快照操作,快照同時(shí)還可以響應(yīng)客戶端請(qǐng)求??梢酝ㄟ^(guò)lastsave命令獲取最后一次成功執(zhí)行快照的時(shí)間
2.執(zhí)行flushall命令,也會(huì)產(chǎn)生dump.rdb文件,但里面是空的,無(wú)意義
3.將備份文件 (dump.rdb) 移動(dòng)到 redis 安裝目錄并啟動(dòng)服務(wù)可以自動(dòng)的把硬盤(pán)中的數(shù)據(jù)導(dǎo)入到內(nèi)存中
優(yōu)點(diǎn):適合大規(guī)模的數(shù)據(jù)恢復(fù),對(duì)數(shù)據(jù)完整性和一致性要求不高
缺點(diǎn):在一定間隔時(shí)間做一次備份,所以如果redis意外down掉的話,就會(huì)丟失最后一次快照后的所有修改,fork的時(shí)候,內(nèi)存中的數(shù)據(jù)被克隆了一份,大致2倍的膨脹性需要考慮
AOF以日志的形式來(lái)記錄每個(gè)寫(xiě)操作,將Redis執(zhí)行過(guò)的所有寫(xiě)指令記錄下來(lái)(讀操作不記錄),只許追加文件但不可以改寫(xiě)文件,redis啟動(dòng)之初會(huì)讀取該文件重新構(gòu)建數(shù)據(jù),換言之,redis重啟的話就根據(jù)日志文件的內(nèi)容將寫(xiě)指令從前到后執(zhí)行一次以完成數(shù)據(jù)的恢復(fù)工作
AOF配置AOF默認(rèn)是關(guān)閉的,需要的話可以在配置文件中打開(kāi)修改默認(rèn)的appendonly no,改為yes,AOF產(chǎn)生的文件的名字默認(rèn)叫:appendonly.aof
AOF采用文件追加方式,文件會(huì)越來(lái)越大為避免出現(xiàn)此種情況,新增了重寫(xiě)機(jī)制,當(dāng)AOF文件的大小超過(guò)所設(shè)定的閾值時(shí),Redis就會(huì)啟動(dòng)AOF文件的內(nèi)容壓縮,只保留可以恢復(fù)數(shù)據(jù)的最小指令集.可以使用命令bgrewriteaof,AOF文件持續(xù)增長(zhǎng)而過(guò)大時(shí),會(huì)fork出一條新進(jìn)程來(lái)將文件重寫(xiě)(也是先寫(xiě)臨時(shí)文件最后再rename),遍歷新進(jìn)程的內(nèi)存中數(shù)據(jù),每條記錄有一條的Set語(yǔ)句。重寫(xiě)aof文件的操作,并沒(méi)有讀取舊的aof文件,而是將整個(gè)內(nèi)存中的數(shù)據(jù)庫(kù)內(nèi)容用命令的方式重寫(xiě)了一個(gè)新的aof文件,這點(diǎn)和快照有點(diǎn)類似
AOF優(yōu)缺點(diǎn)如果rdb和aof文件共存的時(shí)候先加載aof文件,由于如果aof文件損壞導(dǎo)致redis無(wú)法啟動(dòng):進(jìn)入Redis安裝目錄:輸入redis-check-aof --fix appendonly.aof修復(fù)
優(yōu)點(diǎn):同步持久化每次發(fā)生數(shù)據(jù)變更會(huì)被立即記錄到磁盤(pán)性能較差但數(shù)據(jù)完整性比較好
缺點(diǎn):aof運(yùn)行效率要慢于rdb,每秒同步策略效率較好,不同步效率和rdb相同
redis主從復(fù)制在實(shí)際開(kāi)發(fā)過(guò)程中一般一臺(tái)主服務(wù)器會(huì)有多個(gè)從服務(wù)器,當(dāng)主服務(wù)器發(fā)生故障的時(shí)候,從服務(wù)器能替代主服務(wù)器的功能,那么就要要求主從服務(wù)器之間的數(shù)據(jù)要同步,主服務(wù)器實(shí)時(shí)的吧數(shù)據(jù)復(fù)制到從服務(wù)器上,一般主服務(wù)器復(fù)制寫(xiě),從服務(wù)器負(fù)責(zé)讀,實(shí)現(xiàn)讀寫(xiě)分離
redis主從復(fù)制配置當(dāng)從機(jī)連接上主機(jī)以后會(huì)把主機(jī)中所有的數(shù)據(jù)都同步到從機(jī)中,并且從機(jī)只能讀不能寫(xiě)
在從服務(wù)器上配置:
slaveof 主機(jī)ip 端口號(hào)從機(jī)每次斷開(kāi)都要執(zhí)行該命令,可以寫(xiě)入配置文件
slaveof no one:解除從機(jī)狀態(tài)
info replication :查看當(dāng)前主從狀態(tài)
redis哨兵模式當(dāng)主機(jī)發(fā)生故障時(shí)從從機(jī)中自動(dòng)選出一個(gè)替代主機(jī)
1.在安裝目錄下創(chuàng)建sentinel.conf文件(哨兵配置文件)添加內(nèi)容格式:
sentinel monitor myMonitor 127.0.0.1 6379 1
2.啟動(dòng)哨兵進(jìn)入哨兵配置文件所在目錄:redis-server sentinel.conf --sentinel
3.啟動(dòng)主機(jī)和從機(jī)
4.設(shè)置主機(jī)故障
package com.zl.util; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class JedisUtil { //連接池對(duì)象 private JedisPool jp=null; //創(chuàng)建連接池配置對(duì)象 private JedisPoolConfig jpc=null; private static JedisUtil ju=new JedisUtil(); private JedisUtil(){ //創(chuàng)建連接池對(duì)象 jpc=new JedisPoolConfig(); //最大空閑連接 jpc.setMaxIdle(8); //最大連接數(shù) jpc.setMaxTotal(100); //最大等待毫秒數(shù) jpc.setMaxWaitMillis(10000); //保證獲得的連接都可用 jpc.setTestOnBorrow(true); jp=new JedisPool(jpc, "localhost",6380); } public static JedisUtil init(){ return ju; } //返回?cái)?shù)據(jù)庫(kù)連接 public Jedis getJedis(){ return jp.getResource(); } }序列化方式存儲(chǔ)對(duì)象到redis
package com.zl.util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class SerUtil { /* * 把一個(gè)對(duì)象序列化成一個(gè)byte數(shù)組以及反序列化 */ public static byte[] getByte(Object o){ byte[] bs=null; //對(duì)象輸出流 ObjectOutputStream oos=null; ByteArrayOutputStream bos=null; bos=new ByteArrayOutputStream(); try { oos=new ObjectOutputStream(bos); oos.writeObject(o); bs=bos.toByteArray(); bos.flush(); } catch (IOException e) { e.printStackTrace(); }finally{ try { oos.close(); } catch (IOException e) { e.printStackTrace(); } } return bs; } //反序列化 public static Object getObject(byte[] bs){ Object o=null; ObjectInputStream ois=null; ByteArrayInputStream bis=null; bis=new ByteArrayInputStream(bs); try { ois=new ObjectInputStream(bis); o=ois.readObject(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); }finally{ try { ois.close(); } catch (IOException e) { e.printStackTrace(); } } return o; } }使用JSON格式字符串存儲(chǔ)對(duì)象到redis spring和redis整合 導(dǎo)入依賴
編寫(xiě)配置文件redis.clients jedis 2.9.0 org.apache.commons commons-pool2 2.4.2 org.springframework.data spring-data-redis 1.6.0.RELEASE
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/71831.html
摘要:安裝相比之下,由于一開(kāi)始就是設(shè)計(jì)在上使用的,所以安裝就比較簡(jiǎn)單了。對(duì)于其他系統(tǒng),使用它們的包管理器安裝即可。安裝完成之后,使用下面的命令啟動(dòng)。這時(shí)候需要使用命令進(jìn)行認(rèn)證,才能繼續(xù)操作。 Redis是一個(gè)高性能的內(nèi)存數(shù)據(jù)庫(kù),它體積輕巧性能又高,在企業(yè)中被廣泛使用。 安裝Redis Windows安裝 Redis是為L(zhǎng)inux系統(tǒng)設(shè)計(jì)的,但是也有團(tuán)隊(duì)為Windows做了移植。我們可以到這里...
摘要:時(shí)間年月日星期二說(shuō)明基于,開(kāi)始本教程前,請(qǐng)確保您的系統(tǒng)已安裝。為了保證集群的高可用,下面開(kāi)始配置哨兵模式。 時(shí)間:2017年07月11日星期二 說(shuō)明:基于Ubuntu16.04-64bit,開(kāi)始本教程前,請(qǐng)確保您的Linux系統(tǒng)已安裝Docker。 步驟一:Redis鏡像安裝 1、下載Redis鏡像 鏡像中心 推薦使用網(wǎng)易蜂巢的鏡像中心 地址:https://c.163.com/hub...
閱讀 2626·2021-11-22 12:05
閱讀 3507·2021-10-14 09:42
閱讀 1741·2021-07-28 00:15
閱讀 2042·2019-08-30 11:08
閱讀 1547·2019-08-29 17:31
閱讀 978·2019-08-29 16:42
閱讀 2394·2019-08-26 11:55
閱讀 2165·2019-08-26 11:49