您好,登錄后才能下訂單哦!
本篇內容介紹了“Redis數(shù)據(jù)庫的安裝部署以及基本操作介紹”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Redis是一個開源的、使用c語言編寫NoSQL數(shù)據(jù)庫,它是基于內存運行并支持持久化,采用key-value(鍵值對)的存儲形式, 是目前分布式結構中不可或缺的
具有極高的數(shù)據(jù)讀寫速度:讀(110000次/s),寫(81000次/s)
支持豐富的數(shù)據(jù)類型:支持key-value、strings、Lists、Hashes(散列值)、Sets等數(shù)據(jù)類型操作
支持數(shù)據(jù)持久化:可以將內存中的數(shù)據(jù)保存在磁盤中
Redis所有操作都是具有原子性的
Redis安裝部署
[root@redis ~]# yum install -y gcc gcc-c++ make [root@redis opt]# tar xzf redis-5.0.7.tar.gz [root@redis opt]# cd redis-5.0.7/ [root@redis redis-5.0.7]# make [root@redis redis-5.0.7]# make prefix=/usr/local/redis install [root@redis redis-5.0.7]# cd utils/ [root@redis utils]# ./install_server.sh #啟動安裝腳本 Please select the redis executable path [/usr/local/bin/redis-server] /usr/local/redis/bin/redis-server ##這一步需要手動指定位置,其他都回車即可 [root@localhost utils]# ln -s /usr/local/redis/bin/* /usr/local/bin/ [root@localhost utils]# netstat -antp | grep redis tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 23276/redis-server
Redis服務控制
/etc/init.d/redis_6379 stop /etc/init.d/redis_6379 start /etc/init.d/redis_6379 restart /etc/init.d/redis_6379 status
修改配置文件
[root@localhost utils]# vim /etc/redis/6379.conf
[root@localhost utils]# /etc/init.d/redis_6379 restart #重啟服務 Stopping ... Waiting for Redis to shutdown ... Redis stopped Starting Redis server... [root@localhost utils]# netstat -antp | grep redis tcp 0 0 192.168.118.88:6379 0.0.0.0:* LISTEN 23492/redis-server tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 23492/redis-server
redis-server:用于啟動Redis的工具 redis-benchmark:用于檢測Redis在本機的運行效率 redis-check-aof:修復AOF持久化文件 redis-check-rdb:修復RDB持久化文件 redis-cli:Redis命令行工具 redis-cli -h 遠程主機ip -p 服務端口號 -a 指定密碼 如果沒有設置數(shù)據(jù)庫密碼,可以省略-a選項,若不添加任何選項表示,這使用127.0.0.1:6379連接本機上的Redis數(shù)據(jù)庫
redis-benchmark 選項: -h :指定服務器主機名 -P :指定服務器端口 -s :指定服務器socket(套接字) -c :指定并發(fā)連接數(shù) -n :指定請求數(shù) -d :以字節(jié)的形式指定SET/GET值的數(shù)據(jù)大小 -k :1=keep alive 0=reconnect -r :SET/GET/INCR 使用隨機key,SADD使用隨機值 -p :通過管道傳輸<numreq>請求 -q :強制退出redis -l :生成循環(huán),永久執(zhí)行測試 -t :僅運行以逗號分割的測試命令列表 -I :Idle模式,僅打開N哥idle連接并等待
[root@localhost utils]# redis-benchmark -h 192.168.118.88 -P 6379 -c 100 -n 10000 ##向主機發(fā)送100哥并發(fā)連接和10000哥請求測試性能 [root@localhost utils]# redis-benchmark -h 192.168.118.88 -p 6379 -q -d 10 ##測試存取10字節(jié)的數(shù)據(jù)包性能 PING_INLINE: 925925.88 requests per second PING_BULK: 1470588.12 requests per second SET: 900900.88 requests per second GET: 934579.44 requests per second INCR: 1136363.62 requests per second LPUSH: 578034.69 requests per second RPUSH: 793650.75 requests per second LPOP: 584795.31 requests per second RPOP: 806451.62 requests per second SADD: 840336.12 requests per second HSET: 746268.62 requests per second SPOP: 1098901.12 requests per second LPUSH (needed to benchmark LRANGE): 671140.94 requests per second LRANGE_100 (first 100 elements): 26089.22 requests per second LRANGE_300 (first 300 elements): 5534.65 requests per second LRANGE_500 (first 450 elements): 3414.37 requests per second LRANGE_600 (first 600 elements): 2345.11 requests per second MSET (10 keys): 120048.02 requests per second [root@localhost utils]# redis-benchmark -t set,lpush -n 100000 -q ##測試本機Redis服務在進行set和lpush操作時的性能 SET: 166112.95 requests per second LPUSH: 191570.88 requests per second
每個數(shù)據(jù)類型的創(chuàng)建key和查看key值都是不同的
[root@redis utils]# redis-cli 127.0.0.1:6379> [root@redis utils]# redis-cli #查看所有的鍵 127.0.0.1:6379> keys * 1) "counter:__rand_int__" 2) "myset:__rand_int__" 3) "mylist" 4) "key:__rand_int__" 127.0.0.1:6379> keys m* #查看以m開頭所有鍵 1) "myset:__rand_int__" 2) "mylist"
創(chuàng)建數(shù)據(jù),獲取數(shù)據(jù)
127.0.0.1:6379> set whd zhangsan #創(chuàng)建一個鍵whd,值為zhangsan OK 127.0.0.1:6379> keys * #查看創(chuàng)建結果 1) "counter:__rand_int__" 2) "myset:__rand_int__" 3) "mylist" 4) "key:__rand_int__" 5) "whd" 127.0.0.1:6379> get whd #獲取鍵值 "zhangsan"
查看鍵是否存在
127.0.0.1:6379> exists whd #存在返回1,不存在返回為0 (integer) 1 127.0.0.1:6379> exists www (integer) 0
刪除鍵
127.0.0.1:6379> del whd (integer) 1 127.0.0.1:6379> exists whd (integer) 0
查看鍵中value的數(shù)據(jù)類型
127.0.0.1:6379> set aaa bbb OK 127.0.0.1:6379> type aaa string
對鍵重命名
127.0.0.1:6379> rename aaa ccc OK 127.0.0.1:6379> keys * 1) "counter:__rand_int__" 2) "myset:__rand_int__" 3) "mylist" 4) "key:__rand_int__" 5) "ccc" ##rename也可用來覆蓋鍵值 ```bash 127.0.0.1:6379> get ccc "bbb" 127.0.0.1:6379> set ddd fff #新建鍵ddd,值為fff OK 127.0.0.1:6379> rename ccc ddd #將ccc值覆蓋ddd OK 127.0.0.1:6379> get ddd #查看結果 "bbb" ##renamens,可以判斷重命名的新鍵名是否存在,存在則返回0不做操作,不存在則覆蓋并重命名 127.0.0.1:6379> set aaa bbb OK 127.0.0.1:6379> renamenx ddd aaa (integer) 0
查看當前數(shù)據(jù)庫key的數(shù)目
127.0.0.1:6379> dbsize (integer) 6
設置密碼,刪除密碼
127.0.0.1:6379> config set requirepass 123123 #設置新密碼 OK 127.0.0.1:6379> auth 123123 #認證密碼 OK 127.0.0.1:6379> config get requirepass #查看密碼 1) "requirepass" 2) "123123" [root@redis utils]# redis-cli -h 192.168.118.88 -p 6379 #此時可以登錄數(shù)據(jù)庫,但是不能進行操作 192.168.118.88:6379> keys * (error) NOAUTH Authentication required. 192.168.118.88:6379> auth 123123 #進行密碼認證后才能操作 OK 192.168.118.88:6379> keys * 1) "counter:__rand_int__" 2) "aaa" 3) "ddd" 4) "myset:__rand_int__" 5) "mylist" 6) "key:__rand_int__" 192.168.118.88:6379> config set requirepass '' #刪除密碼 OK
追加數(shù)據(jù)
127.0.0.1:6379> keys * 1) "counter:__rand_int__" 2) "aaa" 3) "ddd" 4) "myset:__rand_int__" 5) "mylist" 6) "key:__rand_int__" 7) "www" 127.0.0.1:6379> get www "10" 127.0.0.1:6379> append www 20 #append,追加數(shù)值 (integer) 4 127.0.0.1:6379> get www "1020" 127.0.0.1:6379> append whd 23 #如果鍵不存在,append命令相當于set創(chuàng)建鍵,并賦值 (integer) 2 127.0.0.1:6379> get whd "23" 127.0.0.1:6379> strlen whd #strlen判斷鍵值得長度 (integer) 2
key值遞增/遞減,incr/decr/incrby/decrby
127.0.0.1:6379> get whd "23" 127.0.0.1:6379> incr whd #INCR遞增數(shù)值(key值必須為整數(shù)) (integer) 24 127.0.0.1:6379> incr whd (integer) 25 127.0.0.1:6379> decr whd #DECR遞減數(shù)值(key值必須為整數(shù)) (integer) 24 127.0.0.1:6379> decr whd (integer) 23 127.0.0.1:6379> incrby whd 10 #按照指定數(shù)值進行遞增 (integer) 33 127.0.0.1:6379> get whd "33" 127.0.0.1:6379> decrby whd 5 #按照指定數(shù)值進行遞減 (integer) 28 127.0.0.1:6379>
getset返回原有值然后給key設置新值
127.0.0.1:6379> getset whd 22 #先返回原有key值50,然后給予key新值22(新的值不會打印顯示) "50" 127.0.0.1:6379> get whd #查看key新的值 "22" 127.0.0.1:6379> getset whd 66 "22" 127.0.0.1:6379> get whd "66"
setex支持key的過期時間
127.0.0.1:6379> setex ttt 10 66 #指定ttt10秒過期 OK 127.0.0.1:6379> ttl ttt #ttl可查看生命周期 (integer) 3 127.0.0.1:6379> ttl ttt #查出-2表示已經過期,-1表示永久保存 (integer) -2 127.0.0.1:6379> get ttt (nil) 127.0.0.1:6379> ttl whd (integer) -1127.0.0.1:6379> setnx whd 22 (integer) 0 127.0.0.1:6379> setnx whd 22 #setnx可以對鍵進行判斷,有則操作無效,無則創(chuàng)建 (integer) 0
批量創(chuàng)建,批量查看
127.0.0.1:6379> mset aa 10 bb 20 cc 30 OK 127.0.0.1:6379> keys * 1) "counter:__rand_int__" 2) "cc" 3) "myset:__rand_int__" 4) "whd" 5) "aa" 6) "key:__rand_int__" 7) "mylist" 8) "bb" 127.0.0.1:6379> mget aa bb cc 1) "10" 2) "20" 3) "30" 127.0.0.1:6379> msetnx aa 10 jj 10 dd 10 #msetnx可進行判斷,只要有一個鍵存在,則操作失效,當鍵都不存在才創(chuàng)建key (integer) 0 127.0.0.1:6379> msetnx jj 10 dd 10 (integer) 1
127.0.0.1:6379> lpush age a b c d e #lpush由左插入多個鍵值, (integer) 5 127.0.0.1:6379> lrange age 0 -1 #lrange查看list數(shù)據(jù)類型的key值,后面要加查看的范圍,這里0表示第一個數(shù),-1表示最后一個數(shù)(也可以輸入key值個數(shù)), 1) "e" 2) "d" 3) "c" 4) "b" 5) "a" 127.0.0.1:6379> lrange age 1 2 1) "d" 2) "c" 127.0.0.1:6379> lrange age 3 5 1) "b" 2) "a" 127.0.0.1:6379> lpushx age g #lpushx插入一個元素在一個已存在的key的開頭 (integer) 6 127.0.0.1:6379> lrange age 0 -1 1) "g" 2) "e" 3) "d" 4) "c" 5) "b" 6) "a" 127.0.0.1:6379> lpop age #lpop移除首個元素 "g" 127.0.0.1:6379> lrange age 0 -1 1) "e" 2) "d" 3) "c" 4) "b" 5) "a" 127.0.0.1:6379> lpop age "e" 127.0.0.1:6379> lrange age 0 -1 1) "d" 2) "c" 3) "b" 4) "a" 127.0.0.1:6379> llen age #獲取key值個數(shù) (integer) 4
LREM/LSET/LINDEX/LTRIM
127.0.0.1:6379> del age (integer) 1 127.0.0.1:6379> lpush age a b c d d a c (integer) 7 127.0.0.1:6379> lrange age 0 -1 1) "c" 2) "a" 3) "d" 4) "d" 5) "c" 6) "b" 7) "a" 127.0.0.1:6379> lrem age 1 a #指定刪除從開頭開始n個重復值 (integer) 1 127.0.0.1:6379> lrange age 0 -1 1) "c" 2) "d" 3) "d" 4) "c" 5) "b" 6) "a" 127.0.0.1:6379> lrem age 2 c (integer) 2 127.0.0.1:6379> lrange age 0 -1 1) "d" 2) "d" 3) "b" 4) "a" 127.0.0.1:6379> lindex age 1 #獲取索引值對應的key值,索引值從上往下從0開始 "d" 127.0.0.1:6379> lindex age 3 "a" 127.0.0.1:6379> lset age 1 a #基于已有的索引值更換key值 OK 127.0.0.1:6379> lset age 3 c OK 127.0.0.1:6379> lrange age 0 -1 1) "d" 2) "a" 3) "b" 4) "c" 127.0.0.1:6379> lrange whd1 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "c" 6) "b" 7) "b" 127.0.0.1:6379> ltrim whd1 0 3 #僅保留索引范圍的元素 OK 127.0.0.1:6379> lrange whd1 0 -1 1) "a" 2) "b" 3) "c" 4) "d"
在指定元素的左/右插入元素
127.0.0.1:6379> linsert whd1 before a a1 #在a的前面插入元素a1 (integer) 5 127.0.0.1:6379> lrange whd1 0 -1 1) "a1" 2) "a" 3) "b" 4) "c" 5) "d" 127.0.0.1:6379> linsert whd1 after a a2 #在a的后面插入元素a2 (integer) 6 127.0.0.1:6379> lrange whd1 0 -1 1) "a1" 2) "a" 3) "a2" 4) "b" 5) "c" 6) "d"
由右插入元素
127.0.0.1:6379> rpush whd2 a b c d e (integer) 5 127.0.0.1:6379> lrange whd2 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 127.0.0.1:6379> rpushx whd2 a1 #在最后插入元素 (integer) 6 127.0.0.1:6379> lrange whd2 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 6) "a1" 127.0.0.1:6379> rpop whd2 #移除最后一個元素 "a1" 127.0.0.1:6379> lrange whd2 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 127.0.0.1:6379> rpoplpush whd2 whd2 #組合使用,右彈出左插入,相當于把原key值最后一個元素插入到目標key值得最前面 "e" 127.0.0.1:6379> lrange whd2 0 -1 1) "e" 2) "a" 3) "b" 4) "c" 5) "d" 127.0.0.1:6379> rpoplpush whd2 whd1 "d" 127.0.0.1:6379> lrange whd1 0 -1 1) "d" 2) "a1" 3) "a" 4) "a2" 5) "b" 6) "c" 7) "d"
Hash(散列)數(shù)據(jù)類型
hash用于存儲對象,可以采用hash格式(對象列別和ID)構成鍵名
127.0.0.1:6379> hset caiwu name "lisi" #創(chuàng)建鍵,設置字段為name,值為lisi (integer) 1 127.0.0.1:6379> hget caiwu name "lisi" 127.0.0.1:6379> hset caiwu name "wangwu" #為該鍵添加字段name1,值為wangwu (integer) 0 127.0.0.1:6379> hset caiwu name1 "wangwu" (integer) 1 127.0.0.1:6379> hexists caiwu name #判斷caiwu鍵中name字段是否存在 (integer) 1 127.0.0.1:6379> hlen caiwu #查看key值里面右多少個字段 (integer) 2 127.0.0.1:6379> hdel caiwu name #刪除字段 (integer) 1 127.0.0.1:6379> hexists caiwu name (integer) 0 127.0.0.1:6379> hsetnx caiwu name "aa" #添加字段 (integer) 1 127.0.0.1:6379> hget caiwu name "aa" 127.0.0.1:6379> hset caiwu name2 2 (integer) 1 127.0.0.1:6379> hincrby caiwu name2 2 #遞增字段值 (integer) 4 127.0.0.1:6379> hincrby caiwu name2 -2 #遞減字段值 (integer) 2 127.0.0.1:6379> hgetall caiwu #查看key中所有信息 1) "name1" 2) "wangwu" 3) "name" 4) "aa" 5) "name2" 6) "2" 127.0.0.1:6379> hmget caiwu name name1 #查看key的多個字段值 1) "aa" 2) "wangwu" 127.0.0.1:6379> hkeys caiwu #查看鍵的多個字段 1) "name1" 2) "name" 3) "name2" 127.0.0.1:6379> hvals caiwu #查看鍵中所有的字段值 1) "wangwu" 2) "aa" 3) "2"
元素具有唯一性,不允許存在重復的成員,多個集合類型之間可以進行并集、交集和差集運算
127.0.0.1:6379> keys * 1) "counter:__rand_int__" 2) "myset:__rand_int__" 3) "key:__rand_int__" 4) "mylist" 5) "caiwu" 127.0.0.1:6379> sadd whd a b c d #添加鍵,設置鍵值 (integer) 4 127.0.0.1:6379> smembers whd #查看鍵值 1) "a" 2) "c" 3) "b" 4) "d" 127.0.0.1:6379> scard whd #查看key值個數(shù) (integer) 4 127.0.0.1:6379> sismember whd a #判斷key值是否存在,存在則返回1,不存在則返回0 (integer) 1 127.0.0.1:6379> sismember whd g (integer) 0 127.0.0.1:6379> srandmember whd #srandmember表示隨機返回一個成員 "b" 127.0.0.1:6379> srandmember whd "a"
隨機移除鍵值
127.0.0.1:6379> spop whd #隨機移除數(shù)值,后面不加參數(shù)則默認移除一個,可以添加數(shù)值,表示移除該數(shù)值個數(shù)的元素 "a" 127.0.0.1:6379> smembers whd 1) "c" 2) "b" 3) "d" 127.0.0.1:6379> spop whd 2 1) "d" 2) "b" 127.0.0.1:6379> smembers whd 1) "c" 127.0.0.1:6379> sadd whd a b e f #添加元素,有重復值不會插入 (integer) 4 127.0.0.1:6379> smembers whd 1) "a" 2) "e" 3) "b" 4) "c" 5) "f" 127.0.0.1:6379> srem whd a e b #移除指定元素 (integer) 3 127.0.0.1:6379> smembers whd 1) "f" 2) "c" 127.0.0.1:6379> sadd whd1 a b #設置新鍵 (integer) 2 127.0.0.1:6379> smove whd whd1 c #講whd中的c移動到whd1中 (integer) 1 127.0.0.1:6379> smembers whd 1) "f" 127.0.0.1:6379> smembers whd1 1) "a" 2) "c" 3) "b"
元素類型為String,元素具有唯一性,不能重復,每個元素都會關聯(lián)一個double類型的分數(shù)score(表示權重),可以通過權重的大小排序,元素的score可以相同,可以用于在線游戲的積分排行榜
127.0.0.1:6379> zadd whd 1 "zhansan" #添加一個數(shù)值為1的成員zhansan (integer) 1 127.0.0.1:6379> zadd whd 2 "lisi" 3 "wangwu" #添加兩個成員,對應數(shù)值為2,3 (integer) 2 127.0.0.1:6379> zrange whd 0 -1 #查看whd的各元素值 1) "zhansan" 2) "lisi" 3) "wangwu" 127.0.0.1:6379> zrange whd 0 -1 WITHSCORES #WITHSCORES表示返回的結果中包含每個成員及其分數(shù),否則返回成員 1) "zhansan" 2) "1" 3) "lisi" 4) "2" 5) "wangwu" 6) "3" 127.0.0.1:6379> zrank whd "zhansan" #獲取成員對應的位置索引,0代表第一個,nil表示不存在 (integer) 0 127.0.0.1:6379> zrank whd "lisi" (integer) 1 127.0.0.1:6379> zcard whd #查看成員數(shù) (integer) 3 127.0.0.1:6379> zcount whd 2 3 #分數(shù)滿足表達式2<= score <=3的成員數(shù)量 (integer) 2 127.0.0.1:6379> zcount whd 1 2 (integer) 2 127.0.0.1:6379> zrem whd lisi #刪除指定成員 (integer) 1 127.0.0.1:6379> zrange whd 0 -1 1) "zhansan" 2) "wangwu" 127.0.0.1:6379> zscore whd zhansan #返回成員所對應的分數(shù) "1" 127.0.0.1:6379> zrange whd 0 -1 WITHSCORES 1) "zhansan" 2) "1" 3) "wangwu" 4) "3" 127.0.0.1:6379> zincrby whd 5 zhansan #為成員的分數(shù)增加指定值 "6" 127.0.0.1:6379> zrange whd 0 -1 WITHSCORES 1) "wangwu" 2) "3" 3) "zhansan" 4) "6" 127.0.0.1:6379> zadd whd 2 zhansan #添加已有成員設置分數(shù)時,會覆蓋原因成員和分數(shù),并返回為0.表示沒有增加元素,但不表示沒有修改 (integer) 0 127.0.0.1:6379> zrange whd 0 -1 WITHSCORES 1) "zhansan" 2) "2" 3) "wangwu" 4) "3" 127.0.0.1:6379> zrangebyscore whd 1 2 #獲取分數(shù)滿足1<=score<=2的成員 1) "zhansan" 2) "lisi" 127.0.0.1:6379> zrange whd 0 -1 1) "lisi" 2) "zhansan" 3) "xuyi" 4) "wangwu" 127.0.0.1:6379> zrangebyscore whd -inf +inf limit 1 3 #-inf表示第一個成員,+inf表示最后一個成員,這里表示匹配所有成員,然后limit顯示索引1后面的三個成員 1) "zhansan" 2) "xuyi" 3) "wangwu" 127.0.0.1:6379> zremrangebyrank whd 0 1 #刪除位置索引滿足表達式0<=rank<=1的元素 (integer) 2 127.0.0.1:6379> zcard whd (integer) 2 127.0.0.1:6379> zrange whd 0 -1 1) "xuyi" 2) "wangwu"
排序
127.0.0.1:6379> zadd whd1 1 a 2 b 3 d 4 e (integer) 4 127.0.0.1:6379> zrevrange whd 0 -1 withscores 1) "wangwu" 2) "3" 3) "xuyi" 4) "2" 127.0.0.1:6379> zrevrange whd1 0 -1 withscores #以位置索引從高到低顯示區(qū)間的值 1) "e" 2) "4" 3) "d" 4) "3" 5) "b" 6) "2" 7) "a" 8) "1"
“Redis數(shù)據(jù)庫的安裝部署以及基本操作介紹”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。