成神之路之Redis從頭開始學習(一)

一 Redis介紹

1.1 引言

  1. 由於用戶量增大,請求數量也隨之增大,數據庫壓力過大。
  2. 多臺服務器之間,數據不同步。
  3. 多臺服務器之間的鎖,已經不存在互斥性了。

1.2 NoSQL

Redis就是一款NoSql

NoSQL -> 非關係型數據庫 -> Not Only SQL

  1. key-value: Redis...
  2. 文檔型:MongoDB,ElasticSearch,solr...
  3. 面向列:Hbase...
  4. 圖形化: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常見問題

學無止境,關注我(微信搜索“良辰”或掃描下面的二維碼),我們一起進步。如果覺得文章還可以,請給我三連擊,謝謝~我們下期見。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章