redis歸納

首先需要介紹一下nosql數據庫:

1沒有聲明性的查詢語言
2沒有預定義的模式
3最終一致性 而非ACID屬性
4非結構化和不可預知的數據
5CAP定理  三選二 不可能全滿足
6高性能,高可用性和可伸縮性

**

key的基本操作

**

redis默認有16個數據庫:
			CONFIG  GET   databases;		獲取某個配置項的值
			DBSIZE	獲取當前數據庫裏面有多少個數據
			select 進行切換數據庫

	●KEYS  匹配表達式   可以把相匹配的key查找出來  *表示很多字符  ?表示一個任意字符
	●TYPE KEY		返回某一個鍵對應的值的類型
	●MOVE KEY DB   把鍵值對移到某個數據庫中
	●DEL  多個KEY  	根據KEY進行刪除 返回成功刪除的個數
	●EXISTS  多個KEY		返回存在的KEY的數量
	●RANDOMKEY			在現有的KEY中隨機返回一個
	●RENAME KEY NEWKEY		重命名,會導致覆蓋
	●RENAMENX KEY NEWKEY		重命名,不允許覆蓋
	●TIME			返回當前UNIX時間戳
	●TTL KEY		查看存活時間 (秒  -1就是永久)
	●PTTL KEY		查看存活時間 (毫秒)
	●EXPIRE KEY SECONDS		設置過期時間
	●EXPIREAT KEY TIMESTAMP		設置一個KEY在TIMESTAMP指定的時間過期
	●PEXPIRE KEY MILLISECONDS		以毫秒爲單位指定過期時間
	●PERSIST KEY			設置爲永久的key
		 

**

value的操作

**

首先知道redis的value有五大數據類型    
(1)string類型
(2)list類型
(3)hash類型
(4)set類型
(5)zest類型


(1)string類型		是二進制安全的 可以包含任何數據
	●SET KEY VALUE [EX SECONDS] [PX MILLISECONDS] [NX|XX]
	 								存活秒數 				毫秒數						key不存在才行|key存在才行
	●GET KEY		獲取String類型的value 
	●APPEND KEY VALUE      在key對應的value後面追加值,返回值是追加後字符串長度
	●STRLEN KEY        字符串長度
	●INCR KEY			+1
	●DECR KEY			-1
	●INCRBY KEY INCREMENT		原值+INCREMENT
	●DECRBY KEY DECREMENT		原值-DECREMENT
	●GETRANGE KEY START END		從字符串中取指定的一段
	●SETRANGE KEY OFFSET VALUE		替換字符串中的一段值
	●SETEX KEY SECONDS VALUE		跟ex參數一樣
	●SETNX KEY VALUE 	跟nx參數一樣
	●MSET KEY VALUE [KEY VALUE ...]	一次性設置多個鍵值對
	●MGET KEY [KEY ...]		一次性指定多個KEY,返回它們對應的值,沒有值的返回nil
	●MSETNX KEY VALUE [KEY VALUE ...]	一次性新建多個值
	●GETSET KEY VALUE		設置新值,同時將舊值返回

(2)list類型   是兩端都可以壓入彈出的結構		所以頭尾效率高,中間效率低
	●LPUSH key value [value ...]
	●RPUSH key value [value ...]
	●LRANGE key start stop
		根據list集合的索引打印元素數據    0  -1可以打印全部
		正着數:0 1 2 3 4 5 。。。
		倒着數:。。。-5 -4 -3 -2 -1 
	●LLEN key		返回list的總長度
	●LPOP key	 	彈出左邊的元素並且從list中刪除
	●RPOP key		彈出右邊的元素並且從list中刪除
	●RPOPLPUSH source destination			從source中RPOP一個元素,LPUSH到destination中
	●LINDEX key index		根據索引從集合中取值
	●LINSERT key BEFORE|AFTER pivot value		在list中插入value 位置放在pivot的前面或者後面
	●LPUSHX key value	只能針對存在的list執行LPUSH
	●LREM key count value		刪除左邊count個元素
	●LSET key index value		替換元素
	●LTRIM key start stop		僅保留指定區間的數據,兩邊的數據被刪除

