前記:好久沒回簡書了旺矾,最近學了redis,把一些總結(jié)的東西分享給大家夺克。
Redis是基于內(nèi)存的數(shù)據(jù)存儲系統(tǒng)箕宙,數(shù)據(jù)以key=>value形式存儲。value支持多種數(shù)據(jù)類型铺纽,包括string,hash,list,set,sorted set等等柬帕。
1.起步
啟動服務(wù)端: redis-server
啟動客戶端: redis-cli
驗證是否成功:
127.0.0.1:6379> PING
PONG
127.0.0.1:6379>
2.配置文件 redis.conf
CONFIG GET * //查看所有配置
daemonize: 默認為no,yes則為啟動redis-server時自動是后臺運行方式
port: 指定端口號
bind: 綁定ip狡门,只接受來自綁定ip的請求陷寝,更安全
3.redis 數(shù)據(jù)持久化
RDB原理:
- Redis使用fork函數(shù)復制一份當前進程(父) 的副本(子)
- 父進程繼續(xù)接收并處理客戶端發(fā)來的命令,而子進程開始將內(nèi)存中的數(shù)據(jù)寫入硬盤中的臨時文件
- 當子進程寫入完所有數(shù)據(jù)后會用該臨時文件替換舊的rdb文件其馏,到此一次快照操作完成凤跑。
AOF原理:
AOF持久化方式記錄每次對服務(wù)器寫的操作,當服務(wù)器重啟的時候會重新執(zhí)行這些命令來恢復原始的數(shù)據(jù)尝偎。運作方式是不斷地將命令追加到文件的末尾饶火。
如何選擇?
- 如果想達到像數(shù)據(jù)庫一樣的數(shù)據(jù)安全性能致扯,應(yīng)該同時使用兩種
- 若要求不是特別高肤寝,可以只使用RDB持久化
4.redis 開啟啟動服務(wù)
-
/etc/init.d/redis 加入以下內(nèi)容
#!/bin/sh ##chkconfig: 2345 80 90 ##description:auto_run PATH=/usr/local/bin:/sbin:/usr/bin:/bin REDISPORT=6379 EXEC=/usr/local/bin/redis-server REDIS_CLI=/usr/local/bin/redis-cli PIDFILE=/var/run/redis.pid CONF="/etc/redis.conf" case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed" else echo "Starting Redis server..." $EXEC $CONF fi if [ "$?"="0" ] then echo "Redis is running..." fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE does not exist, process is not running" else PID=$(cat $PIDFILE) echo "Stopping ..." $REDIS_CLI -p $REDISPORT SHUTDOWN while [ -x ${PIDFILE} ] do echo "Waiting for Redis to shutdown ..." sleep 1 done echo "Redis stopped" fi ;; restartforce-reload) ${0} stop ${0} start ;; *) echo "Usage: /etc/init.d/redis {startstoprestartforce-reload}" >&2 exit 1 esac #######
設(shè)置權(quán)限: chmod +x /etc/init.d/redis
-
加入開機啟動服務(wù)
- linux: sudo chkconfig redis on
- ubuntu: sudo sysv-rc-conf redis on
檢查是否加入服務(wù): service redis start
5.Redis 6種過期策略
- Volatile-lru : 只針對設(shè)置了過期時間的key
- AllKeys-lru: 刪除lru算法的key
- Volatile-random: 隨機刪除即將過期的key
- Allkeys-random: 隨機刪除
- Volatile-ttl: 刪除即將過期的key
- noeviction: 永不過期
Redis 事務(wù)
事務(wù)是一個單獨的隔離,事務(wù)中的所有命令都會序列化抖僵,按順序地執(zhí)行鲤看。事務(wù)在執(zhí)行的過程中,不會被其他客戶端發(fā)送來的命令請求所打斷耍群。
事務(wù)是一個原子操作义桂,事務(wù)中的命令要么全部被執(zhí)行(commit),要么全部不執(zhí)行蹈垢,可以回滾(rollback)慷吊。
一個事務(wù)從開始到執(zhí)行會經(jīng)歷三個階段
- 開始事務(wù)
- 命令入隊
- 執(zhí)行事務(wù)
序號 | 命令及描述 |
---|---|
1 | DISCARD 取消事務(wù),放棄執(zhí)行事務(wù)塊內(nèi)的所有命令曹抬。 |
2 | EXEC 執(zhí)行所有事務(wù)塊內(nèi)的命令溉瓶。 |
3 | MULTI 標記一個事務(wù)塊的開始。 |
4 | UNWATCH 取消 WATCH 命令對所有 key 的監(jiān)視。 |
5 | WATCH key [key ...] 監(jiān)視一個(或多個) key 堰酿,如果在事務(wù)執(zhí)行之前這個(或這些) key 被其他命令所改動疾宏,那么事務(wù)將被打斷。 |