redis 基礎(chǔ)應(yīng)用(一)

創(chuàng)新互聯(lián)擁有網(wǎng)站維護(hù)技術(shù)和項(xiàng)目管理團(tuán)隊(duì),建立的售前、實(shí)施和售后服務(wù)體系,為客戶提供定制化的成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司、網(wǎng)站維護(hù)、重慶服務(wù)器托管解決方案。為客戶網(wǎng)站安全和日常運(yùn)維提供整體管家式外包優(yōu)質(zhì)服務(wù)。我們的網(wǎng)站維護(hù)服務(wù)覆蓋集團(tuán)企業(yè)、上市公司、外企網(wǎng)站、商城開發(fā)、政府網(wǎng)站等各類型客戶群體,為全球上千余家企業(yè)提供全方位網(wǎng)站維護(hù)、服務(wù)器維護(hù)解決方案。
==============================================================================
概述:
Redis的相關(guān)介紹,功能,優(yōu)勢及于其他key-value數(shù)據(jù)庫的對(duì)比;
Redis的安裝及程序環(huán)境;
命令行客戶端命令
Redis 的數(shù)據(jù)結(jié)構(gòu)
==============================================================================
1.簡介
★Redis
REmote DIctionary Server(Redis) 是一個(gè)由Salvatore Sanfilippo寫的 key-value存儲(chǔ)系統(tǒng)。
Redis是一個(gè)開源的使用ANSI C語言編寫、遵守BSD協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。
它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因?yàn)橹担╲alue)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型。
☉REmote DIctionary Server(Redis)
內(nèi)存存儲(chǔ);
持久化;
主從;
Cluster
☉Redis 與其他 key - value 緩存產(chǎn)品有以下三個(gè)特點(diǎn):
Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時(shí)候可以再次加載進(jìn)行使用。
Redis不僅僅支持簡單的key-value類型的數(shù)據(jù),同時(shí)還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。
Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。
2.功能
★支持的功能如下:
☉數(shù)據(jù)結(jié)構(gòu)服務(wù)器:
值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型。
☉單進(jìn)程
CPU 并非瓶頸
☉持久化機(jī)制
snapshoting
AOF
☉Replication
主從:
主:rw
從:read-only
3.優(yōu)勢
★優(yōu)勢
性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
豐富的數(shù)據(jù)類型– Redis支持二進(jìn)制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類型操作
原子 – Redis的所有操作都是原子性的,同時(shí)Redis還支持對(duì)幾個(gè)操作全并后的原子性執(zhí)行。
豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。
4.Redis與其他key-value存儲(chǔ)有什么不同
★區(qū)別:
Redis有著更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)并且提供對(duì)他們的原子性操作,這是一個(gè)不同于其他數(shù)據(jù)庫的進(jìn)化路徑。Redis的數(shù)據(jù)類型都是基于基本數(shù)據(jù)結(jié)構(gòu)的同時(shí)對(duì)程序員透明,無需進(jìn)行額外的抽象。
Redis運(yùn)行在內(nèi)存中但是可以持久化到磁盤,所以在對(duì)不同數(shù)據(jù)集進(jìn)行高速讀寫時(shí)需要權(quán)衡內(nèi)存,因?yàn)閿?shù)據(jù)量不能大于硬件內(nèi)存。在內(nèi)存數(shù)據(jù)庫方面的另一個(gè)優(yōu)點(diǎn)是,相比在磁盤上相同的復(fù)雜的數(shù)據(jù)結(jié)構(gòu),在內(nèi)存中操作起來非常簡單,這樣Redis可以做很多內(nèi)部復(fù)雜性很強(qiáng)的事情。同時(shí),在磁盤格式方面他們是緊湊的以追加的方式產(chǎn)生的,因?yàn)樗麄儾⒉恍枰M(jìn)行隨機(jī)訪問。
★和memcached的區(qū)別
Redis不僅僅支持簡單的k/v類型的數(shù)據(jù),同時(shí)還提供list,set,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。memcache僅支持字符串型值(流式化數(shù)據(jù))
Redis為單線程,Memcached為多線程,但性能上相當(dāng);
Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。
Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤中,重啟的時(shí)候可以再次加載進(jìn)行使用。(在Redis中,并不是所有的數(shù)據(jù)都一直存儲(chǔ)在內(nèi)存中的。這是和Memcached相比一個(gè)最大的區(qū)別)
應(yīng)用場景不一樣:Redis出來作為NoSql數(shù)據(jù)庫使用外,還能用做消息隊(duì)列、數(shù)據(jù)堆棧和數(shù)據(jù)緩存等;Memcached適合于緩存SQL語句、數(shù)據(jù)集、用戶臨時(shí)性數(shù)據(jù)、延遲查詢數(shù)據(jù)和session等。
★redis、memcache、MongoDB 對(duì)比
從以下幾個(gè)維度,對(duì)redis、memcache、mongoDB 做了對(duì)比,歡迎拍磚
☉性能
都比較高,性能對(duì)我們來說應(yīng)該都不是瓶頸
總體來講,TPS方面redis和memcache差不多,要大于mongodb
☉操作的便利性
memcache數(shù)據(jù)結(jié)構(gòu)單一
redis豐富一些,數(shù)據(jù)操作方面,redis更好一些,較少的網(wǎng)絡(luò)IO次數(shù)
mongodb支持豐富的數(shù)據(jù)表達(dá),索引,最類似關(guān)系型數(shù)據(jù)庫,支持的查詢語言非常豐富
☉內(nèi)存空間的大小和數(shù)據(jù)量的大小
redis在2.0版本后增加了自己的VM特性,突破物理內(nèi)存的限制;可以對(duì)key value設(shè)置過期時(shí)間(類似memcache)
memcache可以修改最大可用內(nèi)存,采用LRU算法
mongoDB適合大數(shù)據(jù)量的存儲(chǔ),依賴操作系統(tǒng)VM做內(nèi)存管理,吃內(nèi)存也比較厲害,服務(wù)不要和別的服務(wù)在一起
☉可用性(單點(diǎn)問題)
對(duì)于單點(diǎn)問題
redis,依賴客戶端來實(shí)現(xiàn)分布式讀寫;主從復(fù)制時(shí),每次從節(jié)點(diǎn)重新連接主節(jié)點(diǎn)都要依賴整個(gè)快照,無增量復(fù)制,因性能和效率問題,
所以單點(diǎn)問題比較復(fù)雜;不支持自動(dòng)sharding,需要依賴程序設(shè)定一致hash 機(jī)制。
一種替代方案是,不用redis本身的復(fù)制機(jī)制,采用自己做主動(dòng)復(fù)制(多份存儲(chǔ)),或者改成增量復(fù)制的方式(需要自己實(shí)現(xiàn)),一致性問題和性能的權(quán)衡Memcache本身沒有數(shù)據(jù)冗余機(jī)制,也沒必要;對(duì)于故障預(yù)防,采用依賴成熟的hash或者環(huán)狀的算法,解決單點(diǎn)故障引起的抖動(dòng)問題。
mongoDB支持master-slave,replicaset(內(nèi)部采用paxos選舉算法,自動(dòng)故障恢復(fù)),auto sharding機(jī)制,對(duì)客戶端屏蔽了故障轉(zhuǎn)移和切分機(jī)制。
☉可靠性(持久化)
對(duì)于數(shù)據(jù)持久化和數(shù)據(jù)恢復(fù),
redis支持(快照、AOF):依賴快照進(jìn)行持久化,aof增強(qiáng)了可靠性的同時(shí),對(duì)性能有所影響
memcache不支持,通常用在做緩存,提升性能;
MongoDB從1.8版本開始采用binlog方式支持持久化的可靠性
☉數(shù)據(jù)一致性(事務(wù)支持)
Memcache 在并發(fā)場景下,用cas保證一致性
redis事務(wù)支持比較弱,只能保證事務(wù)中的每個(gè)操作連續(xù)執(zhí)行
mongoDB不支持事務(wù)
☉數(shù)據(jù)分析
mongoDB內(nèi)置了數(shù)據(jù)分析的功能(mapreduce),其他不支持
☉應(yīng)用場景
redis:數(shù)據(jù)量較小的更性能操作和運(yùn)算上
memcache:用于在動(dòng)態(tài)系統(tǒng)中減少數(shù)據(jù)庫負(fù)載,提升性能;做緩存,提高性能(適合讀多寫少,對(duì)于數(shù)據(jù)量比較大,可以采用sharding)
MongoDB:主要解決海量數(shù)據(jù)的訪問效率問題
1.安裝及程序環(huán)境
★安裝方法:
編譯安裝
rpm包安裝
★程序環(huán)境
☉配置文件
/etc/redis.conf
/etc/redis-sentinel.conf
☉主程序
/usr/bin/redis-server
/usr/bin/redis-sentinel
監(jiān)聽端口:6379/tcp
☉命令行客戶端
/usr/bin/redis-cli
演示:
1.安裝程序包
# 配置好epel倉庫 [root@centos7 ~]# yum install redis
2.程序環(huán)境如下:
[root@centos7 ~]# rpm -ql redis /etc/logrotate.d/redis /etc/redis-sentinel.conf /etc/redis.conf /etc/systemd/system/redis-sentinel.service.d /etc/systemd/system/redis-sentinel.service.d/limit.conf /etc/systemd/system/redis.service.d /etc/systemd/system/redis.service.d/limit.conf /usr/bin/redis-benchmark /usr/bin/redis-check-aof /usr/bin/redis-check-rdb /usr/bin/redis-cli /usr/bin/redis-sentinel /usr/bin/redis-server /usr/bin/redis-shutdown /usr/lib/systemd/system/redis-sentinel.service /usr/lib/systemd/system/redis.service /usr/lib/tmpfiles.d/redis.conf /usr/share/doc/redis-3.2.3 /usr/share/doc/redis-3.2.3/00-RELEASENOTES /usr/share/doc/redis-3.2.3/BUGS /usr/share/doc/redis-3.2.3/CONTRIBUTING /usr/share/doc/redis-3.2.3/MANIFESTO /usr/share/doc/redis-3.2.3/README.md /usr/share/licenses/redis-3.2.3 /usr/share/licenses/redis-3.2.3/COPYING /var/lib/redis /var/log/redis /var/run/redis
3.配置文件/etc/redis.conf 如下:
# 備份
[root@centos7 ~]# cp /etc/redis.conf{,.bak}
[root@centos7 ~]# grep "^##" /etc/redis.conf
################################## INCLUDES ###################################
################################## NETWORK #####################################
################################# GENERAL #####################################
################################ SNAPSHOTTING ################################
################################# REPLICATION #################################
################################## SECURITY ###################################
################################### LIMITS ####################################
############################## APPEND ONLY MODE ###############################
################################ LUA SCRIPTING ###############################
################################ REDIS CLUSTER ###############################
################################## SLOW LOG ###################################
################################ LATENCY MONITOR ##############################
############################# EVENT NOTIFICATION ##############################
############################### ADVANCED CONFIG ###############################
[root@centos7 ~]# vim /etc/redis.conf
bind 0.0.0.0 # 修改綁定的端口
# 啟動(dòng) redis,查看堅(jiān)挺的端口 6379
[root@centos7 ~]# systemctl start redis
[root@centos7 ~]# ss -tnlp |grep "redis"
LISTEN 0 128 *:6379 *:* users:(("redis-server",pid=3840,fd=4))3.命令行客戶端命令
★redis-cli
☉語法:
redis-cli [OPTIONS] [cmd [arg [arg ...]]]
☉常用選項(xiàng):
-h <hostname> Server hostname (default: 127.0.0.1). //主機(jī)地址
-p <port> Server port (default: 6379). //端口
-a <password> Password to use when connecting to the server. //密碼
演示:
1.本地連接,直接運(yùn)行 redis-cli 命令即可
[root@centos7 ~]# redis-cli 127.0.0.1:6379> ping PONG
2.遠(yuǎn)程連接,指明要連接的主機(jī),端口和密碼即可
[root@centos7 ~]# redis-cli -h 192.168.1.112 192.168.1.112:6379> ping PONG 192.168.1.112:6379> help # 獲取幫助 redis-cli 3.2.3 To get help about Redis commands type: "help @<group>" to get a list of commands in <group> "help <command>" for help on <command> "help <tab>" to get a list of possible help topics "quit" to exit To set redis-cli perferences: ":set hints" enable online hints ":set nohints" disable online hints Set your preferences in ~/.redisclirc
1.k/v 和 group
★k/v
key:直接ASCII字符串;
value(數(shù)據(jù)結(jié)構(gòu)):string,lists,hashes,set,sored sets,bltmaps,hyperloglog
★group
@string,@generic,@list @...
2.string(字符串)
★作用:
Redis 字符串?dāng)?shù)據(jù)類型的相關(guān)命令用于管理 redis 字符串值;
☉基本語法:
127.0.0.1:6379>COMMAND KEY_NAME
演示:
192.168.1.112:6379> SET count 1 OK 192.168.1.112:6379> GET count "1" 192.168.1.112:6379> INCR count (integer) 2 192.168.1.112:6379> INCR count (integer) 3 192.168.1.112:6379> INCR count (integer) 4 192.168.1.112:6379> INCR count (integer) 5 192.168.1.112:6379> DECR count (integer) 4 192.168.1.112:6379> DECR count (integer) 3 192.168.1.112:6379> DECR count (integer) 2 192.168.1.112:6379> DECR count (integer) 1
下表列出了常用的 redis 字符串命令:
| 序號(hào) | 命令及描述 |
|---|---|
| 1 | SET key value 設(shè)置指定 key 的值 |
| 2 | GET key 獲取指定 key 的值。 |
| 3 | GETRANGE key start end 返回 key 中字符串值的子字符 |
| 4 | GETSET key value 將給定 key 的值設(shè)為 value ,并返回 key 的舊值(old value)。 |
| 5 | GETBIT key offset 對(duì) key 所儲(chǔ)存的字符串值,獲取指定偏移量上的位(bit)。 |
| 6 | MGET key1 [key2..] 獲取所有(一個(gè)或多個(gè))給定 key 的值。 |
| 7 | SETBIT key offset value 對(duì) key 所儲(chǔ)存的字符串值,設(shè)置或清除指定偏移量上的位(bit)。 |
| 8 | SETEX key seconds value 將值 value 關(guān)聯(lián)到 key ,并將 key 的過期時(shí)間設(shè)為 seconds (以秒為單位)。 |
| 9 | SETNX key value 只有在 key 不存在時(shí)設(shè)置 key 的值。 |
| 10 | SETRANGE key offset value 用 value 參數(shù)覆寫給定 key 所儲(chǔ)存的字符串值,從偏移量 offset 開始。 |
| 11 | STRLEN key 返回 key 所儲(chǔ)存的字符串值的長度。 |
| 12 | MSET key value [key value ...] 同時(shí)設(shè)置一個(gè)或多個(gè) key-value 對(duì)。 |
| 13 | MSETNX key value [key value ...] 同時(shí)設(shè)置一個(gè)或多個(gè) key-value 對(duì),當(dāng)且僅當(dāng)所有給定 key 都不存在。 |
| 14 | PSETEX key milliseconds value 這個(gè)命令和 SETEX 命令相似,但它以毫秒為單位設(shè)置 key 的生存時(shí)間,而不是像 SETEX 命令那樣,以秒為單位。 |
| 15 | INCR key 將 key 中儲(chǔ)存的數(shù)字值增一。 |
| 16 | INCRBY key increment 將 key 所儲(chǔ)存的值加上給定的增量值(increment) 。 |
| 17 | INCRBYFLOAT key increment 將 key 所儲(chǔ)存的值加上給定的浮點(diǎn)增量值(increment) 。 |
| 18 | DECR key 將 key 中儲(chǔ)存的數(shù)字值減一。 |
| 19 | DECRBY key decrement key 所儲(chǔ)存的值減去給定的減量值(decrement) 。 |
| 20 | APPEND key value 如果 key 已經(jīng)存在并且是一個(gè)字符串, APPEND 命令將 value 追加到 key 原來的值的末尾。 |
3.list(列表)
★作用
Redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個(gè)元素導(dǎo)列表的頭部(左邊)或者尾部(右邊)
一個(gè)列表最多可以包含 232 - 1 個(gè)元素 (4294967295, 每個(gè)列表超過40億個(gè)元素)。
演示:
192.168.1.112:6379> RPUSH mylist "mon" (integer) 1 192.168.1.112:6379> LINDEX mylist 0 "mon" 192.168.1.112:6379> RPUSH mylist "tun" (integer) 2 192.168.1.112:6379> LPUSH mylist "sun" (integer) 3 192.168.1.112:6379> LINDEX mylist 0 "sun" 192.168.1.112:6379> LINDEX mylist 0 "sun" 192.168.1.112:6379> LINDEX mylist 1 "mon" 192.168.1.112:6379> LINDEX mylist 2 "tun" 192.168.1.112:6379> RPOP mylist "tun" 192.168.1.112:6379> LLEN mylist (integer) 2
下表列出了列表相關(guān)的基本命令:
| 序號(hào) | 命令及描述 |
|---|---|
| 1 | BLPOP key1 [key2 ] timeout 移出并獲取列表的第一個(gè)元素, 如果列表沒有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。 |
| 2 | BRPOP key1 [key2 ] timeout 移出并獲取列表的最后一個(gè)元素, 如果列表沒有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。 |
| 3 | BRPOPLPUSH source destination timeout 從列表中彈出一個(gè)值,將彈出的元素插入到另外一個(gè)列表中并返回它; 如果列表沒有元素會(huì)阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止。 |
| 4 | LINDEX key index 通過索引獲取列表中的元素 |
| 5 | LINSERT key BEFORE|AFTER pivot value 在列表的元素前或者后插入元素 |
| 6 | LLEN key 獲取列表長度 |
| 7 | LPOP key 移出并獲取列表的第一個(gè)元素 |
| 8 | LPUSH key value1 [value2] 將一個(gè)或多個(gè)值插入到列表頭部 |
| 9 | LPUSHX key value 將一個(gè)或多個(gè)值插入到已存在的列表頭部 |
| 10 | LRANGE key start stop 獲取列表指定范圍內(nèi)的元素 |
| 11 | LREM key count value 移除列表元素 |
| 12 | LSET key index value 通過索引設(shè)置列表元素的值 |
| 13 | LTRIM key start stop 對(duì)一個(gè)列表進(jìn)行修剪(trim),就是說,讓列表只保留指定區(qū)間內(nèi)的元素,不在指定區(qū)間之內(nèi)的元素都將被刪除。 |
| 14 | RPOP key 移除并獲取列表最后一個(gè)元素 |
| 15 | RPOPLPUSH source destination 移除列表的最后一個(gè)元素,并將該元素添加到另一個(gè)列表并返回 |
| 16 | RPUSH key value1 [value2] 在列表中添加一個(gè)或多個(gè)值 |
| 17 | RPUSHX key value 為已存在的列表添加值 |
4.set(集合)
★作用:
Redis的Set是string類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現(xiàn)重復(fù)的數(shù)據(jù)。
Redis 中 集合是通過哈希表實(shí)現(xiàn)的,所以添加,刪除,查找的復(fù)雜度都是O(1)。
集合中最大的成員數(shù)為 232 - 1 (4294967295, 每個(gè)集合可存儲(chǔ)40多億個(gè)成員)。
演示:
192.168.1.112:6379> SADD s1 'a' 'b' 'c' (integer) 3 192.168.1.112:6379> SMEMBERS s1 1) "c" 2) "b" 3) "a" 192.168.1.112:6379> SISMEMBER s1 'a' (integer) 1 192.168.1.112:6379> SISMEMBER s1 'c' (integer) 1 192.168.1.112:6379> SISMEMBER s1 'd' (integer) 0 192.168.1.112:6379> SADD s2 'a' 'c' 'd' 'f' (integer) 4 192.168.1.112:6379> SINTER s1 s2 1) "c" 2) "a" 192.168.1.112:6379> SUNION s1 s2 1) "f" 2) "a" 3) "b" 4) "d" 5) "c"
下表列出了 Redis 集合基本命令:
| 序號(hào) | 命令及描述 |
|---|---|
| 1 | SADD key member1 [member2] 向集合添加一個(gè)或多個(gè)成員 |
| 2 | SCARD key 獲取集合的成員數(shù) |
| 3 | SDIFF key1 [key2] 返回給定所有集合的差集 |
| 4 | SDIFFSTORE destination key1 [key2] 返回給定所有集合的差集并存儲(chǔ)在 destination 中 |
| 5 | SINTER key1 [key2] 返回給定所有集合的交集 |
| 6 | SINTERSTORE destination key1 [key2] 返回給定所有集合的交集并存儲(chǔ)在 destination 中 |
| 7 | SISMEMBER key member 判斷 member 元素是否是集合 key 的成員 |
| 8 | SMEMBERS key 返回集合中的所有成員 |
| 9 | SMOVE source destination member 將 member 元素從 source 集合移動(dòng)到 destination 集合 |
| 10 | SPOP key 移除并返回集合中的一個(gè)隨機(jī)元素 |
| 11 | SRANDMEMBER key [count] 返回集合中一個(gè)或多個(gè)隨機(jī)數(shù) |
| 12 | SREM key member1 [member2] 移除集合中一個(gè)或多個(gè)成員 |
| 13 | SUNION key1 [key2] 返回所有給定集合的并集 |
| 14 | SUNIONSTORE destination key1 [key2] 所有給定集合的并集存儲(chǔ)在 destination 集合中 |
| 15 | SSCAN key cursor [MATCH pattern] [COUNT count] 迭代集合中的元素 |
5.hash(哈希)
★作用:
Redis hash 是一個(gè)string類型的field和value的映射表,hash特別適合用于存儲(chǔ)對(duì)象。
Redis 中每個(gè) hash 可以存儲(chǔ) 232 - 1 鍵值對(duì)(40多億)。
演示:
192.168.1.112:6379> HSET h2 name taotao (integer) 1 192.168.1.112:6379> HSET h2 age 25 (integer) 1 192.168.1.112:6379> HGETALL h2 1) "name" 2) "taotao" 3) "age" 4) "25" 192.168.1.112:6379> HKEYS h2 1) "name" 2) "age" 192.168.1.112:6379> HVALS h2 1) "taotao" 2) "25" 192.168.1.112:6379> HGET h2 name "taotao" 192.168.1.112:6379> HGET h2 age "25"
下表列出了 redis hash 基本的相關(guān)命令:
| 序號(hào) | 命令及描述 |
|---|---|
| 1 | HDEL key field2 [field2] 刪除一個(gè)或多個(gè)哈希表字段 |
| 2 | HEXISTS key field 查看哈希表 key 中,指定的字段是否存在。 |
| 3 | HGET key field 獲取存儲(chǔ)在哈希表中指定字段的值。 |
| 4 | HGETALL key 獲取在哈希表中指定 key 的所有字段和值 |
| 5 | HINCRBY key field increment 為哈希表 key 中的指定字段的整數(shù)值加上增量 increment 。 |
| 6 | HINCRBYFLOAT key field increment 為哈希表 key 中的指定字段的浮點(diǎn)數(shù)值加上增量 increment 。 |
| 7 | HKEYS key 獲取所有哈希表中的字段 |
| 8 | HLEN key 獲取哈希表中字段的數(shù)量 |
| 9 | HMGET key field1 [field2] 獲取所有給定字段的值 |
| 10 | HMSET key field1 value1 [field2 value2 ] 同時(shí)將多個(gè) field-value (域-值)對(duì)設(shè)置到哈希表 key 中。 |
| 11 | HSET key field value 將哈希表 key 中的字段 field 的值設(shè)為 value 。 |
| 12 | HSETNX key field value 只有在字段 field 不存在時(shí),設(shè)置哈希表字段的值。 |
| 13 | HVALS key 獲取哈希表中所有值 |
| 14 | HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的鍵值對(duì)。 |
6.sorted set(有序集合)
★作用:
Redis 有序集合和集合一樣也是string類型元素的集合,且不允許重復(fù)的成員。
不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類型的分?jǐn)?shù)。redis正是通過分?jǐn)?shù)來為集合中的成員進(jìn)行從小到大的排序。
有序集合的成員是唯一的,但分?jǐn)?shù)(score)卻可以重復(fù)。
集合是通過哈希表實(shí)現(xiàn)的,所以添加,刪除,查找的復(fù)雜度都是O(1)。 集合中最大的成員數(shù)為 232 - 1 (4294967295, 每個(gè)集合可存儲(chǔ)40多億個(gè)成員)。
下表列出了 redis 有序集合的基本命令:
| 序號(hào) | 命令及描述 |
|---|---|
| 1 | ZADD key score1 member1 [score2 member2] 向有序集合添加一個(gè)或多個(gè)成員,或者更新已存在成員的分?jǐn)?shù) |
| 2 | ZCARD key 獲取有序集合的成員數(shù) |
| 3 | ZCOUNT key min max 計(jì)算在有序集合中指定區(qū)間分?jǐn)?shù)的成員數(shù) |
| 4 | ZINCRBY key increment member 有序集合中對(duì)指定成員的分?jǐn)?shù)加上增量 increment |
| 5 | ZINTERSTORE destination numkeys key [key ...] 計(jì)算給定的一個(gè)或多個(gè)有序集的交集并將結(jié)果集存儲(chǔ)在新的有序集合 key 中 |
| 6 | ZLEXCOUNT key min max 在有序集合中計(jì)算指定字典區(qū)間內(nèi)成員數(shù)量 |
| 7 | ZRANGE key start stop [WITHSCORES] 通過索引區(qū)間返回有序集合成指定區(qū)間內(nèi)的成員 |
| 8 | ZRANGEBYLEX key min max [LIMIT offset count] 通過字典區(qū)間返回有序集合的成員 |
| 9 | ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 通過分?jǐn)?shù)返回有序集合指定區(qū)間內(nèi)的成員 |
| 10 | ZRANK key member 返回有序集合中指定成員的索引 |
| 11 | ZREM key member [member ...] 移除有序集合中的一個(gè)或多個(gè)成員 |
| 12 | ZREMRANGEBYLEX key min max 移除有序集合中給定的字典區(qū)間的所有成員 |
| 13 | ZREMRANGEBYRANK key start stop 移除有序集合中給定的排名區(qū)間的所有成員 |
| 14 | ZREMRANGEBYSCORE key min max 移除有序集合中給定的分?jǐn)?shù)區(qū)間的所有成員 |
| 15 | ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定區(qū)間內(nèi)的成員,通過索引,分?jǐn)?shù)從高到底 |
| 16 | ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分?jǐn)?shù)區(qū)間內(nèi)的成員,分?jǐn)?shù)從高到低排序 |
| 17 | ZREVRANK key member 返回有序集合中指定成員的排名,有序集成員按分?jǐn)?shù)值遞減(從大到小)排序 |
| 18 | ZSCORE key member 返回有序集中,成員的分?jǐn)?shù)值 |
| 19 | ZUNIONSTORE destination numkeys key [key ...] 計(jì)算給定的一個(gè)或多個(gè)有序集的并集,并存儲(chǔ)在新的 key 中 |
| 20 | ZSCAN key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成員和元素分值) |
當(dāng)前題目:Redis基礎(chǔ)應(yīng)用
標(biāo)題鏈接:http://chinadenli.net/article26/pgeecg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、靜態(tài)網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、App設(shè)計(jì)、響應(yīng)式網(wǎng)站、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)