redis 获取所有key_Redis笔记
歡迎關注我的個人微信公眾號,不定期AI論文解讀與開發技術分享
NoSQL
NoSQL(Not Only SQL),即不僅僅是SQL,是一項全新的數據庫概念,泛指非關系型數據庫。
為什么需要NoSQL
NoSQL數據庫的四大分類如下:
- 鍵值(key-value)存儲數據庫: Redis
- 列存儲數據庫:HBase
- 文檔型數據庫:mongoDB
- 圖形數據庫:Neo4J
NoSQL的特點:
Redis
Redis是用C語言開發的一個開源的高性能鍵值對數據庫,它通過提供多種鍵值數據類型來適應不同場景下的存儲需求,目前為止Redis支持的鍵值數據類型如下: 1. 字符串類型;2. 散列類型;3. 列表類型;4. 集合類型;5. 有序集合類型;
Redis的安裝
- Redis在Linux上的安裝
- 安裝redis編譯的c環境,yum install gcc-c++;
- 將redis-2.6.16.tar.gz上傳到Linux系統中;
- 解壓到/usr/local下 tar -xvf redis-2.6.16.tar.gz -C /usr/local;
- 進入redis-2.6.16目錄 使用make命令編譯redis;
- 在redis-2.6.16目錄中 使用make PREFIX=/usr/local/redis install命令安裝redis到/usr/local/redis中;
- 拷貝redis-2.6.16中的redis.conf到安裝目錄redis中;
- 啟動redis 在bin下執行命令redis-server redis.conf;
- 如需遠程連接redis,需配置redis端口6379在linux防火墻中開發;
/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT /etc/rc.d/init.d/iptables save
解決方案:可以通過修改配置文件 配置redis后臺啟動,即服務器啟動了但不會創建控制臺窗口將redis.conf文件中的daemonize從false修改成true表示后臺啟動:
修改redis.conf配置文件,daemonize yes以后端模式啟動:
vim /usr/local/redis/redis.conf daemonize yes啟動時,指定配置文件:
cd /usr/local/redis ./bin/redis-server ./redis.confRedis停止 * 強制結束程序,強行終止Redis進程可能會導致Redis持久化數據丟失
kill -9 進程號 # pid 需要通過“ps aux | grep -i redis” 進行查詢- 正確停止Redis的方式應該是向Redis發送SHUTDOWN命令,方法為:
Jedis入門
Java連接Redis
如果運行上面的代碼,拋出如下異常
redis.clients.jedis.exceptions.JedisConnectionException: java.net.ScoketTimeoutException: connect time out必須設置防火墻
vim /etc/sysconfig/iptablesservice iptables restartRedis數據結構
- redis是一種高級的key-value的存儲系統,其中value支持五種數據類型
- 字符串(String);
- 哈希(hash);
- 字符串列表(list);
- 字符串集合(set);
- 有序字符串集合(sorted set);
存取String
- set key value: 設定key持有指定的字符串value,如果該key存在則進行覆蓋操作,總是返回OK;
- get key: 獲取key的value。如果與該key關聯的valye不是String類型,redis將返回錯誤信息,因為get命令只能用于獲取String value;如果該key不存在,返回(nil)。
- getset key value: 先獲取該key值,然后再設置該key的值。
- del key: 刪除指定的key
- incr key: 將指定的key的value原子性的遞增1,如果該key不存在,其初始值為0,在incr之后,其數值為1.如果value的值不能轉成整形,如hello,該操作將執行失敗并返回錯誤信息。
- decr key: 與incr key相反。
- incrby key increment: 將指定的key的value原子性增加increment,情況與incr類似;
- decrby key decrement: 與incrby類似
- append key value: 拼湊字符串。如果該key存在,則在原有的value后追加該值;如果該key不存在,則重新創建一個key/value。
存儲hash
Redis中的Hash類型可以看成具有String Field和String Value的map容器,所以該類型非常適合與存儲值對象的信息。
- hset key field value: 為指定的key設定field/value對(鍵值對)。
- hmset key field value [field2 value2 ...]: 設置key中的多個field/value。
- hget key field: 返回指定的key中的field的值。
- hmget key fields: 獲取key中多個field的值。
- hgetall key: 獲取key中的所有field-value。
- hdel key field [field ...]: 可以刪除一個或多個字段,返回值是被刪除的字段的個數。
- del key: 刪除整個list。
- hincrby key field increment: 設置key中field的值增加increment。
- hexists key field: 判斷指定的key中的field是否存在。
- hlen key: 獲取key所包含的field的數量。
- hkeys key: 獲取所有的key
- hvals key: 獲取所有的value
存儲list
在Redis中,List類型是按照插入順序排序的字符串鏈表。和數據結構中的普通鏈表一樣,我們可以在其頭部(left)和尾部(right)添加新的元素。在插入時,如果該鍵并不存在,Redis將為該鍵創建一個新的鏈表。與此相反,如果鏈表中所有的元素均被移除,那么該鍵也將會被從數據庫中刪除。
- lpush key values [value1, value2 ...]: 指定的key所關聯的list的頭部插入所有的values,如果該key不存在,該命令在插入的之前創建一個與該key關聯的空鏈表,之后再向該鏈表的頭部插入數據。插入成功,返回元素的個數。
- rpush key values [value1、value2 ...]: 在該list的尾部添加元素
- lrange key start end: 獲取鏈表中從start到end的元素的值。
- lpop key: 返回并彈出指定的key關聯的鏈表中的第一個元素,即頭部元素。如果該key不存在,返回nil;若key存在,則返回鏈表的頭部元素。
- rpop key: 從尾部彈出元素。
- llen key: 獲取列表中元素的個數
- lpushx key value: 僅當參數中指定的key存在時,向關聯的list的頭部插入value。如果不存在將不進行插入。
- rpushx key value: 在該list的尾部添加元素
- lrem key count value: 刪除count個值為value的元素,如果count大于0,從頭向尾遍歷并刪除count個值為value的元素,如果count小于0,則從尾向頭遍歷并刪除。如果count等于0,刪除鏈表中所有等于value的元素。
- lset key index value: 設置鏈表中的index的腳標的元素值,0代表鏈表的頭元素,-1代表鏈表的尾元素。操作鏈表的腳標不存在則拋出異常。
- linsert key before|after pivot value: 在pivot元素前或者后插入value這個元素。
- rpoplpush resource destionation: 將鏈表中的尾部元素彈出并添加到頭部。
存儲set
Set集合中不允許出現重復的元素。
- sadd key values[value1 value2 ...]: 向set中添加數據,如果該key的值已有則不會重復添加。
- srem key members[member1 member2 ...]: 刪除set中指定的成員。
- smembers key: 獲取set中的所有的成員。
- sismember key member: 判斷參數中指定的成員是否在該set中,1表示存在,0表示不存在或者改key本身就不存在。
- sdiff key1 key2..: 返回key1與key2中相差的成員,而且與key的順序有關。即返回差集。
- sinter key1 key2 key3...: 返回交集
- sunion key1 key2 key3...: 返回并集
- scard key: 獲取set中成員的數量
- srandmember key: 隨機返回set中的一個成員
- sdiffstore destination key1 key2 ...: 將key1 key2 相差的成員存儲在destination上。
- sinterstore destination key1 key2 ...: 將key1 key2相交的成員存儲在destination上。
- sunionstore destination key [key...]: 將返回的并集存儲在destination上。
存儲sortedset
sorted-set與set的主要差別在于Sorted-Set中的每一個成員都會有一個分數(score)與之相關聯,用于排序。
- zadd key score member score2 member2 ...: 將所有成員以及該成員的分數存放到sorted-set中。如果該元素已經存在則會用新的分數替換原始的分數,返回值為新加入到集合中的元素的個數,不包含之前已經存在的元素。
- zscore key member: 返回指定成員的分數
- zcard key: 獲取集合中的成員數量
- zrem key member[member...]: 移除集合中指定的成員,可以指定多個成員
- zrange key start end [withscores]: 獲取集合中腳標為start-end的成員,[withscores]參數表明返回的成員包含其分數。
- zrevrange key start stop [withscores]: 照元素分數從大到小的順序返回索引從start到stop之間的所有元素。
- zremrangebyrank key start stop: 按照排名范圍刪除元素。
- zremrangebyscore key min max: 按照分數范圍刪除元素。
- zrangebyscore key min max [withscores] [limit offset count]: 返回分數在[min, max]的成員并按照分數從低到高排序。[limit offset count]:offset,表明從腳標為offset的元素開始并返回count個成員。
- zincrby key increment member: 設置指定成員的增加的分數。
- zcount key min max: 獲取分數在[min, max]之間的成員數量。
- zrank key member: 返回成員在集合中的排名(從小到大)。
- zrevrank key member: 返回成員在集合中的排名(從大到小)。
Redis特性
- 多數據庫
一個Redis實例可以包括多個數據庫,客戶端可以指定連接某個redis實例的哪個數據庫。
一個Redis實例最多可以提供16個數據庫,下標從0到15,客戶端默認連接第0號數據庫,也可以通過select選擇連接到哪個數據庫。
move newkey 1: 將當前庫的key移植到1號庫中;
ping,測試連接是否存活;
echo,在命令行答應一些內容;
select,選擇數據庫;
quit,退出連接;
dbsize,返回當前數據庫中key的數目;
info,獲取服務器的信息和統計;
flushdb,刪除當前選擇數據庫中的所有的key;
flushall,刪除所有數據庫中的所有key;
消息訂閱與發布
subscribe channel: 訂閱頻道
psubscribe channel*: 批量訂閱頻道
publish channel content: 在指定的頻道中發布消息
redis事務
redis事務的特征:
在事務中的所有命令都將會被串行化的順序執行,事務執行期間,Redis不會再為其他客戶端的請求提供任何服務,從而保證了事務中的所有命令被原子的執行; 和關系型數據庫中的事務相比,在Redis事務中如果有某一條命令執行失敗,其后的命令仍會被繼續執行;
可以通過MULTI命令開啟一個事務,有關系型數據庫開發經驗的人可以將其理解為“BEGIN TRANSACTION”語句,在該語句執行的命令都將被視為事務之內的操作,最后我們可以通過執行EXEC/DISCARD命令來提交/回滾該事務內的所有操作。 在事務開啟之前,如果客戶端與服務器之間出現通訊故障并導致網絡斷開,其后所有待執行的語句都將不會被服務器執行。然而如果網絡中斷事件是發生在客戶端執行EXEC之后,那么該事務中所有命令都會被服務器執行。 當使用Append-Only模式時,Redis會通常調用系統函數write將該事務內的所有寫操作在本次調用中全部寫入磁盤。如果在寫入的過程中出現系統崩潰,如電源故障導致宕機,那么此時也許只有部分數據被寫入到磁盤,而另外一部分的數據卻已經丟失。Redis服務器會在重新啟動時執行一系列必要的一致性檢測,一旦發現類似的問題,就會立即退出并給出響應的錯誤提示。此時,我們只要充分利用Redis工具包中提供的redis-check-aof工具,就可以定位到數據不一致的錯誤,并將已經寫入的部分數據進行回滾。修復之后我們就可以再次重新啟動Redis。
Redis持久化
Redis的高性能是由于其將所有的數據都存儲在內存中,為了使Redis在重啟之后仍能保證數據不丟失,需要將數據從內存中同步到硬盤中,這一過程就叫做持久化。
Redis支持兩種方式的持久化:
- RDB的方式
該機制是指在指定的時間間隔內將內存中的數據集快照寫入磁盤中。
- AOF的方式
該機制將以日志的形式記錄服務器所處理的每一個寫操作,在Redis服務器啟動之初會讀取該文件來重新構建數據庫,以保證啟動后的數據庫中的數據是完整的。
- 無持久化
我們可以通過配置的方式禁用Redis服務器的持久化功能,這樣我們就可以將Redis視為一個功能加強版的memcached。
- Redis可以同時使用RDB和AOF
總結
以上是生活随笔為你收集整理的redis 获取所有key_Redis笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我国的洲际导弹最远的射程有多远?
- 下一篇: 拥有“德国佬”昵称的美军头盔?