NoSQL(Not Only SQL)
NoSQL是一項全新的數(shù)據(jù)庫理念,泛指非關系型的數(shù)據(jù)庫潭千。
現(xiàn)在的互聯(lián)網(wǎng)項目谱姓,對數(shù)據(jù)庫高并發(fā)的讀寫,海量數(shù)據(jù)的高效率存儲和訪問刨晴,擴展要求高屉来。
網(wǎng)站也需要根據(jù)用戶個性化信息來實時刷新產生動態(tài)頁面和提供動態(tài)信息,傳統(tǒng)的方式反復操作關系型數(shù)據(jù)庫狈癞,性能消耗大茄靠,速度慢,因此出現(xiàn)了NoSQL蝶桶。
NoSQL:在大數(shù)據(jù)存取上具備關系型數(shù)據(jù)庫無法比擬的性能優(yōu)勢慨绳。
特點
1. 易擴展
數(shù)據(jù)之間無關系,導致易擴展真竖。
2. 大數(shù)據(jù)量脐雪,高性能
NoSQL數(shù)據(jù)庫具有非常高的讀寫性能,尤其在大量數(shù)據(jù)下恢共。
3. 靈活的數(shù)據(jù)模型
NoSQL無需事先為要存儲的數(shù)據(jù)建立字段战秋,隨時可以存儲自定義的數(shù)據(jù)格式。
4. 高可用
NoSQL在不太影響性能的情況讨韭,就可以方便的實現(xiàn)高可用的架構脂信。
NoSQL數(shù)據(jù)庫的四大分類
鍵值對存儲數(shù)據(jù)庫
列式存儲數(shù)據(jù)庫
文檔類型數(shù)據(jù)庫
圖形數(shù)據(jù)庫
NoSQL主流產品:Redis
Redis安裝配置
Redis是C語言開發(fā)的一個開源的高性能鍵值對數(shù)據(jù)庫,通過提供多種鍵值數(shù)據(jù)類型透硝,適應不同場景下的存儲需求吉嚣。
應用場景
緩存(數(shù)據(jù)查詢,短連接蹬铺,新聞內容尝哆,商品內容)
聊天在線好友列表
任務隊列(秒殺,搶購甜攀,12306)
應用排行榜
網(wǎng)站訪問統(tǒng)計
數(shù)據(jù)過期處理
主要還是應用于數(shù)據(jù)實時刷新
Linux CentOS 7安裝Redis
1. 安裝gcc環(huán)境
redis是用 C 開發(fā)的秋泄,安裝redis需要先將官網(wǎng)下載的源碼進行編譯琐馆,編譯依賴gcc環(huán)境。
yum install gcc-c++
2. 下載Redis壓縮包tar.gz
3. 將Redis上傳到 usr/local 下恒序,解壓縮
4. 進入redis文件內瘦麸,進行make編譯
cd redis-4.0.11.tar.gz
make
5. 編譯結束后,進行安裝
make PREFIX=/usr/local/redis install
啟動Redis
1. 前端啟動模式
直接啟動安裝好的redis/bin/redis-server
/usr/local/redis/bin/redis-server
默認開啟的是前端模式
端口:6379
2. 后端啟動
1. 從redis的源碼目錄(既解壓目錄)中復制redis.conf到redis的安裝目錄/bin文件夾下歧胁。
cd usr/local/redis-4.0.11
cp redis.conf ../redis/bin
2. 修改配置文件
修改:daemonizei yes
進入拷貝的配置文件
修改為yes
3. 啟動
在redis/bin下啟動: ./redis-server redis.conf
進入客戶端驗證:./redis-cli
exit退出客戶端
4. 關閉后端啟動
./redis-cli shutdown
Redis遠程端口配置
1. 開啟遠程端口
要想用代碼訪問Linux下的Redis就需要開啟6379端口
1. 修改redis.conf
bind 0.0.0.0
表示不限制訪問來源地址滋饲,如需限制,直接改為相應IP
2. 開啟防火墻6379端口
在CentOS 7 中防火墻由firewalld來管理喊巍,啟用區(qū)域端口和協(xié)議組合
啟用命令:
1. firewall-cmd --zone=public --add-port=6379/tcp --permanent
--permanent永久生效屠缭,沒有此參數(shù)重啟后失效
2. 重新載入
firewall-cmd --reload
3. 查看端口是否開啟
firewall-cmd --zone= public --query-port=6379/tcp
補充:刪除
firewall-cmd --zone= public --remove-port=6379/tcp --permanent
IDEA配置
1. 如同MySQL一樣,Redis也需要數(shù)據(jù)庫的驅動Jar崭参。
jedis-2.7.0.jar
commons-pool2-2.3.jar
Redis基本使用
Redis是一種高級的key-value的存儲系統(tǒng)呵曹,支持五種數(shù)據(jù)類型。
1. 字符串型 String
String在Redis中是二進制安全的何暮,這意味著該類型可以接受任何格式的數(shù)據(jù)奄喂。
value最多可以容納的數(shù)據(jù)長度是512M。
提供的操作
set key value
get key
getset key value:先獲取該key的值海洼,然后在設置該key的值跨新。
del key
append key value:如果該key存在,則在原有的value后追加該值坏逢,如果不存在則創(chuàng)建一個key-value域帐。
incr key
將指定的key的value原子性的遞增1
如果該key不存在,其初始值為0词疼,在incr之后其值為1。
如果value的值不能轉成整型帘腹,如hello贰盗,該操作將執(zhí)行失敗并返回相應的錯誤信息。
decr key:遞減
2. 字符串列表 Lists
List類型是按照插入順序排序的字符串鏈表阳欲,可以操控頭尾插入數(shù)據(jù)舵盈。
在插入時,如果該鍵并不存在球化,Redis將為該鍵創(chuàng)建一個新的鏈表秽晚。
如果元素都被移除,該鏈表也會被刪除筒愚。
添加
lpush key value1 value2...:在指定的key所關聯(lián)的list的頭部插入所有的values
rpush key value1 value2…:在該list的尾部添加元素
lrange key start end
獲取鏈表中從start到end的元素的值
start赴蝇、end可為負數(shù),若為-1則表示鏈表尾部的元素巢掺,-2則表示倒數(shù)第二個句伶,依次類推劲蜻。
lpushx key value:在指定的key所關聯(lián)的list的頭部插入value。
rpushx key value:在該list的尾部添加元素
lpop key:返回并彈出指定的key關聯(lián)的鏈表中的第一個元素考余,即頭部元素先嬉。
rpop key:從尾部彈出元素。
rpoplpush resource destination:將鏈表中的尾部元素彈出并添加到頭部
llen key:返回指定的key關聯(lián)的鏈表中的元素的數(shù)量楚堤。
lset key index value:
設置鏈表中的index的腳標的元素值疫蔓,0代表鏈表的頭元素,-1代表鏈表的尾元素身冬。
刪除
lrem key count value:刪除count個值為value的元素
如果count大于0衅胀,從頭向尾遍歷并刪除count個值為value的元素
如果count小于0,則從尾向頭遍歷并刪除
如果count等于0吏恭,則刪除鏈表中所有等于value的元素
3. 字符串集合 Sets
在Redis中拗小,我們可以將Set類型看作為沒有排序不允許重復的字符集合。
sadd key value1樱哼、value2…:向set中添加數(shù)據(jù)哀九,如果該key的值已有則不會重復添加
smembers key:獲取set中所有的成員
scard key:獲取set中成員的數(shù)量
sismember key member:
判斷參數(shù)中指定的成員是否在該set中,
1表示存在
0表示不存在或者該key本身就不存在
srem key member1搅幅、member2…:刪除set中指定的成員
srandmember key:隨機返回set中的一個成員
sdiff sdiff key1 key2:返回key1與key2中相差的成員阅束,而且與key的順序有關。即返回差集茄唐。
sdiffstore destination key1 key2:將key1息裸、key2相差的成員存儲在destination上。
sinter key[key1,key2…]:返回交集沪编。
sinterstore destination key1 key2:將返回的交集存儲在destination上呼盆。
List,Set結構
4. 有序字符串集合 Sorted sets
Sorted-Sets和Sets類型極為相似蚁廓,都是字符串的集合访圃,都不允許重復。
差別是Sorted-Sets中的每一個成員都會有一個分數(shù)(score)與之關聯(lián)相嵌。
Redis正是通過分數(shù)來為集合中的成員進行從小到大的排序腿时。
分數(shù)(score)是可以重復的。
zadd key score member score2 member2 …
將所有成員以及該成員的分數(shù)存放到sorted-set中
zcard key:獲取集合中的成員數(shù)量
zcount key min max:獲取分數(shù)在[min,max]之間的成員
zincrby key increment member:設置指定成員的增加的分數(shù)饭宾。
zrem key member[member…]:移除集合中指定的成員批糟,可以指定多個成員。
5. 哈希類型 Hashs
Redis中的Hashes類型可以看成具有String Key和String Value的map容器看铆。
適合于存儲值對象的信息徽鼎,如:Username、Password和Age等。
hset key field value:為指定的key設定field/value纬傲。
hget key field:返回指定的key中的field的值满败。
hgetall key:獲取key中的所有filed-vaule。
hdel key field :刪除數(shù)據(jù)
Hashs結構
Jedis
public class RedisTest {
@Test
public void test() {
//連接池配置
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(30);//最大閑置個數(shù)
config.setMinIdle(10);//最小閑置個數(shù)
config.setMaxTotal(50);//最大連接數(shù)
//創(chuàng)建連接池
JedisPool pool = new JedisPool(config, "192.168.1.105", 6379);
//獲取資源
Jedis jedis = pool.getResource();
jedis.set("userName","Demo");
jedis.get("userName");
//關閉資源
jedis.close();
pool.close();
}
}