(3)set類型  (就相當於在一個集合中放進去值 沒有順序)
    ●SADD key member [member ...]	放進一個鍵值對
	●SMEMBERS key		查看value
	●SCARD key	返回集合中元素的數量  
	●SISMEMBER key member	檢查當前指定member是否是集合中的元素 是返回1 不是返回0
	●SREM key member [member ...]    根據key刪除集合中的元素
	●SINTER key [key ...]		返回兩個集合中交集的部分
	●SINTERSTORE destination key [key ...]
		取交集後存入destination
	●SDIFF key [key ...]	返回集合1減去集合2的的部分
	●SUNION key [key ...]			返回並集
	●SDIFFSTORE destination key [key ...]			保存到destination中
	●SUNIONSTORE destination key [key ...]		保存到destination中
	●SMOVE source destination member			把member從source移動到destination
	●SPOP key [count]			從集合中隨機彈出count個數量的元素,count不指定就彈出1個	彈出完就沒了
	●SRANDMEMBER key [count]		從集合中隨機返回count個數量的元素,count不指定就返回1個		彈出的話原本元素還在裏面
	●SSCAN key cursor [MATCH pattern] [COUNT count]			基於遊標的遍歷  0表示結束

(4)HASH			鍵值對  值又是鍵值對
	●HSET key field value		設置鍵值對
	●HGETALL key			返回全部
	●HGET key field			返回一個
	●HLEN key				返回長度	
	●HKEYS key			返回hash中的所有鍵
	●HVALS key			返回hash中的所有值
	●HEXISTS key field		判斷hash中的鍵是否存在
	●HDEL key field [field ...]	刪除對應的鍵值對
	●HINCRBY key field increment		加上
	●HMGET key field [field ...]			一次性獲取多個值
	●HMSET key field value [field value ...]		一次性設置多個值
	●HSETNX key field value		要求hash中的鍵是新建的
	●HSCAN key cursor [MATCH pattern] [COUNT count]			基於遊標對hash進行遍歷

