redis是一種基於鍵值對的NOsql數據庫,與不少鍵值對數據庫不一樣,redis中的值string,hash,list,set,zset,geo
等多種數據機構和算法組成,由於redis會將全部的數據都放在內存中,因此他的讀寫性能很是驚人,不只如此,redis還能夠將內存中的數據利用快照和日誌的形式保存在硬盤上,redis還提供了鍵過時,發佈訂閱,流水線等附加功能css
Redis全部的數據都存放在內存中 Redis使用C語言實現 Redis使用單線程架構
5中數據結構:字符串,哈希,列表,集合,有序集合
提供了鍵過時功能,能夠實現緩存 提供了發佈訂閱功能,能夠實現消息系統 提供了pipeline功能,客戶端能夠將一批命令一次性傳到Redis,減小了網絡開銷
源碼不多,3.0版本之後5萬行左右. 使用單線程模型法,是的Redis服務端處理模型變得簡單. 不依賴操做系統的中的類庫
java,PHP,python,C,C++,Nodejs等
RDB和AOF
哨兵 集羣
緩存session會話 緩存用戶信息,找不到再去mysql查,查到而後回寫到redis
熱度排名排行榜 發佈時間排行榜
帖子瀏覽數 視頻播放次數 商品瀏覽數
踩/贊,粉絲,共同好友/喜愛,推送,打標籤
配合elk實現日誌收集
/data/soft/ #redis下載目錄 /opt/redis_{PORT}/{conf,logs,pid} #redis安裝目錄 /data/redis_{PORT}/redis_{PORT}.rdb #redis數據目錄 /root/scripts/redis_shell.sh #redis運維腳本
### 編輯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
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
redis-server /opt/redis_6379/conf/redis_6379.conf
ps -ef|grep redis netstat -lntup|grep redis
redis-cli
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的數據僅保存在內存中,服務器重啓後,數據將丟失.)
操做命令:java
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
建立集合 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
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