NoSQL介紹
一類(lèi)新出現(xiàn)的數(shù)據(jù)庫(kù)(not only sql)婴氮,它的特點(diǎn):
- 不支持SQL語(yǔ)法
- 存儲(chǔ)結(jié)構(gòu)跟傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)中的那種關(guān)系表完全不同是掰,nosql中存儲(chǔ)的數(shù)據(jù)都是KV形式
- NoSQL的世界中沒(méi)有一種通用的語(yǔ)言历帚,每種nosql數(shù)據(jù)庫(kù)都有自己的api和語(yǔ)法,以及擅長(zhǎng)的業(yè)務(wù)場(chǎng)景
- NoSQL中的產(chǎn)品種類(lèi)相當(dāng)多:
Mongodb
Redis
Hbase hadoop
Cassandra hadoop
Redis 簡(jiǎn)介
Redis是一個(gè)開(kāi)源的使用ANSI C語(yǔ)言編寫(xiě)、支持網(wǎng)絡(luò)虫几、可基于內(nèi)存亦可持久化的日志型黑低、Key-Value數(shù)據(jù)庫(kù)赘艳,并提供多種語(yǔ)言的AP
Redis 特性
Redis 與其他 key - value 緩存產(chǎn)品有以下三個(gè)特點(diǎn):
- Redis支持?jǐn)?shù)據(jù)的持久化酌毡,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤(pán)中,重啟的時(shí)候可以再次加載進(jìn)行使用蕾管。
- Redis不僅僅支持簡(jiǎn)單的key-value類(lèi)型的數(shù)據(jù)枷踏,同時(shí)還提供list,set掰曾,zset旭蠕,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。
- Redis支持?jǐn)?shù)據(jù)的備份旷坦,即master-slave模式的數(shù)據(jù)備份
Redis 優(yōu)勢(shì)
- 性能極高 – Redis能讀的速度是110000次/s,寫(xiě)的速度是81000次/s 掏熬。
- 豐富的數(shù)據(jù)類(lèi)型 – Redis支持二進(jìn)制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類(lèi)型操作。
- 原子 – Redis的所有操作都是原子性的秒梅,同時(shí)Redis還支持對(duì)幾個(gè)操作全并后的原子性執(zhí)行旗芬。
- 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過(guò)期等等特性。
Redis應(yīng)用場(chǎng)景
- 用來(lái)做緩存(ehcache/memcached)——redis的所有數(shù)據(jù)是放在內(nèi)存中的(內(nèi)存數(shù)據(jù)庫(kù))
- 可以在某些特定應(yīng)用場(chǎng)景下替代傳統(tǒng)數(shù)據(jù)庫(kù)——比如社交類(lèi)的應(yīng)用
- 在一些大型系統(tǒng)中捆蜀,巧妙地實(shí)現(xiàn)一些特定的功能:session共享疮丛、購(gòu)物車(chē)
- 只要你有豐富的想象力,redis可以用在可以給你無(wú)限的驚喜…….
ubuntu 安裝下載
- 第一步:下載
- 第二步:解壓
tar xzf redis-4.0.10.tar.gz
- 第三步:復(fù)制,放到usr/local目錄下面
sudo mv ./redis-4.0.10 /usr/local/redis/
- 第四步:進(jìn)入redis目錄
cd /usr/local/redis/
- 第五步:生成
sudo make
- 第六步: 測(cè)試,這段運(yùn)行時(shí)間會(huì)比較長(zhǎng)
sudo make test
- 第七步:安裝,將Redis的命令安裝到/usr/local/bin/目錄
sudo make install
- 第八步: 安裝完成后,我們進(jìn)入目錄/usr/local/bin中查看
cd /usr/local/bin
ls -all
redis-server redis服務(wù)器
redis-cli redis命令行客戶端
redis-benchmark redis性能測(cè)試工具
redis-check-aof AOF文件修復(fù)工具
redis-check-rdb RDB文件檢索工具
- 第九步: 配置文件,移動(dòng)到/etc/目錄下
配置文件目錄為/usr/local/redis/redis.conf
sudo cp /usr/local/redis/redis.conf /etc/redis/
- 配置
Redis的配置信息在/etc/redis/redis.conf
查看
sudo vi /etc/redis/redis.conf
- 核心配置選項(xiàng)
綁定ip:如果需要遠(yuǎn)程訪問(wèn),可以將此行注釋,或者綁定一個(gè)真實(shí)ip
bind 127.0.0.1
端?辆它,默認(rèn)為6379
是否以守護(hù)進(jìn)程運(yùn)行
如果以守護(hù)進(jìn)程運(yùn)行,則不會(huì)在命令行阻塞,類(lèi)似服務(wù)
如果以非守護(hù)進(jìn)程運(yùn)行,則當(dāng)前終端被阻塞
設(shè)置為yes表示守護(hù)進(jìn)程,設(shè)置為no表示非守護(hù)進(jìn)程
推薦設(shè)置為yes
5b76c93e7c7b1.png
- 數(shù)據(jù)文件
dbfilename dump.rdb
- 日志文件
logfile /var/log/redis/redis-server.log
- 數(shù)據(jù)庫(kù),默認(rèn)有16個(gè)
database 16
客戶端
- 連接服務(wù)器
redis-server
- 連接redis
redis-cli
- 運(yùn)行測(cè)試命令
ping
- 切換數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)沒(méi)有名稱(chēng),默認(rèn)16個(gè),通過(guò)0-15來(lái)標(biāo)識(shí),鏈接redis默認(rèn)選擇第一個(gè)數(shù)據(jù)庫(kù)
select n
5b76d54d51f16.png
數(shù)據(jù)結(jié)構(gòu)
- redis是key-value的數(shù)據(jù)結(jié)構(gòu)誊薄,每條數(shù)據(jù)都是?個(gè)鍵值對(duì)
- 鍵的類(lèi)型是字符串
- 注意:鍵不能重復(fù)
- 值的類(lèi)型分為5種:
字符串
哈希hash
列表
set集合
有序集合zset
數(shù)據(jù)操作行為
string類(lèi)型
字符串類(lèi)型是Redis中最為基礎(chǔ)的數(shù)據(jù)存儲(chǔ)類(lèi)型,它在Redis中是二進(jìn)制安全的锰茉,這便意味著該類(lèi)型可以接受任何格式的數(shù)據(jù)呢蔫,如JPEG圖像數(shù)據(jù)或Json對(duì)象描述信息等。在Redis中字符串類(lèi)型的Value最多可以容納的數(shù)據(jù)長(zhǎng)度是512M洞辣。
保存
如果設(shè)置的鍵不存在則為添加咐刨,如果設(shè)置的鍵已經(jīng)存在則修改
- 設(shè)置鍵值
set key value
set name wwy
例1:設(shè)置鍵為name值為wwy的數(shù)據(jù)
5b76d6fcb1d7c.png
- 設(shè)置鍵值及過(guò)期時(shí)間,以秒為單位
setex key seconds value
setex aa 3 wwy
例2:設(shè)置鍵為aa值為wwy過(guò)期時(shí)間為3秒的數(shù)據(jù)
5b76d7c44ba96.png
- 設(shè)置多個(gè)鍵值
mset key1 value1 key2 value2 ...
例3:設(shè)置鍵為'a1'值為'python'扬霜、鍵為'a2'值為'java'定鸟、鍵為'a3'值為'c'
mset a1 python a2 java a3 c
5b76d82367c10.png
- 追加值
append key value
例4:向鍵為a1中追加值' haha'
append 'a1' 'haha'
5b76d87fe2bef.png
獲取
- 獲取:根據(jù)鍵獲取值,如果不存在此鍵則返回nil
get key
例5:獲取鍵'name'的值
get 'name'
- 根據(jù)多個(gè)鍵獲取多個(gè)值
mget key1 key2 ...
例6:獲取鍵a1、a2檐薯、a3'的值
mget a1 a2 a3
鍵命令
- 查找鍵,參數(shù)支持正則表達(dá)式
keys pattern
例1:查看所有鍵
keys *
例2:查看名稱(chēng)中包含a的鍵
keys 'a*'
- 判斷鍵是否存在,如果存在返回1沸久,不存在返回0
exists key1
例3:判斷鍵a1是否存在
exists a1
5b76dfba60b46.png
- 查看鍵對(duì)應(yīng)的value的類(lèi)型
type key
例4:查看鍵a1的值類(lèi)型,為redis?持的五種類(lèi)型中的?種
type a1
- 刪除鍵及對(duì)應(yīng)的值
del key1 key2 ...
例5:刪除鍵a2余蟹、a3
del a2 a3
- 設(shè)置過(guò)期時(shí)間卷胯,以秒為單位,如果沒(méi)有指定過(guò)期時(shí)間則?直存在,直到使?DEL移除
expire key seconds
例6:設(shè)置鍵'a1'的過(guò)期時(shí)間為3秒
expire 'a1' 3
- 查看有效時(shí)間威酒,以秒為單位
ttl key
例7:查看鍵'bb'的有效時(shí)間
ttl bb
hash
hash?于存儲(chǔ)對(duì)象窑睁,對(duì)象的結(jié)構(gòu)為屬性挺峡、值
值的類(lèi)型為string
增加、修改
- 設(shè)置單個(gè)屬性
hset key field value
例1:設(shè)置鍵 user的屬性name為wwy789
hset user name wwy789
- 設(shè)置多個(gè)屬性
hmset key field1 value1 field2 value2 ...
例2:設(shè)置鍵u2的屬性name為wengwenyu担钮、屬性age為11
hmset u2 name wengwenyu age 11
獲取
- 獲取指定鍵所有的屬性
hkeys key
例3:獲取鍵u2的所有屬性
hkeys u2
- 獲取?個(gè)屬性的值
hget key field
例4:獲取鍵u2屬性'name'的值
hget u2 name
- 獲取多個(gè)屬性的值
hmget key field1 field2 ...
例5:獲取鍵u2屬性'name'橱赠、'age的值
hmget u2 name age
- 取所有屬性的值
hvals key
例6:獲取鍵'u2'所有屬性的值
hvals u2
刪除
- 刪除整個(gè)hash鍵及值,使?del命令
- 刪除屬性箫津,屬性對(duì)應(yīng)的值會(huì)被?起刪除
hdel key field1 field2 ...
例7:刪除鍵'u2'的屬性'age'
hdel u2 age
list類(lèi)型
增加
- 在左側(cè)插?數(shù)據(jù)
lpush key value1 value2 ...
例1:從鍵為'a1'的列表左側(cè)加?數(shù)據(jù)a 狭姨、 b 、c
lpush a1 a b c
5b76f2ab617c8.png
5b76f2d7ac13e.png
- 在右側(cè)插?數(shù)據(jù)
rpush key value1 value2 ...
例2:從鍵為'a1'的列表右側(cè)加?數(shù)據(jù)0 1
rpush a1 0 1
5b76f3214069f.png
- 在指定元素的前或后插?新元素
linsert key before或after 現(xiàn)有元素 新元素
例3:在鍵為'a1'的列表中元素'b'前加?'3'
linsert a1 before b 3
獲取
- 返回列表?指定范圍內(nèi)的元素
- start苏遥、stop為元素的下標(biāo)索引
- 索引從左側(cè)開(kāi)始饼拍,第?個(gè)元素為0
- 索引可以是負(fù)數(shù),表示從尾部開(kāi)始計(jì)數(shù)暖眼,如-1表示最后?個(gè)元素
lrange key start stop
例4:獲取鍵為'a1'的列表所有元素
lrange a1 0 -1
5b8143da42229.png
設(shè)置指定索引位置的元素值
- 索引從左側(cè)開(kāi)始惕耕,第?個(gè)元素為0
- 索引可以是負(fù)數(shù)纺裁,表示尾部開(kāi)始計(jì)數(shù)诫肠,如-1表示最后?個(gè)元素
lset key index value
例5:修改鍵為'a1'的列表中下標(biāo)為1的元素值為'z'
lset a 1 z
5b814401c1a1d.png
刪除
- 刪除指定元素
1.將列表中前count次出現(xiàn)的值為value的元素移除
2.count > 0: 從頭往尾移除
3.count < 0: 從尾往頭移除
4.count = 0: 移除所有
lrem key count value
例6.1:向列表'a2'中加?元素'a'、'b'欺缘、'a'栋豫、'b'、'a'谚殊、'b'
lpush a2 a b a b a b
5b81444625b55.png
例6.2:從'a2'列表右側(cè)開(kāi)始刪除2個(gè)'b'
lrem a2 -2 b
例6.3:查看列表'py12'的所有元素
lrange a2 0 -1
5b814467ee00e.png
其他
- BLPOP key1 [key2 ] timeout
移出并獲取列表的第一個(gè)元素丧鸯, 如果列表沒(méi)有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。 - BRPOP key1 [key2 ] timeout
移出并獲取列表的最后一個(gè)元素嫩絮, 如果列表沒(méi)有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止丛肢。 - BRPOPLPUSH source destination timeout
從列表中彈出一個(gè)值,將彈出的元素插入到另外一個(gè)列表中并返回它剿干; 如果列表沒(méi)有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止蜂怎。 - LINDEX key index
通過(guò)索引獲取列表中的元素 - LINSERT key BEFORE|AFTER pivot value
在列表的元素前或者后插入元素 - LLEN key
獲取列表長(zhǎng)度 - LPOP key
移出并獲取列表的第一個(gè)元素 - LPUSH key value1 [value2]
將一個(gè)或多個(gè)值插入到列表頭部 - LPUSHX key value
將一個(gè)值插入到已存在的列表頭部 - LRANGE key start stop
獲取列表指定范圍內(nèi)的元素 - LREM key count value
移除列表元素 - LSET key index value
通過(guò)索引設(shè)置列表元素的值 - LTRIM key start stop
對(duì)一個(gè)列表進(jìn)行修剪(trim),就是說(shuō)置尔,讓列表只保留指定區(qū)間內(nèi)的元素杠步,不在指定區(qū)間之內(nèi)的元素都將被刪除。 - RPOP key
移除并獲取列表最后一個(gè)元素 - RPOPLPUSH source destination
移除列表的最后一個(gè)元素榜轿,并將該元素添加到另一個(gè)列表并返回 - RPUSH key value1 [value2]
在列表中添加一個(gè)或多個(gè)值 - RPUSHX key value
為已存在的列表添加值
set類(lèi)型
- ?序集合
- 元素為string類(lèi)型
- 元素具有唯?性幽歼,不重復(fù)
- 說(shuō)明:對(duì)于集合沒(méi)有修改操作
增加
- 添加元素
sadd key member1 member2 ...
例1:向鍵'a3'的集合中添加元素'zhangsan'、'lisi'谬盐、'wangwu'
sadd a3 zhangsan sili wangwu
5b81463d30a0b.png
獲取
- 返回所有的元素
smembers key
例2:獲取鍵'a3'的集合中所有元素
smembers a3
5b81467327edd.png
- 獲取集合的成員數(shù)
SCARD key
- 判斷 member 元素是否是集合 key 的成員
SISMEMBER key member
刪除
- 刪除指定元素
srem key field
例3:刪除鍵'a3'的集合中元素'wangwu'
srem a3 wangwu
- 移除并返回集合中的一個(gè)隨機(jī)元素
spop key
其他操作
SADD key member1 [member2]
向集合添加一個(gè)或多個(gè)成員SCARD key
獲取集合的成員數(shù)SDIFF key1 [key2]
返回給定所有集合的差集SDIFFSTORE destination key1 [key2]
返回給定所有集合的差集并存儲(chǔ)在 destination 中SINTER key1 [key2]
返回給定所有集合的交集SINTERSTORE destination key1 [key2]
返回給定所有集合的交集并存儲(chǔ)在 destination 中SISMEMBER key member
判斷 member 元素是否是集合 key 的成員SMEMBERS key
返回集合中的所有成員SMOVE source destination member
將 member 元素從 source 集合移動(dòng)到 destination 集合SPOP key
移除并返回集合中的一個(gè)隨機(jī)元素SRANDMEMBER key [count]
返回集合中一個(gè)或多個(gè)隨機(jī)數(shù)SREM key member1 [member2]
移除集合中一個(gè)或多個(gè)成員SUNION key1 [key2]
返回所有給定集合的并集SUNIONSTORE destination key1 [key2]
所有給定集合的并集存儲(chǔ)在 destination 集合中SSCAN key cursor [MATCH pattern] [COUNT count]
迭代集合中的元素
zset類(lèi)型
- sorted set甸私,有序集合
- 元素為string類(lèi)型
- 元素具有唯?性,不重復(fù)
- 每個(gè)元素都會(huì)關(guān)聯(lián)?個(gè)double類(lèi)型的score飞傀,表示權(quán)重皇型,通過(guò)權(quán)重將元素從?到?排序
- 說(shuō)明:沒(méi)有修改操作
增加
添加
- zadd key score1 member1 score2 member2 ...
例1:向鍵'a4'的集合中添加元素'lisi'泣刹、'wangwu'、'zhaoliu'犀被、'zhangsan'椅您,權(quán)重分別為4、5寡键、6掀泳、3
zadd a4 4 lisi 5 wangwu 6 zhaoliu 3 zhangsan
獲取
- 返回指定范圍內(nèi)的元素
- start、stop為元素的下標(biāo)索引
- 索引從左側(cè)開(kāi)始西轩,第?個(gè)元素為0
- 索引可以是負(fù)數(shù)员舵,表示從尾部開(kāi)始計(jì)數(shù),如-1表示最后?個(gè)元素
zrange key start stop
例2:獲取鍵'a4'的集合中所有元素
zrange a4 0 -1
5b814896c4218.png
- 返回score值在min和max之間的成員
zrangebyscore key min max
例3:獲取鍵'a4'的集合中權(quán)限值在5和6之間的成員
zrangebyscore a4 5 6
5b8148f8765c9.png
- 返回成員member的score值
zscore key member
例4:獲取鍵'a4'的集合中元素'zhangsan'的權(quán)重
zscore a4 zhangsan
5b8149225a8c1.png
刪除
- 刪除指定元素
zrem key member1 member2 ...
例5:刪除集合'a4'中元素'zhangsan'
zrem a4 zhangsan
5b81494783d53.png
- 刪除權(quán)重在指定范圍的元素
zremrangebyscore key min max
例6:刪除集合'a4'中權(quán)限在5藕畔、6之間的元素
zremrangebyscore a4 5 6
5b8149678fcf5.png