(5)zset     鍵值對 值是數字    最後按照數字進行排隊
	●ZADD key [NX|XX] [CH] [INCR] score member [score member ...]		增加鍵值對
	●ZRANGE key start stop [WITHSCORES]			返回這個區間的值
	●ZCARD key				返回集合中元素的數量
	●ZCOUNT key min max					查找在min,max之間的元素
	●ZSCORE key member					獲取對應的數字
	●ZINCRBY key increment member		加一個數
	●ZLEXCOUNT key min max			
	●ZRANGEBYLEX key min max [LIMIT offset count]
		按照字母順序在區間內返回member 所以填的是字母
		min和max使用“[a”表示閉區間,使用“(a”表示開區間
		-表示負無窮
		+表示正無窮
	●ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
		在分數的指定區間內返回數據
	●ZRANK key member			返回分數對應的排名
	●ZREM key member [member ...]
	●ZREMRANGEBYLEX key min max
	●ZREMRANGEBYRANK key start stop
	●ZREMRANGEBYSCORE key min max
	●ZREVRANGE key start stop [WITHSCORES]
	●ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
	●ZREVRANK key member
	●ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
	●ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
		把指定集合的member取交集,分數會相加
	●ZSCAN key cursor [MATCH pattern] [COUNT count]

**

redis的配置信息介紹

根據多個配置文件啓動就可以啓動集羣
**

redis的配置文件:
	includes :可以用include包含其他的配置文件  用在你將配置文件分成多個的情況下
	bind 綁定的ip纔可以訪問redis			一般註釋掉 然後配置密碼
	port 監聽的端口號
	timeout  超時時間    0表示沒生效
	daemonize yes   後臺運行
	pidfile	存放進程id  這個值會經常性改變的  跟端口號不一樣
	loglevel    日誌級別
	logfile 指定日誌文件的地址  空字符串表示標準輸出中打印(直接在前臺打印 但是如果用的是daemonize 日誌會被送到 /dev/null)
	databases 16   表示有16個數據庫
	SNAPSHOTTING   rdb持久化方式的配置地方
	replication 跟主從複製有關的配置
	Security 跟安全有關
	requirepass 設置密碼
	maxclients 最大客戶端的配置
	APPEND ONLY MODE          aof處久化方式的配置地方

**

redis的持久化

		及相關的配置

**

1 RDB		每隔一定的時間把內存的數據保存到硬盤上
				save   A秒   B次			A秒內有B次修改就保存			
				不可以保證數據的絕對安全,而且通常不會在redis中只有一份 mysql中也可以保存一份並且 
				如果redis做二級緩存(經常查詢 很少修改  ,不是特別重要允許出現偶爾的併發問題,
				不會被其他應用程序修改不和其他應用程序共享的),重要 完全不能丟失的數據不會放在redis中
	(1)默認啓動,想要禁用RDB的話就刪除save
	(2)持久化文件名 253 行dbfilename      配置主從集羣的時候就需要改這個名字  
				持久化文件保存路徑 263 dir ./   表示的是你從哪個路徑啓動的redis  就會保存在哪裏 所以一般指定一個絕對路徑 /usr/local/redis
		(3)BGSAVE  stop-writes-on-bgsave-error  yes/no	no表示後臺寫入錯誤也不處理不在乎數據不一致
	(4)數據壓縮 rdbcompression yes 對於存儲到磁盤中的快照    可以設置是否進行壓縮存儲 	是硬盤資源和cpu資源之間的權衡
	(5)rdbchecksum   yes  存儲快照後 還可以讓redis使用CRC64算法來進行數據校驗  會消耗10%的性能消耗
	
2 AOF		不保存數據本身  保存生成數據的命令				rdb是二進制文件不可讀   AOF還有可讀性
	(1)默認關閉 appendonly yes  改成yes
	(2)核心策略:
				701 appendfsync always   每條命令都保存
				702 appendfsync everysec  每秒執行一次保存(默認)
				703 appendfsync	no		不保存
	(3)AOF重寫:
				文件增加到一定的大小的時候 可以進行AOF重寫 把好幾條命令合成一條命令
				auto-aof-rewrite-percentage 100 表示文件翻了一倍的時候進行重寫
				auto-aof-rewrite-min-size 64mb  表示超過了64mb進行重寫
	(4)AOF持久化文件的修復
				/usr/local/bin/redis-check-aof --fix appendonly.aof 把壞的切掉了  
				/usr/local/bin/redis-check-rdb --fix	rdb也可以用類似命令

**

redis事務相關命令

**

MULTI 
	好幾個命令
EXEC
這幾個命令先不執行  EXEC的時候開始一起執行  其中一個錯誤的話就會全部都不執行但是入隊的時候沒有檢測到錯誤是不會回滾的

WATCH之後才進入事務的話:在EXEC之前如果有別人操作了 那麼這一串事務作廢

**

樂觀鎖和悲觀鎖

**

樂觀鎖:不鎖定數據 以達到更好的性能 萬一發生了碰撞 放棄自己的操作 不會導致數據的不一致
				redis

悲觀鎖:操作錢鎖定數據 避免數據的不一致

**

redis發佈訂閱功能

**

SUBSCRIBE  訂閱頻道
PUBLISH 發佈

**

主從複製集羣

**

配置多個配置文件  分別啓動	INFO replication查看主從服務器狀態

(1)默認都認爲自己是master
(2)SLAVEOF 設置爲另外一個master的奴隸		SLAVE no one 變成master
(3)主機可以寫 從機自動同步 但是從機只能讀   因爲有配置slave-read-only yes
(4)從機shutdown後重新登陸會變成master	只有SLAVEOF後才能獲得這期間的數據
(5)主機shutdown後從機還是slave 主機登陸後還是master

**哨兵模式**
一般哨兵會配置多個 防止判斷失誤
		主觀下線:只有一個哨兵認爲下線了
		客觀下線:達到配置的個數的哨兵下線了就可以
(1)slave下線後會主動變成slave
(2)主機下線後會在從機中選取主機 主機回來後就是slave

**

jedis

註釋bind 設置密碼requirepass
**

jedis直接連接:
		new Jedis();
		jedis.auth();
		jedis.ping();
		jedis.close();
連接池:
		new GenericObjectPoolConfig()  new Jedispool()  getResource()	  都得關閉
發佈了66 篇原創文章 · 獲贊 44 · 訪問量 7325
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章