摘要:時間年月日星期日說明本文部分內(nèi)容均來自慕課網(wǎng)。當對應的鏈表存在時,從左側插入數(shù)據(jù)。從右側插入數(shù)據(jù)。當系統(tǒng)在定時持久化之前出現(xiàn)宕機,還未來得及往硬盤寫入數(shù)據(jù),那數(shù)據(jù)就丟失了。當數(shù)據(jù)集過大時,可能會導致服務器停止幾百毫秒甚至是秒鐘。
時間:2017年05月21日星期日
說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com
教學示例源碼:無
個人學習源碼:https://github.com/zccodere/s...
課程介紹
NoSQL的概述 Redis的概述 Redis的安裝和使用 Jedis的入門 Redis的數(shù)據(jù)類型 Keys的通用操作 Redis的特性 Redis的持久化第二章:NoSQL概述 2-1 NoSQL的概述
什么是NoSQL
NoSQL = Not Only SQL 非關系型數(shù)據(jù)庫
為什么需要NoSQL
High performance 高并發(fā)讀寫 Huge Storage 海量數(shù)據(jù)的高效率存儲和訪問 High Scalability && High Availability 高可擴展性和高可用性
主流的NoSQL產(chǎn)品
NoSQL數(shù)據(jù)庫的四大分類
鍵值對(Key-Value)存儲:Redis 優(yōu):快速查詢 劣:存儲的數(shù)據(jù)缺少結構化 列存儲:HBase 優(yōu):快速查詢、擴展性強 劣:功能相對局限 文檔數(shù)據(jù)庫:MongoDB 優(yōu):數(shù)據(jù)結構要求不是很嚴格 劣:查詢性能不高、缺少統(tǒng)一的查詢語法 圖形數(shù)據(jù)庫:InfoGrid 優(yōu):利用圖結構相關算法 劣:需要對整個圖做計算才能得出結果、不容易做分布式集群方案
四類NoSQL數(shù)據(jù)庫比較
NoSQL的特點
易擴展 靈活的數(shù)據(jù)模型 大數(shù)據(jù)量、高性能 高可用第三章:Redis概述 3-1 Redis的概述
Redis高性能鍵值對數(shù)據(jù)庫,支持的鍵值數(shù)據(jù)類型:
字符串類型 列表類型 有序集合類型 散列類型 集合類型
Redis的應用場景
緩存 任務隊列 網(wǎng)站訪問統(tǒng)計 數(shù)據(jù)過期處理 應用排行榜 分布式集群架構中的session分離第四章:Redis的安裝和使用 4-1 Redis的安裝
Windows安裝Redis搭建環(huán)境
虛擬機:VMware 10.0.2 Linux系統(tǒng):CentOS-6.5 SSH客戶端:SecureCRT 7.3 , SecureFX 7.3
推薦使用在Linux系統(tǒng)下docker安裝Redis,需先安裝docker
下載鏡像 docker pull hub.c.163.com/library/redis:latest 運行鏡像 docker run --name myredis -d -p 6379:6379 hub.c.163.com/library/redis 進入容器 docker exec -it CONTAINERID /bin/bash 連接Redis redis-cli 172.17.0.1:6379 或 redis-cli 發(fā)送命令 發(fā)送ping,回復PONG即代表Redis安裝成功第五章:Jedis的入門 5-1 Jedis入門
Jedis介紹
Jedis是Redis官方首選的Java客戶端開發(fā)包 https://github.com/xetorthio/jedis
測試項目環(huán)境搭建
使用gradle作為構建工具。詳情見源碼。
代碼演示:
package com.myimooc.jedis; import org.junit.Test; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; /** * Jedis的測試 * Created by ChangComputer on 2017/5/21. */ public class JedisDemo1 { /** * 單實例的測試 */ @Test public void demo1(){ // 1.設置IP地址和端口 Jedis jedis = new Jedis("192.168.77.128",6379); // 2.保存數(shù)據(jù) jedis.set("name","myimooc"); // 3.獲取數(shù)據(jù) String value = jedis.get("name"); System.out.println(value); // 4.釋放資源 jedis.close(); } /** * 使用連接池方式連接 */ @Test public void demo2(){ // 獲得連接池的配置對象 JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); // 設置最大連接數(shù) jedisPoolConfig.setMaxTotal(30); // 設置最大空閑連接數(shù) jedisPoolConfig.setMaxIdle(10); // 獲得連接池 JedisPool jedisPool = new JedisPool(jedisPoolConfig,"192.168.77.128",6379); // 通過連接池獲得連接 Jedis jedis = jedisPool.getResource(); // 設置數(shù)據(jù) jedis.set("name","張三"); // 獲取數(shù)據(jù) String value = jedis.get("name"); System.out.println(value); // 釋放資源 jedis.close(); // 釋放連接池 jedisPool.close(); } }第六章:Redis的數(shù)據(jù)結構 6-1 字符串
五種數(shù)據(jù)類型:
字符串(String) 哈希(hash) 字符串列表(list) 字符串集合(set) 有序字符串集合(sorted set) 字符串集合(set)
Key定義的注意點:
不要過長:最好不要超過1024個字節(jié) 不要過短:太短不利于閱讀,如a 統(tǒng)一的命令規(guī)范
存儲String
二進制安全的,存入和獲取的數(shù)據(jù)相同 Value最多可以容納的數(shù)據(jù)長度是512M
存儲String常用命令
賦值:set key value 取值:get key 獲取值:getset key value 刪除:del key 數(shù)值增減:incr key decr key 擴展命令:incrby key number decrby key number 追加命令:append key str6-2 哈希
存儲Hash
String Key和String Value的map容器 每一個Hash可以存儲4294967295個鍵值對
存儲Hash常用命令:
賦值:hset name key value hmset name key value key value 取值:hget name key hmget name key key hgetall name 刪除:hdel name key del name 增加數(shù)字:hincrby name key number 自學命令:hexists name key hlen name hkeys name hvals name6-3 list
存儲list
ArrayList使用數(shù)組方式 LinkedList使用雙向鏈接方式 雙向鏈表中增加數(shù)據(jù) 雙向鏈表中刪除數(shù)據(jù)
存儲list常用命令
兩端添加
lpush key value1 value2 value3 將value1和value2和value3放入為key的鏈表,當key不存在時,會自動創(chuàng)建該鏈表。 當key對應的鏈表存在時,從左側插入數(shù)據(jù)。 rpush key value1 value2 value 3 從右側插入數(shù)據(jù)。
查看列表
lrange key start end 查看為key的鏈表,從指定start開始,到end結束
兩端彈出
lpop key 左邊彈出,返回并彈出指定的key所關聯(lián)鏈表的頭部(第一個)元素 rpop key 右邊彈出,返回并彈出指定的key所關聯(lián)鏈表的尾部(最后一個)元素
獲取列表元素個數(shù)
llen key 返回指定key所關聯(lián)鏈表的長度,當key不存在時,返回0
擴展命令
lpushx key value 僅當指定的key關聯(lián)鏈表存在時,在頭部插入value rpushx key value 僅當指定的key關聯(lián)鏈表存在時,在尾部插入value lrem key count value 在指定的key關聯(lián)的鏈表中,刪除count個value 當count小于0時,從尾到頭刪除 當count等于0時,刪除所有 當count大于0時,從頭到尾刪除 lset key index value 在指定的key關聯(lián)的鏈表中,修改下標為index的值為value linsert key before value newvalue 在指定的key關聯(lián)的鏈表中,在value之前插入newvalue linsert key after value newvalue 在指定的key關聯(lián)的鏈表中,在value之后插入newvalue rpoplpush key1 key2 將key1里面的第一個值彈出壓入key2頭部
rpoplpush使用場景
6-4 set存儲Set
和List類型不同是,Set集合中不允許出現(xiàn)重復的元素 Set可包含的最大元素數(shù)量是4294967295
添加元素
sadd key value1 value2 value3 將value1和value2和value3添加到key的set集合
刪除元素
srem key value1 value2 刪除為key的set集合里面的value1和value2
獲得集合中的元素
smembers key 獲取為key的set集合中的元素 sismember key value1 判斷value1是否存在于key的set集合中。1、存在;0、不存在
集合中的差集運算
sdiff key1 key2 獲取在key1中存在,在key2中不存在的元素。跟key的順序相關
集合中的交集運算
sinter key1 key2 獲取在key1和key2中都存在的元素
集合中的并集運算
sunion key1 key2 獲取key1中和key2中的所有元素,元素重復時,會去掉一個重復的元素
擴展命令
scard key 獲得為key的set集合中成員的數(shù)量 srandmember key 隨機返回為key的set集合中的某個成員 sdiffstore newKey key1 key2 將兩個集合key1和key2差集的元素存儲到另一個集合newKey中 sinterstore newKey key1 key2 將兩個集合key1和key2交集的元素存儲到另一個集合newKey中 sunionstore newKey key1 key2 將兩個集合key1和key2并集的元素存儲到另一個集合newKey中
使用場景
跟蹤一些具有唯一性的數(shù)據(jù)。比如訪問某個博客的唯一IP地址的信息,僅需要在每次訪問該博客的時候,將訪問者的IP存入redis當中。充分利用set類型的服務器端聚合操作的方便、高效的特性,可以用于維護數(shù)據(jù)對象之間的關聯(lián)關系。比如:所有購買某一電子設備的客戶的ID,被存儲到一個指定的set當中,而購買另外一種電子產(chǎn)品客戶的ID,被存儲到另外一個set當中,如果此時想獲得有哪些客戶同時購買了這兩種商品,那么這時候,可以使用它們的交集操作即可。6-5 sorted-set
Sorted-Set概述
Sorted-Sets和Sets類型極為相似,它們都是字符串的集合,都不允許重復的成員出現(xiàn)在一個Set中。它們之間的主要差別是Sorted-Sets中的每一個成員都會有一個分數(shù)(score)與之關聯(lián),Redis正是通過分數(shù)來為集合中的成員進行從小到大的排序。然而需要額外指出的是,盡管Sorted-Sets中的成員必須是唯一的,但是分數(shù)(score)卻是可以重復的。在Sorted-Set中添加、刪除或更新一個成員都是非常快速的操作,其時間復雜度為集合中成員數(shù)量的對數(shù)。由于Sorted-Sets中的成員在集合中的位置是有序的,因此,即便是訪問位于集合中部的成員也仍然是非常高效的。事實上,Redis所具有的這一特征在很多其它類型的數(shù)據(jù)庫中是很難實現(xiàn)的,換句話說,在該點上要想達到和Redis同樣的高效,在其它數(shù)據(jù)庫中進行建模是非常困難的。
Sorted-Set常用命令
添加元素
zadd key score1 value1 score2 value2 score3 value3 添加三個元素到名為key的Sorted-Set集合中。每一個元素都有一個分數(shù)score和值value
獲得元素
zscore key value 獲得名為key的Sorted-Set集合中value對應的分數(shù)score zcard key 獲得名為key的Sorted-Set集合中成員的數(shù)量
刪除元素
zrem key value1 value2 刪除名為key的Sorted-Set集合中的值value1和value2元素
范圍查詢
zrange key start end 查找在start和end之間的元素,默認由分數(shù)從小到大排序 zrange key start end withscores 查找在start和end之間的元素,并顯示元素的分數(shù) zrevrange key start end withscores 查找在start和end之間的元素,并顯示元素的分數(shù),分數(shù)從大到小排序 zremrangebyrank key start end 按照指定范圍刪除元素 zremrangebyscore key startscore endscore 按照指定分數(shù)的范圍刪除元素
擴展命令
zrangebyscore key startscore endscore withscore limit startindex count 返回分數(shù)在指定范圍之間的元素,分數(shù)從小到大排序,從下標為startindex開始,顯示count個 zincrby key addscore value 給指定value元素的分數(shù)score增加addscore分 zcount key startscore endscore 獲取分數(shù)在某個范圍之間元素的個數(shù)
使用場景
在游戲的排名上。大型游戲的積分排行榜,每當玩家的分數(shù)發(fā)生變化時, 可以執(zhí)行zadd命令去更新玩家的分數(shù) 微博上的熱點話題 構建索引數(shù)據(jù)第七章:Redis的通用命令 7-1 Redis的Keys的通用操作
Keys通用操作
keys * 獲得所有的key keys my? 獲得所有以my開頭的key del key1 key2 key3 刪除key1和key2和key3 exists key 查看key是否存在,1、存在;0、不存在 rename oldkey newkey 重命名key,將oldkey重命名為newkey expire key 1000 設置過期時間。單位:秒 ttl key 查看key所剩超時的時間,如果key沒有設置過期時間,則返回-1 type key 獲得指定key的數(shù)據(jù)類型第八章:Redis的事務 8-1 Redis的特性
相關特性
多數(shù)據(jù)庫 Redis事務
多數(shù)據(jù)庫
一個Redis實例可以包含多個數(shù)據(jù)庫,客戶端可以指定連接哪個數(shù)據(jù)庫。一個Redis實例最多可以提供16個數(shù)據(jù)庫,下標從0到15,客戶端默認連接0號數(shù)據(jù)庫。通過select選擇連接到哪個數(shù)據(jù)庫。
多數(shù)據(jù)庫相關命令
select 1 連接到1號數(shù)據(jù)庫 move key 1 將key移動到1號數(shù)據(jù)庫
Redis事務相關命令
multi 開啟事務,后面執(zhí)行的命令會被存到命令隊列當中,直到執(zhí)行提交事務命令 exec 提交事務,命令隊列里面的命令會被原子化執(zhí)行 discard 回滾事務第九章:Redis的持久化 9-1 Redis的持久化的概述
持久化使用的方式
RDB持久化:默認支持,不需要進行配置。在指定的時間間隔內(nèi),將內(nèi)存中的數(shù)據(jù)及快照寫入到磁盤 AOC持久化:將以日志形式,記錄服務器所處理的每一個操作,在redis服務器啟動之初, 會讀取該文件,重新構建數(shù)據(jù)庫,保證啟動后數(shù)據(jù)的完整性 無持久化:通過配置來禁用redis服務器持久化的功能,這時候,redis就是一個緩存機制 同時使用RDB和AOF9-2 RDB方式持久化
RDB方式持久化優(yōu)勢
只包含一個文件,方便文件備份 對于災難恢復而言,RDB是一個非常不錯的選擇 性能最大化,由子進程完成持久化操作 相比AOF,大數(shù)據(jù)集啟動效率更高
RDB方式持久化缺點
如果想保證數(shù)據(jù)的高可用性,即最大限度的避免數(shù)據(jù)的丟失,RDB將不是一個很好的選擇。當系統(tǒng)在定時持久化之前出現(xiàn)宕機,還未來得及往硬盤寫入數(shù)據(jù),那數(shù)據(jù)就丟失了。當數(shù)據(jù)集過大時,可能會導致服務器停止幾百毫秒甚至是1秒鐘。
RDB方式持久化配置
redis.conf save 900 1:每900秒,至少有1個key發(fā)生變化,會持久化一次 save 300 10:每300秒,至少有10個key發(fā)生變化,會持久化一次 save 60 10000:每60秒,至少有10000個key發(fā)生變化,會持久化一次 dbfilename:配置持久化文件名稱 dir:配置持久化文件保存路徑,默認./配置文件當前路徑9-3 AOF方式持久化
AOF方式持久化優(yōu)勢
帶來更高的數(shù)據(jù)安全性,每秒同步或每修改同步或不同步 對于日志文件寫入操作采用追加模式,當寫入過程中出現(xiàn)宕機時,不會破壞已經(jīng)存在的內(nèi)容 如果日志過大,redis會自動啟動重寫機制 AOF包含格式清晰、易于理解的日志文件記錄所有的修改操作,通過該文件可完成數(shù)據(jù)重建
AOF方式持久化劣勢
對于相同數(shù)據(jù)集而言,AOF的文件要比RDB的文件大一些 根據(jù)同步策略的不同,運行效率要低于RDB
AOF方式持久化配置
redis.conf appendonly:配置AOF持久化是否啟用,默認no:不啟用 appendfilename:配置AOC持久化文件名稱 appendfsync always:每修改一次同步一次,默認不啟用,為了更安全,推薦使用 appendfsync everysec:每秒同步一次,默認啟用 appendfsync no:不同步,默認不啟用第十章:課程總結 10-1 Redis的課程總結
課程總結
介紹了什么是NoSQL 介紹了什么是Redis Redis的安裝以及簡單使用 Jedis的入門,重點掌握,需要通過程序去操作Redis 介紹了Redis常用的數(shù)據(jù)類型,主要:字符串和哈希 了解keys的通用操作 了解Redis的多數(shù)據(jù)庫和事務 了解Redis的持久化
最主要的還是:要會使用程序操作Redis
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/67102.html
時間:2017年10月16日星期一說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:課程簡介 1-1 課程介紹 本門課程的主要內(nèi)容 RxJava是什么 RxAndroid是什么 RxJava常用操作符(重點、難點) 怎樣在項目中使用RxJava和RxAndroid 如何學...
摘要:數(shù)據(jù)綁定入門學習總結時間年月日星期日說明本文部分內(nèi)容均來自慕課網(wǎng)。慕課網(wǎng)教學示例源碼個人學習源碼第一章課程介紹數(shù)據(jù)綁定入門概述數(shù)據(jù)綁定概念來自百度百科簡單綁定是將一個用戶界面元素控件的屬性綁定到一個類型對象實例上的某個屬性的方法。 《SpringMVC數(shù)據(jù)綁定入門》學習總結 時間:2017年2月19日星期日說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.co...
閱讀 3981·2021-11-16 11:44
閱讀 5238·2021-10-09 09:54
閱讀 2039·2019-08-30 15:44
閱讀 1695·2019-08-29 17:22
閱讀 2768·2019-08-29 14:11
閱讀 3403·2019-08-26 13:25
閱讀 2334·2019-08-26 11:55
閱讀 1604·2019-08-26 10:37