redis介紹
redis是什么
redis是一種基于鍵值對的NOsql資料庫,與很多鍵值對資料庫不同,redis中的值string,hash,list,set,zset,geo等多種資料機構和演算法組成,因為redis會將所有的資料都放在記憶體中,所以他的讀寫性能非常驚人,不僅如此,redis還可以將記憶體中的資料利用快照和日志的形式保存在硬碟上,redis還提供了鍵過期,發布訂閱,流水線等附加功能
redis重要性
1.速度快
Redis所有的資料都存放在記憶體中
Redis使用C語言實作
Redis使用單執行緒架構
2.基于鍵值對的資料結構服務器
5中資料結構:字串,哈希,串列,集合,有序集合
3.豐富的功能
提供了鍵過期功能,可以實作快取
提供了發布訂閱功能,可以實作訊息系統
提供了pipeline功能,客戶端可以將一批命令一次性傳到Redis,減少了網路開銷
4.簡單穩定
原始碼很少,3.0版本以后5萬行左右.
使用單執行緒模型法,是的Redis服務端處理模型變得簡單.
不依賴作業系統的中的類別庫
5.客戶端語言多
java,PHP,python,C,C++,Nodejs等
6.持久化
RDB和AOF
7.主從復制
8.高可用和分布式
哨兵
集群
redis應用場景
1.快取-鍵過期時間
快取session會話
快取用戶資訊,找不到再去mysql查,查到然后回寫到redis
2.排行榜-串列&有序集合
熱度排名排行榜
發布時間排行榜
3.計數器應用-天然支持計數器
帖子瀏覽數
視頻播放次數
商品瀏覽數
4.社交網路-集合
踩/贊,粉絲,共同好友/喜好,推送,打標簽
5.訊息佇列系統-發布訂閱
配合elk實作日志收集
redis單節點安裝部署
1.目錄規劃
/data/soft/ #redis下載目錄
/opt/redis_{PORT}/{conf,logs,pid} #redis安裝目錄
/data/redis_{PORT}/redis_{PORT}.rdb #redis資料目錄
/root/scripts/redis_shell.sh #redis運維腳本
2.安裝命令
### 編輯hosts檔案
[root@db01 ~]# tail -3 /etc/hosts
10.0.0.51 db01
10.0.0.52 db02
10.0.0.53 db03
###
yum install gcc -y
#make distclean && make
mkdir -p /data/soft
mkdir -p /data/redis_6379
mkdir -p /opt/redis_6379/{conf,pid,logs}
cd /data/soft/
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar zxf redis-3.2.9.tar.gz -C /opt/
ln -s /opt/redis-3.2.9/ /opt/redis
cd /opt/redis
make && make install
3.組態檔
cat >/opt/redis_6379/conf/redis_6379.conf <<EOF
### 以守護行程模式啟動
daemonize yes
### 系結的主機地址
bind 127.0.0.1 10.0.0.51
### 監聽埠
port 6379
### pid檔案和log檔案的保存地址
pidfile /opt/redis_6379/pid/redis_6379.pid
logfile /opt/redis_6379/logs/redis_6379.log
### 設定資料庫的數量,默認資料庫為0
databases 16
### 指定本地持久化檔案的檔案名,默認是dump.rdb
dbfilename redis_6379.rdb
### 本地資料庫的目錄
dir /data/redis_6379
EOF
4.啟動redis
redis-server /opt/redis_6379/conf/redis_6379.conf
5.檢查是否啟動
ps -ef|grep redis
netstat -lntup|grep redis
6.進入redis
redis-cli
redis全域操作命令
0.寫入key
set k1 v1
set k2 v2
set k3 v3
1.查看所有的key!線上禁止使用!
keys *
2.查看有多少個key,注意,是估值
DBSIZE
3.查看是否存在這個KEY
EXISTS k1
EXISTS k1 k2 k3
狀態碼:
0 表示這個key不存在
1 表示這個key存在
N 表示有的N個key存在
4.洗掉key(無論是什么資料型別,都可以洗掉)
DEL k1
DEL k1 k2 k3
狀態碼:
0 表示這個key不存在
1 表示這個key存在,并且洗掉成功
N 表示有的N個key存在,并且洗掉N個Key
5.鍵過期
設定過期時間
EXPIRE k1 100
取消過期時間,不修改key原來的值
PERSIST k1
狀態碼:
0: 表示這個key不存在
1: 表示這個key存在,并且設定過期時間成功
查看key是否過期
TTL k1
狀態碼:
-1 :這個key存在,并且永不過期
-2 :這個key不存在
N :這個key存在,并且在N秒后過期
結論:
過期后的key直接會被洗掉
6.鍵的資料型別
type key
字串操作
Redis并不是簡單地key-value存盤,實際上他是一個資料結構服務器,支持不同型別的值.
Redis Strings
這是最簡單的Redis型別,如果你只用這種型別,Redis就像一個持久化的memcache服務器(注:memcache的資料僅保存在記憶體中,服務器重啟后,資料將丟失.)
操作命令:
- 通常用SET command 和 GET command來設定和獲取字串值
- INCR命令將字串值決議成整型.將其加1,最后結果保存為新的字串,類似命令: INCRBY,DECR,DECRBY
- MSET和MGET可以一次存盤或獲取多個key對應的值.
- EXISTS命令回傳1或0標識給定key的值是否存在.
使用DEL命令可以洗掉key對應的值,
DEL命令回傳1或0標識是被洗掉(值存在)或者沒被洗掉(key對應的值不存在). - Type命令可以回傳key對應的存盤型別
- 可以對key設定一個超時時間,當這個時間到達后被洗掉
- PERSIST命令去除超時時間
1.設定一個key
set k1 v1
2.查看一個key
get k1
3.設定多個key
MSET k1 v1 k2 v2 k3 v3
4.查看多個key
MGET k1 k2 k3
5.天然計數器
加1:
set k1 1
INCR k1
get k1
加N:
INCRBY k1 100
減N:
INCRBY k1 -1
減N:
INCRBY k1 -N
串列
插入串列:
LPUSH:從串列左側插入資料
RPUSH:從串列右側插入資料
最后LRANGE可以從list中取出一定范圍的元素
Pop,從list中洗掉元素并同時回傳洗掉的值,可以在左邊或右邊操作.
LPUSH list1 A
LPUSH list1 B
LPUSH list1 C
RPUSH list1 D
查看串列的長度:
LLEN list1
查看串列的內容:
db01:6379> LRANGE list1 0 -1
1) "C"
2) "B"
3) "A"
4) "D"
洗掉串列元素:
LPOP: 從串列左側洗掉
RPOP: 從串列右側洗掉
LPOP list1
RPOP list1
洗掉串列內容:
DEL list1
哈希
Hash看起來就像一個hash的樣子.由鍵值對組成
HMSET指令設定hash中的多個域
HGET取回單個域.
HMGET取回一系列的值
生成一個hash型別:
HMSET user:1 name xiaozhang job it age 28
HMSET user:2 name abc job it age 28
HMSET user:3 name def job it age 28
查看hash里的一個值
HMGET user:1 name
查看hash里的多個值
HMGET user:1 name age job
查看hash里的所有的值
HGETALL user:1
mysql資料和redis哈希對比:
user表
uid name job age
1 xiaozhang it 28
2 xiaoya it 28
3 yazhang it 28
mysql查詢資料
select * from user where id = 3
redis快取mysql資料
名字 key1 k1值 key2 k2的值 key3 k3的值
uid:1 name xiaozahng job it age 28
uid:2 name xiaoya job it age 28
uid:3 name yazahng job it age 28
集合
- 集合是字串的無序排列
- SADD指令把新的元素添加到set中
- 和list型別不同,set集合不允許出現重復的元素
- srem用來洗掉指定的值
- sdiff計算后者集合的差異成員
- sinter計算集合的交集
- sunion計算集合的并集
創建集合
db01:6379> SADD set1 1 2 3
(integer) 3
db01:6379> SADD set2 1 3 5 7
(integer) 4
查看集合的成員:
db01:6379> SMEMBERS set1
1) "1"
2) "2"
3) "3"
db01:6379> SMEMBERS set2
1) "1"
2) "3"
3) "5"
4) "7"
db01:6379> srem set1 2 4
(integer) 2
db01:6379> smembers set1
1) "1"
2) "3"
查看集合的差集,以前面一個集合為基準對比后面的,前面有,后面沒有則選出來
db01:6379> SDIFF set1 set2
1) "2"
db01:6379> SDIFF set2 set1
1) "7"
查看集合的交集
db01:6379> SINTER set1 set2
1) "1"
2) "3"
3) "5"
查看集合的并集
db01:6379> SUNION set1 set2
1) "1"
2) "2"
3) "3"
4) "5"
5) "7"
db01:6379> SUNION set1 set2 set3
1) "1"
2) "2"
3) "3"
4) "5"
5) "7"
6) "9"
有序集合添加成員
zadd key score member [score member]
zadd linux5 100 banzhang
zadd linux5 99 xuewei 10 zuzhang 150 mage
計算成員個數
zcard linux5
計算某個成員分數
zscore key member
zscore linux5 banzhang
計算成員排名
zrank key member
zrevrank key member
升序排行 zrank linux5 xuewei
降序排行 zrevrank linux5 xuewei
洗掉成員
zrem key member
zrem user:ranking oldzhang
增加成員分數
zincrby key increment member
zincrby linux5 1 xuewei
回傳指定排名范圍的成員
升序 zrang key start end [wishscores]
降序 zrevrange key start end [wishscores]
127.0.0.1:6379> ZRANGE linux5 0 -1 withscores
1) "c"
2) "10"
3) "b"
4) "99"
5) "a"
6) "100"
7) "d"
8) "150"
127.0.0.1:6379> ZREVRANGE linux5 0 -1 withscores
1) "d"
2) "150"
3) "a"
4) "100"
5) "b"
6) "99"
7) "c"
8) "10"
回傳指定分數范圍的成員
zrangebyscore key min max [wishscores] [limit offect count]
zrevrangebyscore key max min [wishscores] [limit offect count]
zrangebyscore linux5 100 200 withscores
ZREVRANGEBYSCORE linux5 200 99 withscores
回傳指定分數范圍成員個數
zount key min max
zcount linux5 100 200
systemd管理redis
cat >/lib/systemd/system/redis.service <<EOF
[Unit]
Description=Redis
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /opt/redis_6379/conf/redis_6379.conf --daemonize yes
ExecStop=/usr/local/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/26236.html
標籤:NoSQL
上一篇:Hbase架構剖析
