一 Redis介紹
1.1 引言
- 由於用戶量增大,請求數量也隨之增大,數據庫壓力過大。
- 多臺服務器之間,數據不同步。
- 多臺服務器之間的鎖,已經不存在互斥性了。
1.2 NoSQL
Redis就是一款NoSql
NoSQL -> 非關係型數據庫 -> Not Only SQL
- key-value: Redis...
- 文檔型:MongoDB,ElasticSearch,solr...
- 面向列:Hbase...
- 圖形化:Neo4j...
NoSQL只是一種概念,泛指非關係型數據庫,和關係型數據庫做一個區分。
1.3 Redis介紹
有一位意大利人,在開發一款LLOOGG的統計頁面,因爲MySQL的性能不好,自己研發了一款非關係型數據庫,並命名爲Redis
Redis(Remote Dictionary Server)即遠程字典服務,Redis是c語言編寫的,是一款基於key-value的NoSQL,而且Redis是基於內存存儲數據的,Redis還提供多種持久化機制,性能可以達到110000次/s讀取數據已經810000次/s寫入數據,Redis還提供了主從,哨兵以及集羣的搭建方式,可以更方便的橫向擴展和垂直擴展。
二 Redis安裝
2.1-1 docker安裝
docker鏡像市場:http://hub.daocloud.io/
新建docker-compose.yml
version: '3.1' services: redis: image: daocloud.io/library/redis:5.0.7 restart: always container_name: redis environment: - TZ=Asia/Shanghai ports: - 6379:6379
使用docker-compose up命令下載安裝啓動。
2.1-2 虛擬機安裝
#編譯安裝 ##下載和編譯 1. yum install wget #如沒有wget,先安裝wget 2. wget https://download.redis.io/releases/redis-5.0.9.tar.gz #下載redis源碼包 3. tar xf redis-5.0.9.tar.gz #解壓redis壓縮包 4. cd redis-5.0.9 5. vi README.md #查看說明文檔,裏面有告訴我們怎麼編譯安裝 6. make #嘗試使用make命令進行編譯,此時如果服務器沒有gcc環境會報錯 7. yum install gcc -y #安裝gcc 8. make distclean #由於之前已經make了一次,需要先清理之前的make 9. make #繼續編譯 #安裝 10. make PREFIX=/opt/bigdata/redis5 install #指定安裝目錄進行安裝 11 vi /etc/profile #添加環境變量 export REDIS_HOME=/opt/bigdata/redis5 export PATH=$PATH:$REDIS_HOME/bin 12 source /etc/profile 或者 . /etc/profile #使環境變量生效,source和.是一樣的 #後臺服務 13 cd utils #進入redis目錄下面的utils目錄 14 ./install_server.sh #執行安裝後臺服務腳本,按照提示輸入信息即可完成後臺服務安裝,可多次執行,安裝多個實例 # 通過系統命令可啓動關閉redis 15 service reids_6379 start/status/stop (centos6.x) systemctl redis_6379 start/status/stop (centos7.x)
2.2 使用redis-cli連接Redis
#進入容器docker exec -it 容器id bash#在容器內使用客戶端連接redis-cli
2.3 使用圖形化界面連接Redis
下載地址:鏈接: https://pan.baidu.com/s/1Fujnmu4g8rgvSh6CsFYn8A 提取碼: 1234
傻瓜式安裝
三 Redis常用命令
3.1 Redis存儲數據的結構
常用的5種數據結構
- key-string:一個key對於一個值
- key-hash:一個key對應一個Map
- key-list:一個key對應一個列表
- key-set:一個key對應一個集合
- key-zset:一個key對應一個有序的集合
另外三種數據結構
HyperLogLog:計算近似值
GEO:地理位置
BIT:位圖,一般存儲的也是一個字符串,存儲的是一個byte[]
五種常用的存儲數據結構圖
key-string:最常用,一般用於存儲一個值
key-hash:存儲一個對象數據
key-list:使用list結構實現棧和隊列結構
key-set:交集,差集和並集的操作
key-zset:排行榜,積分存儲等操作
3.2 string常用命令
文檔:http://redisdoc.com/string/index.html#
# 1、添加值 set key value #2、取值 get key #3、批量操作 mset key value [key value...] mget key [key...]
#4、自增命令(自增1) incr key #5、自減命令(自減1) decr key #6、自增或自減指定數量 incrby key increment decrby key increment
#7、設置值的同時設置生存時間(每次向redis中添加數據時,儘量都設置生存時間) setex key second value #8、設置值,如果當前key不存在的話(如果這個key存在,什麼事都不做,如果這個key不存在,和set命令一樣) setnx key value #9、在key對應的value後,追加內容 append key value #10、查看value字符串的長度 strlen key
3.3 hash常用命令
#1、存儲數據 hset key field value #2、獲取數據 hget key field #3、批量操作 hmset key field value [field value ...] hmget key field [field ...]
#4、自增(指定自增的值) hincrby key field increment
#5、設置值(如果key-field不存在,那麼就正常添加,如果存在,什麼事都不做) hsetnx key field value #6、檢查field是否存在 hexists key field #7、刪除key對應的某個或多個field hdel key field [field...]
#8、獲取當前hash結構中的全部field和value hgetall key #9、獲取當前hash結構中的全部field hkeys key #10、獲取當前hash結構中的全部value hvals key #11、獲取當前hash結構中field的數量 hlen key
3.4 list常用命令
#1、存儲數據(從左側插入數據,從右側插入數據) lpush key value [value...] rpush key value [value...] #2、存儲數據(如果key不存在,什麼事都不做,如果key存在,但是不是list機構,什麼都不做) lpushx key value rpushx key value #3、修改數據(修改指定索引位置的值,如果index超出整個列表的長度會失敗) lset key index value
#4、彈棧方式獲取數據(左側/右側彈出數據) lpop key rpop key #5、獲取指定索引範圍的數據(start從0開始,stop輸入-1,代表最後一個,-2代表倒數第二部) lrange key start stop #6、獲取指定索引位置的數據 lindex key index #7、獲取整個列表的長度 llen key
#8、刪除列表中的數據(他是刪除當前列表中的count個value值,count>0從左側向右側刪除,count<0從右側向左側刪除),count=0,刪除列表全部的value lrem key count value #9、保留列表中的數據(保留指定範圍內的數據,超過整個索引範圍被移除掉) ltrim key start stop #10、將一個列表中最後的一個數據,插入到另外一個列表的頭部位置 rpoplpush list1 list2
3.5 set常用命令
#1、存儲數據 sadd key member [member...] #2、獲取數據(獲取全部數據) smembers key #3、隨機獲取一個數據(獲取的同時移除數據,count默認爲1,代表彈出數據的數量) spop key [count]
#4、交集(取多個set集合交集) sinter set1 set2... #5、並集(獲取全部集合中的數據) sunion set1 set2... #6、差集(獲取多個集合中不一樣的數據,使用第一個集合進行取進行比較) sdiff set1 set2...
#7、刪除數據 srem key member [member...] #8、查看當前的set集合中是否包含這個值 sismember key member
3.6 zset常用命令
#1、添加數據(score必須是數值,member不允許重複) zadd key score member [score member...] #2、修改member的分數、(如果member是存在於key中的,正常增加分數,如果member不存在,這個命令相當於zadd) zincrby key increment member
#3、查看指定的member的分數 zscore key member #4、獲取zset中數據的數量 zcard key #5、根據score的範圍查詢member數量 zcount key min max #6、刪除zset中的成員 zrem key member [member...]
#7、根據分數從小到大排序,獲取指定範圍內的數據(withscores如果添加這個參數,那麼會返回member對應的分數) zrange key start stop [withscores] #8、根據分數從大到小排序,獲取指定範圍內的數據(withscores如果添加這個參數,那麼會返回member對應的分數) zrevrenge key start stop [withscores] #9、根據分數的範圍獲取member(withscores代表同時返回score,添加limit,就和MySQL中一樣,如果不希望等於min或者max的值被查詢出來,可以採用‘(分數’ 相當於<或者>,但不等於,是一個開區間,最大值和最小值使用+inf和-inf來標識) zrangebyscore key min max [withsores] [limit offset count] #10、根據分數的範圍獲取member(withscores代表同時返回score,添加limit,就和MySQL中一樣) zrevrangebyscore key max min [withsores] [limit offset count]
3.7 key常用命令
#1、查看Redis中的全部key(pattern:*,xxx*,*xxx) keys pattern #2、查看某一個key是否存在(1 - key存在,0 - key不存在) exists key #3、刪除key del key [key...]
#4、設置key的生存時間,單位爲秒,單位爲毫秒. expire key second pexpire key milliseconds #5、設置key的生存時間,單位爲秒,單位爲毫秒,設置能活到什麼時間點 expireat key timestamp pexpireat key milliseconds #6、查看key的剩餘生存時間,單位爲秒,單位爲毫秒(-2 - 當前key不存在;-1 - 當前key沒有設置生存時間;具體的生存時間) ttl key pttl key #7、移除key的生存時間(1 - 移除成功,0 - key不存在生存時間,key不存在) persist key
#8、選擇操作的庫 select 0~15 #9、移動key到另外一個庫中 move key db
3.8 庫的常用命令
#1、清空當前所在的數據庫 flushdb #2、清空全部數據庫 flushall #3、查看當前數據庫中有多少個key dbsize #4、查看隨後一次操作的時間 lastsave #5、實時監控Redis服務接收到的命令 monitor
本次是這次Redis學習的前三部分,下一篇文章會分享
- Java連接Redis
- Redis其他配置以及集羣
- Redis常見問題
學無止境,關注我(微信搜索“良辰”或掃描下面的二維碼),我們一起進步。如果覺得文章還可以,請給我三連擊,謝謝~我們下期見。