redis入門
Nosql與sql
Nosql是什麼
NoSQL,指的是非關係型的資料庫。NoSQL有時也稱作Not Only SQL的縮寫,是對不同於傳統的關係型資料庫的資料庫管理系統的統稱。
sql是什麼
sql指的是關係型資料庫。關係型資料庫要滿足4大特徵,也就是我們常提的ACID原則(A原子性、C一致性、I獨立性、D永續性)
sql與nosql
- NoSQL用於超大規模資料的儲存。(例如谷歌或Facebook每天為他們的使用者收集萬億位元的資料)。這些型別的資料儲存不需要固定的模式,無需多餘操作就可以橫向擴充套件。
- sql支援關係複雜的資料查詢,nosql反之
- sql支援事務性,nosql不支援
典型的nosql資料庫
Mongodb、redis、Hbase hadoop
redis
redis介紹
Redis 是一個開源(BSD許可)的,記憶體中的資料結構儲存系統,它可以用作資料庫、快取和訊息中介軟體
redis是c語言編寫的,支援資料持久化,是key-value型別資料庫。
應用在快取,佇列系統中
redis支援資料備份,也就是master-slave模式
redis優勢
- 效能高,讀取速度10萬次每秒(還可以透過叢集再度提升)
- 寫入速度8萬次每秒
- 所有操作支援原子性
應用情況
- 用作快取資料庫,資料放在記憶體中
- 替代某些場景下的mysql,如社交類app
- 大型系統中,可以儲存session資訊,購物車訂單
redis安裝
存在透過yum和原始碼安裝兩種情況,這裡直接寫執行步驟,不做贅述。
# 1.yum安裝
# 檢視redis版本
yum list redis
# 安裝redis
yum install redis
# 啟動redis
systemctl start redis
# 2. 原始碼安裝
# 下載redis原始碼
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
# 解壓縮
tar -zxf redis-4.0.10.tar.gz
# 編譯安裝
make && make install
# 安裝到指定目錄,預設在redis目錄下的src底下
# 下面自己配置環境變數
echo PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/vimx/bin:/root/binopt/redis-4.0.10/src" >> /etc/profile
# 執行以完成安裝
[root@localhost src]# redis-server --version
Redis server v=4.0.10 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=92305af7dfef4310
redis可執行檔案
# redis的客戶端
./redis-cli
# redis的服務端
./redis-server
# 用於叢集管理
./redis-sentinel
# redis效能測試工具
./redis-benchmark
# 用於修復出問題的dump.rdb檔案
./redis-check-dump
# 用於修復出問題的AOF檔案
./redis-check-aof
redis基本配置檔案
# 如果使用原始碼安裝的話,那麼配置檔案目錄在src下的redis.conf。
# redis預設不會呼叫配置檔案啟動。需要指定配置檔案
redis-server redis.conf
# 重要配置
bind 127.0.0.1 # 配置可連線的ip
port 6379 # 配置redis啟動埠
daemonize yes # 守護程序方式執行(後臺執行)
dbfilename dump.rdb # 資料檔案指定
dir /var/lib/redis/ # 資料檔案存放路徑
logfile /var/log/redis/redis-server.log # 日誌檔案
slaveof # 主從複製
requirepass password # 密碼
redis支援的資料型別
redis是一種高階的key:values儲存系統。支援下面5種資料型別:
- 字串(strings)
- 雜湊(hashes)
- 列表(lists)
- 集合(sets)
- 有序集合(sorted sets)
基本命令
# 進入redis服務端
redis-cli
# 接下來可以執行redis命令
ping # 回覆pong說明通了
keys * # 檢視所有的鍵
set key value # 設定一個鍵值
expire key # 給key加上過期時間
get key # 獲取一個鍵的值
type key # 顯示value的型別
ttl key # 檢視key的過期時間。(-1表示永不過期,-2表示已過期)
persist key # 取消key的過期時間(對過期的key沒用)
exists key # 監測key是否存在
del key # 刪除key
dbsize # 計算key的數量
flushall # 刪除所有庫的所有鍵
flushdb # 刪除當前資料庫的所有鍵
各資料型別常用命令
詳細:詳細命令可以參考菜鳥教程、py魚部落格隨筆
# string
set key # 設定key
get key # 獲取key
append key value # 追加string
mset key1 value1 key2 value2 # 設定多個鍵值對
mget key1 key2 key3 # 獲取多個鍵值對
del key # 刪除key
incr key # 遞增+1
decr key # 遞減-1
# list
lpush 列表名 value1 value2 # 從左一個一個插入
rpush 列表名 value1 value2 # 從右一個一個插入
lrange 列表名 第一個切片值 第二個切片值 # 從第一個到第二個之間的列表值(如 lrange paidui 0 -1 拿列表所有的值)
ltrim 列表名 擷取開頭 擷取結尾 # 將列表切片覆蓋原列表,注意取前也取後
lpop 列表名 # 從左刪
rpop 列表名 # 從右刪
# set
sadd/srem key value1 value2 # 新增/刪除 元素
sismember key value # 判斷是否為set的一個元素
smembers key # 返回集合所有的成員
sdiff key1 key2 # 返回一個集合和其他集合的差異(差集key1-key2)
sinter key1 key2 # 返回幾個集合的交集(交集)
sunion key1 key2 # 返回幾個集合的並集(並集)
# 雜湊(dict)
hset key field value # 設定雜湊值(一個)
hget key field # 獲取雜湊值
hmset key field1 value1 field2 value2 # 設定多對雜湊值
hmget key field1 field2 # 獲取多對雜湊值
hsetnx key field value # 如果雜湊已經存在,則不設定(防止覆蓋key)
hkeys key # 返回所有keys
hvals key # 返回所有values
hlen key # 返回雜湊包含域(field)的數量
hdel key field # 刪除雜湊指定的域(field)
hexists key field # 判斷是否存在