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