1:什么是redis
redis是一個nosql(not only sql不僅僅只有sql)數(shù)據(jù)庫.翻譯成中文叫做非關(guān)系型型數(shù)據(jù)庫.
關(guān)系型數(shù)據(jù)庫:以二維表形式存儲數(shù)據(jù)
非關(guān)系型數(shù)據(jù)庫: 以鍵值對形式存儲數(shù)據(jù)(key, value形式)
是一家意大利的創(chuàng)業(yè)公司出的,然后后來這家公司被VMware贊助. redis底層用C語句編寫.
redis是將數(shù)據(jù)存放到內(nèi)存中,由于內(nèi)容存取速度快所以redis被廣泛應(yīng)用在互聯(lián)網(wǎng)項(xiàng)目中,
redis有點(diǎn):存取速度快,官方稱讀取速度會達(dá)到30萬次每秒,寫速度在10萬次每秒最有,具體限制于硬件.
缺點(diǎn):對持久化支持不夠良好,
所以redis一般不作為數(shù)據(jù)的主數(shù)據(jù)庫存儲,一般配合傳統(tǒng)的關(guān)系型數(shù)據(jù)庫使用.
2:redis應(yīng)用領(lǐng)域
分布式緩存
分布式session
保存博客或者論壇的留言回復(fù)等.
總之是用在數(shù)據(jù)量大,并發(fā)量高的情況下
3:怎么用
redis主要就是使用命令來進(jìn)行操作,java端在代碼中可以使用Jedis來操作redis服務(wù)器
redis數(shù)據(jù)類型
字符串String
列表list redis中使用的是雙向循環(huán)鏈表來實(shí)現(xiàn)的list,在redis中更像棧
散列Hash 一般應(yīng)用于將redis作為分布式緩存,存儲數(shù)據(jù)庫中的數(shù)據(jù)對象
集合set set中數(shù)據(jù)是無序的并且不允許重復(fù)
有序集合zset redis會根據(jù)分?jǐn)?shù)自動排序,這里可以使用在學(xué)生成績排序,
或者是手機(jī)應(yīng)用商店流行軟件排名等需求中
4:redis持久化方案
rdb:可以設(shè)置間隔多長時間保存一次(Redis不用任何配置默認(rèn)的持久化方案)
有點(diǎn):讓redis的數(shù)據(jù)存取速度變快
缺點(diǎn):服務(wù)器斷電時會丟失部分?jǐn)?shù)據(jù)(數(shù)據(jù)的完整性得不到保證)
aof:可以設(shè)置實(shí)時保存
優(yōu)點(diǎn):持久化良好,能包裝數(shù)據(jù)的完整性
缺點(diǎn):大大降低了redis系統(tǒng)的存取速度
5: 主從復(fù)制
這里使用了心跳檢測機(jī)制,主從復(fù)制必須使用rdb持久化方式
從服務(wù)器一般是只讀的,保證主服務(wù)器和從服務(wù)器的數(shù)據(jù)一致性
cd /usr/local/
ls
mkdir redis
cp /root/redis
chmod +x redis-3.0.0.tar.gz #可執(zhí)行權(quán)限
tar -zxvf redis-3.0.0.tar.gz #解壓
cd redis-3.0.0 #進(jìn)入
make #編譯
make PREFIX=/usr/local/redis install #指定安裝到redis目錄
./redis-server #啟動redis 前端啟動
cd /usr/local/redis/bin #
./redis-cli #連接客戶端
set key1 1 #進(jìn)去了
get key1 #取出來了
cd ..
cd redis-3.0.0
cd /usr/local/redis/bin
vi redis.conf #該配置文件
daemonize yes
./redis-server redis.conf #后端啟動
ps -aux|grep redis #后端啟動
ps aux|grep redis #后端啟動
./redis-cli #連接redis
cd /usr/local/redis/bin
ls
./redis-cli shutdown #關(guān)閉
6:簡單命令
incr key2 #遞增
decr key2 #遞減
decrby num 3 # 減去3
hset user2 name 'alice' #設(shè)置耽擱屬性
hset user2 gender 'woman'
hset user2 age 18
hget user2 name #取出name屬性
hdel user2 name #刪除屬性
hdel user2 gender age #刪除兩個屬性
hmset user1 name '張三' age 22 gender 'woman' #設(shè)置對象屬性
hmget user1 name age gender #取出對象屬性
hgetall user1 #直接取出對象屬性
List
棧結(jié)構(gòu)存取
lpush lkey 1 2 3 #push
lrange lkey 0 2 #start - end element
lrange lkey 0 -1 #全部取出
rpush lkey 7 8 9 #從右邊放入
lrange lkey 0 -1
lpop lkey #棧彈出
llen lkey #獲取元素
Set
sadd skey1 1 2 3 4 5 6 #存入
smembers skey1 #取出
srem skey1 5 #刪除element 5
sismember skey1 4 ==>1 #判斷元素是否存在于集合中
sismember skey1 10 ==>0
sdiff skey1 skey2 #
sinter skey1 skey2 #交集
sunion skey2 skey1 #并集
zadd zkey1 10 '張三' 20 '李四' 30 '王麻子' #數(shù)據(jù)會自動排序
zrange zkey1 0 -1 #取出(排序后的數(shù)據(jù))
zrange zkey1 0 -1 withscores #全部顯示數(shù)據(jù)(排序后)
zrem zkey1 '李四' #去掉'李四'
zscore zkey1 '張三' #查詢單個人的數(shù)據(jù)信息
zrevrange zkey1 0 -1 withscores #降序
keys * #所有的命令
keys *1 #匹配帶1的索引key
ping #查看服務(wù)器是否死掉