目錄
1.Redis 簡介
Redis 是完全開源免費的,遵守BSD協議,是一個高性能的key-value數據庫。
1.1 Redis 與其他 key - value 緩存產品有以下三個特點:
1.Redis支持數據的持久化,可以將內存中的數據保存在磁盤中,重啟的時候可以再次加載進行使用。
2.Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
3.Redis支持數據的備份,即master-slave模式的數據備份。
1.2 Redis 優勢
1.性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
2.豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操作。
3.原子 – Redis的所有操作都是原子性的,意思就是要么成功執行要么失敗完全不執行。單個操作是原子性的。多個操作也支持事務,即原子性,通過MULTI和EXEC指令包起來。
4.豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。
1.3 Redis與其他key-value存儲有什么不同?
Redis有着更為復雜的數據結構並且提供對他們的原子性操作,這是一個不同於其他數據庫的進化路徑。Redis的數據類型都是基於基本數據結構的同時對程序員透明,無需進行額外的抽象。
Redis運行在內存中但是可以持久化到磁盤,所以在對不同數據集進行高速讀寫時需要權衡內存,因為數據量不能大於硬件內存。在內存數據庫方面的另一個優點是,相比在磁盤上相同的復雜的數據結構,在內存中操作起來非常簡單,這樣Redis可以做很多內部復雜性很強的事情。同時,在磁盤格式方面他們是緊湊的以追加的方式產生的,因為他們並不需要進行隨機訪問。
2.安裝Redis
選擇在Linux下安裝redis,現在采用虛擬機安裝的centos7 進行安裝的
1.安裝gcc redis是c語言編寫的
yum install gcc-c++
2.下載redis安裝包,在root目錄下執行
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
3.解壓redis安裝包
tar -zxvf redis-5.0.7.tar.gz
注意:我們把redis文件放到的/root目錄下,別不小心刪除了。也可以將它解壓到其他地方。
4.進入redis目錄
cd redis-5.0.7
5.編譯安裝
make
make install
make完后 redis-2.8.17/src目錄下會出現編譯后的redis服務程序redis-server,還有用於測試的客戶端程序redis-cli
make install之后我們可以在/usr/local/bin看到這些命令。
6.編輯配置文件(可選擇不修改,而使用默認配置)
在解壓后的redis-5.0.7目錄下有redis的配置文件redis.conf,我們可以根據需要修改配置文件,最好復制一份該文件出來做修改。
mkdir myconf
cp redis.conf myconf/
vim myconf/redis.conf
1.以守護進程的方式運行(后台運行),daemonize yes
2.綁定端口,port 6379 默認是6379 需要安全組開放端口
3.綁定IP,bind 127.0.0.1
4.指定數據存放路徑,dir /usr/local/redis/log rdb存放的路徑
5.指定持久化方式,appendonly yes
更多配置及其說明參考:[https://www.runoob.com/redis/redis-conf.html](https://www.runoob.com/redis/redis-conf.html)
7.將redis加入到開機啟動
vim /etc/rc.local
在里面添加內容:
/usr/local/bin/redis-server /root/redis-5.0.7/myconf/redis.conf
8.啟動redis
啟動redis:redis-server
上面是使用redis默認配置啟動的,如果我們需要使用我們剛剛自定義后的配置文件則使用命令:redis-server /root/redis-5.0.7/myconf/redis.conf
[root@aliyun ~]# redis-server
30123:C 26 Nov 2019 14:03:51.237 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
30123:C 26 Nov 2019 14:03:51.237 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=30123, just started
30123:C 26 Nov 2019 14:03:51.237 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 5.0.7 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 30123
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
30123:M 26 Nov 2019 14:03:51.239 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
30123:M 26 Nov 2019 14:03:51.239 # Server initialized
30123:M 26 Nov 2019 14:03:51.239 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
30123:M 26 Nov 2019 14:03:51.239 * Ready to accept connections
9.通過客戶端連接進入redis
如果我們直接輸入命令redis-cli提示(redis-cli: command not found)的話,去/usr/local/bin目錄下 執行./redis-cli
這種命令看起來不太舒服,或者我們直接安裝一個redis客戶端吧(在其他機器上連接redis服務器就是安裝這個客戶端):
# 從redis官網下載redis-cli的壓縮包
wget http://download.redis.io/redis-stable.tar.gz
# 解壓下載下來的壓縮包
tar xvzf redis-stable.tar.gz
# 進入redis-stable目錄
cd redis-stable
# 安裝
make
# 將redis-cli拷貝到/usr/local/bin/下,讓redis-cli指令可以在任意目錄下直接使用
cp src/redis-cli /usr/local/bin/
之后我們正常執行redis-cli就可以進入本機的redis了。如果要進入遠程redis服務則:redis-cli -h host -p port -a password
# 這是我使用自己修改過的配置文件運行redis,並使用redis-cli進入了本機redis
[root@aliyun ~]# redis-server redis-5.0.7/myconf/redis.conf
7240:C 26 Nov 2019 14:28:02.815 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
7240:C 26 Nov 2019 14:28:02.815 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=7240, just started
7240:C 26 Nov 2019 14:28:02.815 # Configuration loaded
[root@aliyun ~]# redis-cli
127.0.0.1:6379>
10.停止redis
考慮到redis可能正在進行數據持久化,所以不能強行終止redis進程。正確的做法是發送shutdown命令。
[root@aliyun ~]# redis-cli shutdown
在redis客戶端中也可以直接執行:shutdown
另外有停止命令:
[root@aliyun ~]# pkill redis
redis可以妥善處理SIGTERM信號,所以使用“kill redis進程pid”也可以正常結束redis,效果與shutdown一樣。
3.Redis基礎鍵命令
前面提到,Redis是一個鍵值(key-value)數據庫,所以有很多鍵命令,鍵命令用於管理redis的鍵(key)。
常用命令:
1 DEL key # 該命令用於在 key 存在時刪除 key。
2 DUMP key # 序列化給定 key ,並返回被序列化的值。
3 EXISTS key # 檢查給定 key 是否存在。
4 EXPIRE key seconds # 為給定 key 設置過期時間,以秒計。
5 EXPIREAT key timestamp # EXPIREAT 的作用和 EXPIRE 類似,都用於為 key 設置過期時間。 不同在於 EXPIREAT 命令接受的時間參數是 UNIX 時間戳(unix timestamp)。
6 PEXPIRE key milliseconds # 設置 key 的過期時間以毫秒計。
7 PEXPIREAT key milliseconds-timestamp # 設置 key 過期時間的時間戳(unix timestamp) 以毫秒計
8 KEYS pattern # 查找所有符合給定模式( pattern)的 key 。
9 MOVE key db # 將當前數據庫的 key 移動到給定的數據庫 db 當中。
10 PERSIST key # 移除 key 的過期時間,key 將持久保持。
11 PTTL key # 以毫秒為單位返回 key 的剩余的過期時間。
12 TTL key # 以秒為單位,返回給定 key 的剩余生存時間(TTL, time to live)。
13 RANDOMKEY # 從當前數據庫中隨機返回一個 key 。
14 RENAME key newkey # 修改 key 的名稱
15 RENAMENX key newkey # 僅當 newkey 不存在時,將 key 改名為 newkey 。
16 TYPE key # 返回 key 所儲存的值的類型。
更多命令請參考官網:https://redis.io/commands