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