NOSQL里典型的數(shù)據(jù)庫(kù)
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到城西網(wǎng)站設(shè)計(jì)與城西網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋城西地區(qū)。
redis
對(duì)網(wǎng)站服務(wù)器進(jìn)行寫入
傳統(tǒng)關(guān)系式數(shù)據(jù)庫(kù)無(wú)法過(guò)多的寫入
對(duì)數(shù)據(jù)庫(kù)要求:
數(shù)據(jù)庫(kù)高并發(fā)讀寫需求
解決方案:
(1:讀寫分離
兩臺(tái)主如果同時(shí)寫入會(huì)發(fā)生沖突
(2:水平分割:
關(guān)系式數(shù)據(jù)庫(kù)
數(shù)據(jù)之間有操作
海量數(shù)據(jù)的高效率存儲(chǔ)和訪問(wèn)的需求
用戶如果在海量數(shù)據(jù)中查詢某一條數(shù)據(jù)
記錄
數(shù)據(jù)庫(kù)的高擴(kuò)展性和高可用性
###############################################
任何一個(gè)領(lǐng)域,如果不能通過(guò)自己的努力
去獲取或者超出其他人的競(jìng)爭(zhēng)優(yōu)勢(shì)的話
想勝出,確實(shí)挺困難的?。?!
################################################
關(guān)系型數(shù)據(jù)庫(kù):
關(guān)系:可以理解為一張二維表,每個(gè)關(guān)系都具有一個(gè)關(guān)系名,就是通常說(shuō)的表名。
元組:可以理解為二維表中的一行,在數(shù)據(jù)庫(kù)中經(jīng)常被稱為記錄。
屬性:可以理解為二維表中的一列,在數(shù)據(jù)庫(kù)中經(jīng)常被稱為字段。
域:屬性的取值范圍,也就是數(shù)據(jù)庫(kù)中某一列的取值限制。
關(guān)鍵字:一組可以唯一標(biāo)識(shí)元組的屬性。數(shù)據(jù)庫(kù)中常稱為主鍵,由一個(gè)或多個(gè)列組成。
關(guān)系模式:指對(duì)關(guān)系的描述,其格式為:關(guān)系名(屬性1,屬性2,…,屬性N)。在數(shù)據(jù)庫(kù)中通常稱為表結(jié)構(gòu)。
Nosql版本
存儲(chǔ)方式不一樣
Redis
存在緩存中
很穩(wěn)定資格較老,成熟方案較多
MongoDB
存在文件中
社區(qū)活躍,更新活躍
HBASE
memcached:數(shù)據(jù)只保存在緩存中
cassandra
sequoiaDB:只跟ibm捆綁
redis
通過(guò)鍵值存儲(chǔ)數(shù)據(jù)
鍵值對(duì)應(yīng)數(shù)據(jù)如變量
nosql 和關(guān)系式數(shù)據(jù)庫(kù)配合使用
Memcache
速度較快、不能備份、支持十幾萬(wàn)QPS
(對(duì)一個(gè)服務(wù)器在一個(gè)時(shí)間范圍內(nèi)處理
的數(shù)據(jù)量的多少)
MONGODB
文檔型的數(shù)據(jù)庫(kù),查詢功能強(qiáng)大,支持
索引,最接近關(guān)系式數(shù)據(jù)庫(kù)的nosql
結(jié)構(gòu)相對(duì)單一
REDIS
基于緩存,速度較快,支持多種數(shù)據(jù)結(jié)構(gòu)
消耗內(nèi)存相對(duì)較多,支持?jǐn)?shù)萬(wàn)的QPS
通過(guò)其他軟件配合支持本地存儲(chǔ)
Redis 安裝配置:
1:安裝gcc*
/usr/src/
Redis-3.0.3.tar.gz
Tcl-8.5.7-6.e16.x86
Tar –zxvf redis-3.03
Cd redis-3.03
Make
Rpm –ivh Tcl-8.5.7-6.e16.x86
make test
make PREFIX=/usr/local/redis install
redis-check-aof
redis-check-dump
以上為兩種日志
Cd !$
Vim redis.config
/daemonize
Daemonize yes 后臺(tái)運(yùn)行
如果我想看一下數(shù)據(jù)庫(kù)里有什么鍵值
Keys *
Set age 19
Keys *
Set 設(shè)置
Get 查看
測(cè)試指定的并發(fā)類型
官方網(wǎng)站:http://www.redis.cn/
Redis.io
String 字符串
String字符串在一個(gè)鍵里面只能有一個(gè)值
Set設(shè)置鍵
Get查看鍵
./redis-cli
防止覆蓋:
Setnx name zhangsan
顯示為0不成功
Setnx name1 zhangsan
顯示為1則成功創(chuàng)建
Setex aa 30 111 設(shè)置臨時(shí)的鍵
Ttl aa 查看生存周期
-1 為永久生效
-2目標(biāo)鍵為不存在
Hexists c b3
批量設(shè)置多個(gè)鍵:
MSET a3 333 a4 444 a5 555
成功返回ok,失敗返回0
mget 批量查看鍵
msetnx 批量設(shè)置新建,防止覆蓋
MSETNX a5 555 a6 aaa
替換操作
Set b1 ‘hi zhangsan’
Get b1
替換指定鍵的鍵值從3里面開始替換
SETRANGE b1 3 lisi
(替換的內(nèi)容)
Get b1 查看原值,并替換新值
整個(gè)內(nèi)容替換成別的值并可以查看原來(lái)的值
Getset b1 ‘hello zhangsan’查看新值并替換新值
Get b1
Getrange b1 0 5查看部分鍵值
查找第一個(gè)到第五個(gè)字符
鍵值增減
Set c1 1
Set c2 2
Get c1
INCR c1
Get c1
以上會(huì)發(fā)生增加變化如果不想讓他加1 yici加10
INCRBY c1 +10 (必須為整數(shù)) 則依次增長(zhǎng)10
DECRBY c1 10 則每次執(zhí)行依次減10
APPEND b1 lisi 追加內(nèi)容為lisi四個(gè)字符
Strlen b1 查看鍵值長(zhǎng)度
Del b1 刪除b1 只能一次刪除一個(gè)
Hash 字符串
在一個(gè)鍵里面可以有多個(gè)值
Hset d1 name1 zhangsan創(chuàng)建一個(gè)為hash字段
鍵名 字段 鍵值
HGET d1 name1查看d1鍵名中name1字段值
一個(gè)鍵里面存放兩組數(shù)據(jù)
Hsetnx 設(shè)置新建防止它覆蓋
HSETNX d1 name3 xxx 1為成功
Hmget d1 name1 name2 name3 批量查看字段的值
Hkeys 查看指定鍵中的字段名稱:
HKEYS d1 只查看名字
Hgetall查看指定鍵的值
HDEL d1 name3 刪除指定字段
Hset d2 a 1
字段名a 數(shù)值1
Hkeys d2
Hincrby d2 a 5增加指定字段的值
List 雙向隊(duì)列
雙向隊(duì)列就是一種特殊的string類型
只是做了一個(gè)排序有一個(gè)前后順序
服務(wù)在建立連接的時(shí)候有個(gè)隊(duì)列
如何將這些消息排成一列進(jìn)行管理
有一個(gè)先后順序服務(wù)質(zhì)量
隊(duì)列里的每一個(gè)數(shù)據(jù)就可以看成一個(gè)string數(shù)據(jù)類型
有兩種排列順序一種是從左到右 0 1 2 3
一種是從右到左 -1 -2 -3
0 1 2 3 個(gè)數(shù)據(jù)
Lpush list1 1 從左往右插入
Lpush list1 2
Lrange list1 0 -1查看從左邊第一個(gè)到右邊第一個(gè)
Rpush list2 one two three four從右往左插入
Lrange list2 0 -1 查看
Linsert list2 before two 3 hi
After (在之后)
插入到隊(duì)列l(wèi)isi2中在two之前插入了hi
Lset list2 1‘five’ 在list2 中從左往右第二個(gè)位置把hi改為five
Rpush list3 hi 1 hi 2 hi 3 hi 4
Lrange list3 0 -1 查看總共八個(gè)元素
Lrem list3 -2 hi 刪除指定隊(duì)列中重復(fù)的元素
把倒數(shù)第一個(gè)第二個(gè)給刪除
Lrange list1 0 -1 查看
Ltrim list1 1 2刪除list1 表里面第1個(gè)第2個(gè)
Lrange list1 0 -1 查看已經(jīng)刪除
Lpush list8 11 12 13 14 15 16 新建隊(duì)列
Ltrim list8 0 3 保留前三個(gè)
Lrange list8 0 -1 查看所有
Lpop list8 刪除指定隊(duì)列中左邊的第一個(gè)元素
Rpop list8 刪除指定隊(duì)列中右邊的第一個(gè)元素
如果我想刪除的同時(shí)還能夠把這個(gè)
元素放到其他隊(duì)列里
Lrange list8 0 -1
Lrance list2 0 -1
Rpoplpush list8 list2 將list8隊(duì)列中的最后一個(gè)元素
移動(dòng)到list2隊(duì)列中
Llen 查看隊(duì)列長(zhǎng)度
Lien list2 1通過(guò)下標(biāo)來(lái)查看隊(duì)列中元素的值
Lindex list2 0
Zset 有序集合
Sorted set(zset)是set的升級(jí)版本,
它在set的基礎(chǔ)上增加了一個(gè)順序?qū)傩裕?/p>
這一屬性在添加修改元素的時(shí)候可以指定,
每次指定后,zset會(huì)自動(dòng)重新按新得值調(diào)整順序。
可以理解為有兩列的MySQL表,
一列存value,一列存順序。操作中key理解為zset的名字。
Set
如qq中的好有推薦
值 分?jǐn)?shù) 下標(biāo)
Sadd q1 1 添加集合
Smembers q1 查看集合所有元素
Sadd q1 234
Srandmember q1 隨機(jī)調(diào)用值
Spop q1 隨機(jī)刪除一個(gè)值
Srem q1 4 指定隨機(jī)刪除一個(gè)值
Smembers q1 查看集合所有元素
Scard q1 查看總共有幾個(gè)元素
Sismember q1 3 查看3是否為集合里的元素
Sadd q2 1 2 3 4
Sadd q3 3 4 5 6
Sdiff q2 q3 查看查集以第一個(gè)指定集合為主
Sdiffstore q4 q3 q2 查看并把q3 q2集合寫入q4
Smembers q4
Smembers q2查看集合中所有元素
Smembers q3
Sinter q2 q3 查看交集
Sinterstore q8 q2 q3 需要有一樣的才能保存到新集合
查看交集并保存到新集合
Sunion q2 q3 查看并集
Sunionstore q9 q2 q3
Smove q2 q3 1 先寫源集合在寫目標(biāo)集合把q2的值移動(dòng)到q3中
移動(dòng)集合中的元素
有序集合:比原來(lái)的集合多一個(gè)分?jǐn)?shù)
能夠?qū)崿F(xiàn)實(shí)時(shí)同步
Zadd z1 1 aa 3 bb 2 cc 2 dd
Zrange z1 0 -1 分?jǐn)?shù)是按照從小到大的排序
查看集合內(nèi)元素
Zrange z1 0 -1 withscores 分?jǐn)?shù)是按照從小到大的排序
Zrevrange z1 0 -1 withscores
會(huì)按照分?jǐn)?shù)從大到小排列
Zrangebyscore z1 2 3 withscores
查看 分?jǐn)?shù)從2到3的
Zrem z1 dd
刪除值
Zrevrange z1 0 -1 withscores
Zincrby z1 5 aa
Zrevrange z1 0 -1 withscores
Zincrby z1 4 dd 創(chuàng)建出來(lái)并把分?jǐn)?shù)設(shè)為4
添加分?jǐn)?shù)如不存在則創(chuàng)建
Zrange z1 0 -1 withscores
Zrank z1 aa
按照分?jǐn)?shù)從小到大的順序獲取指定值的下標(biāo)
Zrevrank z1 aa 按照分?jǐn)?shù)從小到大順序獲取指定值的下標(biāo)
Zcard z1 統(tǒng)計(jì)集合中元素個(gè)數(shù)
Zcount z1 4 10 統(tǒng)計(jì)指定分?jǐn)?shù)范圍內(nèi)的元素個(gè)數(shù)
Zrange z1 0 -1 withscores
Zrank z1 cc
Zremrangebyrank z1 1 2 刪除了bb和dd
刪除下標(biāo)在指定范圍內(nèi)的元素
Zrange z1 0 -1 withscores
Zremrangebyscore z1 1 3
根據(jù)分?jǐn)?shù)來(lái)刪除1 到3 之間的
刪除分?jǐn)?shù)在指定范圍內(nèi)的元素
Zadd z2 1 one 2 two 3 three
Zadd z3 2 two 3 three 3 four
Zinterstore z4 2 z2 z3 做交集
用z4 做集合、有兩個(gè)分別是z2、z3
Zrange z4 0 -1 查看他們的交集是對(duì)了兩邊都有
Zrange z4 0 -1 withscores 取交集并保存至新集合
有序集合取出以后分?jǐn)?shù)是要疊加的
在有序集合里插集無(wú)意義 因?yàn)闆]有那個(gè)命令
并集:
Zrange z2 0 -1 withscores 創(chuàng)建one1 two2 three3
Zrange z3 0 -1 withscores 創(chuàng)建two2 three3 four4
Zunionstore z5 2 z2 z3 取并集并保存至新集合(分?jǐn)?shù)疊加)
Zrange z5 0 -1 withscores查看新集合
全局的管理命令
Keys *
Dbsize 統(tǒng)計(jì)鍵的數(shù)量
Exists a2 查看某個(gè)鍵是否存在 0 不存在 1存在
-1永久 -2 臨時(shí)
Ttl a2
Expire q4 20可以設(shè)置為生效時(shí)間的鍵
設(shè)置q4有效時(shí)間為20秒
Ttl q4 會(huì)有變化
Rename d1 d2 改名將d1 改為d2
Type a1 查看鍵的數(shù)據(jù)類型
(如string list set zset)
Info 查看版本信息
Keys *
Select 1選擇去哪一個(gè)數(shù)據(jù)庫(kù)默認(rèn)為0數(shù)據(jù)庫(kù)
一共有0-15 16個(gè)數(shù)據(jù)庫(kù)
Move d2 1 把一個(gè)鍵移動(dòng)到其他數(shù)據(jù)庫(kù)中
在當(dāng)前數(shù)據(jù)庫(kù)中就無(wú)法看到d2啦!
Select 1 到1 數(shù)據(jù)庫(kù)里就可以看到啦!
Flushdb 清空當(dāng)前數(shù)據(jù)庫(kù)
Flushall 清空所有數(shù)據(jù)庫(kù)(16個(gè)數(shù)據(jù)庫(kù)里變量)
數(shù)據(jù)庫(kù)應(yīng)用
密碼驗(yàn)證:
Yum –y install gcc*
make
make test
Cd /usr/local/redis
Vim redis.conf 打開主配置文件
Daemonize yes設(shè)置為后臺(tái)啟動(dòng)
啟動(dòng)redis
小P 登入
Vim redis.conf 打開主配置文件
/requirepass 搜索
Requirepass 123.com 去掉注釋寫入密碼
Wq!
Pkill redis 重啟一下redis
./bin/redis-server ./redis.conf
./bin/redis-cli 登入
Keys * 會(huì)看不到任何的內(nèi)容
Auth 123.com 需要提供認(rèn)證認(rèn)證
或者登入的時(shí)候加選項(xiàng)指定密碼 –a 123.com
備份:
Nosql是能保存數(shù)據(jù)的nosql
是怎樣來(lái)保存的!
Cd /usr/local/redis
/usr/local/redis/bin/redis-server 空格
/usr/local/redis/redis.conf 開啟服務(wù)
以上為一行
/usr/local/redis/bin/redis-cli –a 123.com 登入
Keys * 就能看到啦
Save 保存
Exit
Pkill redis
Cd /root/
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf
/usr/local/redis/bin/redis-cli –a 123.com
Keys * 為空的!
Vim /usr/local/redis/redis.conf
/dir
/usr/local/redis (修改以前為dir ./)
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf
開啟
/usr/local/redis/bin/redis-cli -a 123.com 登入
Keys * 就會(huì)看到有不用去配置文件找
主從同步:
實(shí)驗(yàn)需求:一臺(tái)服務(wù)器上做主從
需要在一臺(tái)服務(wù)器上創(chuàng)建兩個(gè)工作目錄
Mysql mysqld
1從:從服務(wù)器的配置(一臺(tái)服務(wù)器上)
Cd /usr/local/redis/ 進(jìn)入工作目錄
Ls 會(huì)看到主配置文件redis.conf
Cd /usr/local/
Cp -r redis/ redis-slave/
Ls 就會(huì)有兩個(gè)工作目錄
Vim redis-slave/redis.conf
Pidfile /usr/local/redis-slave/redis.pid 修改為這個(gè)文件
Port 6380 改端口
dir /usr/local/redis-slave (修改以前為dir ./)
/slaveof 查找/
slaveof 127.0.0.1 6379 主服務(wù)器ip、端口
masterauth 123.com
wq!
/usr/local/redis-slave/bin/redis-server 空格
/usr/local/redis-slave/redis.conf
以上兩行為一行
netstat -anpt 查看端口有6380 6379
驗(yàn)證登入主服務(wù)器(在一臺(tái)機(jī)器上做)
/usr/local/redis/bin/redis-cli –a 123.com
Keys * 有變量
Set bb 111 創(chuàng)建一個(gè)bb
Keys *
Exit
用從服務(wù)器登入
Keys *
看到bb則代表創(chuàng)建成功
如果是在兩臺(tái)服務(wù)器上搭建則只需要
從服務(wù)器主配置文件里從服務(wù)器的ip地址指到主就行
Redis的五種數(shù)據(jù)結(jié)構(gòu)以及使用場(chǎng)景介紹
String——字符串
Hash——字典
List——列表
Set——集合
Sorted Set——有序集合
1. String——字符串
String 數(shù)據(jù)結(jié)構(gòu)是簡(jiǎn)單的 key-value 類型,value 不僅可以是 String,也可以是數(shù)字(當(dāng)數(shù)字類型用 Long 可以表示的時(shí)候encoding 就是整型,其他都存儲(chǔ)在 sdshdr 當(dāng)做字符串)。使用 Strings 類型,可以完全實(shí)現(xiàn)目前 Memcached 的功能,并且效率更高。還可以享受 Redis 的定時(shí)持久化(可以選擇 RDB 模式或者 AOF 模式),操作日志及 Replication 等功能。除了提供與 Memcached 一樣的 get、set、incr、decr 等操作外,Redis 還提供了下面一些操作:
1.LEN niushuai:O(1)獲取字符串長(zhǎng)度
2.APPEND niushuai redis:往字符串 append 內(nèi)容,而且采用智能分配內(nèi)存(每次2倍)
3.設(shè)置和獲取字符串的某一段內(nèi)容
4.設(shè)置及獲取字符串的某一位(bit)
5.批量設(shè)置一系列字符串的內(nèi)容
6.原子計(jì)數(shù)器
7.GETSET 命令的妙用,請(qǐng)于清空舊值的同時(shí)設(shè)置一個(gè)新值,配合原子計(jì)數(shù)器使用
1.Hash——字典
在 Memcached 中,我們經(jīng)常將一些結(jié)構(gòu)化的信息打包成 hashmap,在客戶端序列化后存儲(chǔ)為一個(gè)字符串的值(一般是 JSON 格式),比如用戶的昵稱、年齡、性別、積分等。這時(shí)候在需要修改其中某一項(xiàng)時(shí),通常需要將字符串(JSON)取出來(lái),然后進(jìn)行反序列化,修改某一項(xiàng)的值,再序列化成字符串(JSON)存儲(chǔ)回去。簡(jiǎn)單修改一個(gè)屬性就干這么多事情,消耗必定是很大的,也不適用于一些可能并發(fā)操作的場(chǎng)合(比如兩個(gè)并發(fā)的操作都需要修改積分)。而 Redis 的 Hash 結(jié)構(gòu)可以使你像在數(shù)據(jù)庫(kù)中 Update 一個(gè)屬性一樣只修改某一項(xiàng)屬性值。
存儲(chǔ)、讀取、修改用戶屬性
1.List——列表
List 說(shuō)白了就是鏈表(redis 使用雙端鏈表實(shí)現(xiàn)的 List),相信學(xué)過(guò)數(shù)據(jù)結(jié)構(gòu)知識(shí)的人都應(yīng)該能理解其結(jié)構(gòu)。使用 List 結(jié)構(gòu),我們可以輕松地實(shí)現(xiàn)最新消息排行等功能(比如新浪微博的 TimeLine )。List 的另一個(gè)應(yīng)用就是消息隊(duì)列,可以利用 List 的 *PUSH 操作,將任務(wù)存在 List 中,然后工作線程再用 POP 操作將任務(wù)取出進(jìn)行執(zhí)行。Redis 還提供了操作 List 中某一段元素的 API,你可以直接查詢,刪除 List 中某一段的元素
1.微博 TimeLine
2.消息隊(duì)列
1.Set——集合
Set 就是一個(gè)集合,集合的概念就是一堆不重復(fù)值的組合。利用 Redis 提供的 Set 數(shù)據(jù)結(jié)構(gòu),可以存儲(chǔ)一些集合性的數(shù)據(jù)。比如在微博應(yīng)用中,可以將一個(gè)用戶所有的關(guān)注人存在一個(gè)集合中,將其所有粉絲存在一個(gè)集合。因?yàn)?nbsp;Redis 非常人性化的為集合提供了求交集、并集、差集等操作,那么就可以非常方便的實(shí)現(xiàn)如共同關(guān)注、共同喜好、二度好友等功能,對(duì)上面的所有集合操作,你還可以使用不同的命令選擇將結(jié)果返回給客戶端還是存集到一個(gè)新的集合中。
1.共同好友、二度好友
2.利用唯一性,可以統(tǒng)計(jì)訪問(wèn)網(wǎng)站的所有獨(dú)立 IP
3.好友推薦的時(shí)候,根據(jù) tag 求交集,大于某個(gè) threshold 就可以推薦
1.Sorted Set——有序集合
和Sets相比,Sorted Sets是將 Set 中的元素增加了一個(gè)權(quán)重參數(shù) score,使得集合中的元素能夠按 score 進(jìn)行有序排列,比如一個(gè)存儲(chǔ)全班同學(xué)成績(jī)的 Sorted Sets,其集合 value 可以是同學(xué)的學(xué)號(hào),而 score 就可以是其考試得分,這樣在數(shù)據(jù)插入集合的時(shí)候,就已經(jīng)進(jìn)行了天然的排序。另外還可以用 Sorted Sets 來(lái)做帶權(quán)重的隊(duì)列,比如普通消息的 score 為1,重要消息的 score 為2,然后工作線程可以選擇按 score 的倒序來(lái)獲取工作任務(wù)。讓重要的任務(wù)優(yōu)先執(zhí)行。
1.帶有權(quán)重的元素,比如一個(gè)游戲的用戶得分排行榜
2.比較復(fù)雜的數(shù)據(jù)結(jié)構(gòu),一般用到的場(chǎng)景不算太多
二、redis 其他功能使用場(chǎng)景
1.訂閱-發(fā)布系統(tǒng)
Pub/Sub 從字面上理解就是發(fā)布(Publish)與訂閱(Subscribe),在 Redis 中,你可以設(shè)定對(duì)某一個(gè) key 值進(jìn)行消息發(fā)布及消息訂閱,當(dāng)一個(gè) key 值上進(jìn)行了消息發(fā)布后,所有訂閱它的客戶端都會(huì)收到相應(yīng)的消息。這一功能最明顯的用法就是用作實(shí)時(shí)消息系統(tǒng),比如普通的即時(shí)聊天,群聊等功能。
2:事務(wù)——Transactions
誰(shuí)說(shuō) NoSQL 都不支持事務(wù),雖然 Redis 的 Transactions 提供的并不是嚴(yán)格的 ACID 的事務(wù)(比如一串用 EXEC 提交執(zhí)行的命令,在執(zhí)行中服務(wù)器宕機(jī),那么會(huì)有一部分命令執(zhí)行了,剩下的沒執(zhí)行),但是這個(gè) Transactions 還是提供了基本的命令打包執(zhí)行的功能(在服務(wù)器不出問(wèn)題的情況下,可以保證一連串的命令是順序在一起執(zhí)行的,中間有會(huì)有其它客戶端命令插進(jìn)來(lái)執(zhí)行)。Redis 還提供了一個(gè) Watch 功能,你可以對(duì)一個(gè) key 進(jìn)行 Watch,然后再執(zhí)行 Transactions,在這過(guò)程中,如果這個(gè) Watched 的值進(jìn)行了修改,那么這個(gè) Transactions 會(huì)發(fā)現(xiàn)并拒絕執(zhí)行。