什么是Redis
redis是遠程的;
redis是基于內存的;
redis是非關系型數據庫
優點:
1.支持豐富的數據類型:String,List,Set,Sorted Set,Hash等
2.支持兩種數據持久化方式:Snapshotting(內存快照)和Append-Only file(日志追加)
3.支持主從復制
緩存
隊列--使用list結構
數據存儲
redis-desktop-manager
Redis數據類型數據類型 | 存儲的值 | 讀寫能力 |
---|---|---|
String | 可以是字符串,整數或浮點,統稱為元素 | 對字符串操作,對整數類型加減 |
List | 一個序列集合且每個節點都包好了一個元素 | 序列兩端推入或彈出元素 修剪,查找或移除元素 |
Set | 各個不同的元素 | 從集合中插入或刪除元素 |
Hash | 有key-value的散列組,其中key是字符串,value是元素 | 按照key進行增加刪除 |
Sort Set | 帶分數的score-value有序集合,其中score是浮點,value為元素 | 集合插入,按照分數范圍查找 |
String類型
key | value(string/int/float) |
---|
127.0.0.1:6379> set string1 demo OK 127.0.0.1:6379> get string1 "demo" 127.0.0.1:6379> set string2 4 OK 127.0.0.1:6379> get string2 "4" 127.0.0.1:6379> incr string2 #對整型進行自增操作 (integer) 5 127.0.0.1:6379> get string2 "5" 127.0.0.1:6379> decrby string2 2 #對整型進行減法操作,將string2減去2 (integer) 3 127.0.0.1:6379> get string2 "3"
List類型
127.0.0.1:6379> lpush list1 12 #lpush表示從左邊push一個元素到list1中,l表示left (integer) 1 127.0.0.1:6379> lpush list1 13 (interger) 2 127.0.0.1:6379> rpop list1 #rpop表示從右側pop出一個元素,按照先入先出的原則 “12” 127.0.0.1:6379> lpush list2 12 (integer) 1 127.0.0.1:6379> lpush list2 13 (integer) 2 127.0.0.1:6379> lpush list2 13 #list類型不要求集合中的元素唯一,所以可以插入相同的元素,而set類型要求集合中元素必須唯一 (integer) 3 127.0.0.1:6379> llen list2 #llen命令列出list2中元素的個數 (integer) 3
Set類型
127.0.0.1:6379> sadd set1 12 (integer) 1 127.0.0.1:6379> scard set1 #用scard查看set1中的元素個數 (integer) 1 127.0.0.1:6379> sadd set1 13 (integer) 1 127.0.0.1:6379> sadd set1 13 (integer) 0 127.0.0.1:6379> scard set1 (integer) 2 127.0.0.1:6379> sismember set1 13 #sismember 命令判斷13是否在set1中 (integer) 1 127.0.0.1:6379> srem set1 13 #srem命令將13從set1中刪除 (integer) 1 127.0.0.1:6379> sismember set1 13 (integer) 0
Hash類型
127.0.0.1:6379> hset hash1 key1 12 #hset命令設置hash1的鍵為key1,值為12 (integer) 1 127.0.0.1:6379> hget hash1 key1 #hget命令獲取hash1鍵名為key1的值 "12" 127.0.0.1:6379> hset hash1 key2 13 (integer) 1 127.0.0.1:6379> hset hash1 key3 13 (integer) 1 127.0.0.1:6379> hlen hash1 #hlen命令獲取hash1的長度 (integer) 3 127.0.0.1:6379> hset hash1 key3 14 #直接修改hash1中key3的值 (integer) 0 127.0.0.1:6379> hget hash1 key3 "14" 127.0.0.1:6379> hmget hash1 key1 key2 #hmget 命令一次獲取多個key的值 1) "12" 2) "13"
Sort Set類型
127.0.0.1:6379> zadd zset1 10.1 val1 #zadd命令往zset1中添加一個元素,score為10.1,value為val1 (integer) 1 127.0.0.1:6379> zadd zset1 11.2 val2 (integer) 1 127.0.0.1:6379> zadd zset1 9.1 val3 (integer) 1 127.0.0.1:6379> zcard zset1 #zcard 命令查看zset1中的元素值 (integer) 3 127.0.0.1:6379> zrange zset1 0 2 withscores #zrange 命令打印出排名 1) "val3" 2) "9.1" 3) "val1" 4) "10.1" 5) "val2" 6) "11.19999999" 127.0.0.1:6379> zrange zset1 val2 #打印出val2的排名 (integer) 2 127.0.0.1:6379> zadd zset1 12.2 val3 (integer) 0 127.0.0.1:6379> zrange zset1 0 2 withscores 1) "val1" 2) "10.1" 3) "val2" 4) "11.19999999" 5) "val3" 6) "12.19999999" 127.0.0.1:6379> zadd zset1 12.2 val2 (integer) 0 127.0.0.1:6379> zrange zset1 0 2 withscores 1) "val1" 2) "10.1" 3) "val2" 4) "12.19999999" 5) "val3" 6) "12.19999999"常用命令
鍵值相關命令
// 1. keys *,代表取出所有的 key redis 127.0.0.1:6379> keys * 1) "myzset2" 2) "myzset3" 3) "mylist" 4) "myset2" 5) "myset3" 6) "myset4" 7) "k_zs_1" 8) "myset5" 9) "myset6" 10) "myset7" 11) "myhash" 12) "myzset" 13) "age" 14) "myset" 15) "mylist5" 16) "mylist6" redis 127.0.0.1:6379> keys mylist* 1) "mylist" 2) "mylist5" 3) "mylist6" 4) "mylist7" 5) "mylist8" redis 127.0.0.1:6379> // 2.exists 確認一個 key 是否存在 redis 127.0.0.1:6379> exists HongWan (integer) 0 redis 127.0.0.1:6379> exists age (integer) 1 redis 127.0.0.1:6379> // 3. del 刪除一個 key redis 127.0.0.1:6379> del age (integer) 1 redis 127.0.0.1:6379> exists age (integer) 0 redis 127.0.0.1:6379> // 4. expire 設置一個 key 的過期時間(單位:秒) redis 127.0.0.1:6379> expire addr 10 (integer) 1 redis 127.0.0.1:6379> ttl addr (integer) 8 redis 127.0.0.1:6379> ttl addr (integer) 1 redis 127.0.0.1:6379> ttl addr (integer) -1 // 們設置 addr 這個 key 的過期時間是 10 秒,然后我們不斷的用 ttl 來獲取這個 key 的有效時長,直至為-1 說明此值已過期 // 5. move將當前數據庫中的 key 轉移到其它數據庫中 redis 127.0.0.1:6379> select 0 www.ChinaDBA.net 中國 DBA 超級論壇 49 OK redis 127.0.0.1:6379> set age 30 OK redis 127.0.0.1:6379> get age "30" redis 127.0.0.1:6379> move age 1 (integer) 1 redis 127.0.0.1:6379> get age (nil) redis 127.0.0.1:6379> select 1 OK redis 127.0.0.1:6379[1]> get age "30" redis 127.0.0.1:6379[1]> // 先顯式的選擇了數據庫 0,然后在這個庫中設置一個 key,接下來我們將這個key 從數據庫 0 移到數據庫 1,之后我們確認在數據庫 0 中無此 key 了, 但在數據庫 1 中存在這個key,說明我們轉移成功了 // 6. persist 移除給定 key 的過期時間 redis 127.0.0.1:6379[1]> expire age 300 (integer) 1 redis 127.0.0.1:6379[1]> ttl age (integer) 294 redis 127.0.0.1:6379[1]> persist age (integer) 1 redis 127.0.0.1:6379[1]> ttl age (integer) -1 redis 127.0.0.1:6379[1]> // 手動的將未到過期時間的 key,成功設置為過期 // 7. randomkey 隨機返回 key 空間的一個 key redis 127.0.0.1:6379> randomkey "mylist7" redis 127.0.0.1:6379> randomkey "mylist5" redis 127.0.0.1:6379> // 8. rename 重命名 key redis 127.0.0.1:6379[1]> keys * 1) "age" redis 127.0.0.1:6379[1]> rename age age_new OK redis 127.0.0.1:6379[1]> keys * 1) "age_new" // 9. type 返回值的類型 redis 127.0.0.1:6379> type addr string redis 127.0.0.1:6379> type myzset2 zset redis 127.0.0.1:6379> type mylist list
服務器相關命令
// 1. ping 測試連接是否存活 redis 127.0.0.1:6379> ping PONG // 2. echo 在命令行打印一些內容 redis 127.0.0.1:6379> echo Helloworld "Helloworld" // 3. select 選擇數據庫。Redis 數據庫編號從 0~15,我們可以選擇任意一個數據庫來進行數據的存取。 redis 127.0.0.1:6379> select 1 OK redis 127.0.0.1:6379[1]> select 16 (error) ERR invalid DB index redis 127.0.0.1:6379[16]> // 4. quit 退出連接 redis 127.0.0.1:6379> quit [root@localhost redis-2.2.12]# // 5. dbsize 返回當前數據庫中 key 的數目 redis 127.0.0.1:6379> dbsize (integer) 18 redis 127.0.0.1:6379> // 6. info 獲取服務器的信息和統計 redis 127.0.0.1:6379> info # Server redis_version:3.2.100 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:dd26f1f93c5130ee redis_mode:standalone os:Windows arch_bits:64 multiplexing_api:WinSock_IOCP process_id:2528 . . redis 127.0.0.1:6379> // 7. config get 獲取服務器配置信息, config get * 表示獲取全部 redis 127.0.0.1:6379> config get dir 1) "dir" 2) "/root/4setup/redis-3.2.100" redis 127.0.0.1:6379> // 8. flushdb 刪除當前選擇數據庫中的所有 key redis 127.0.0.1:6379> dbsize (integer) 18 redis 127.0.0.1:6379> flushdb OK redis 127.0.0.1:6379> dbsize (integer) 0 // 9. flushall 刪除所有數據庫中的所有 key redis 127.0.0.1:6379[1]> dbsize (integer) 1 redis 127.0.0.1:6379[1]> select 0 OK redis 127.0.0.1:6379> flushall OK redis 127.0.0.1:6379> select 1 OK redis 127.0.0.1:6379[1]> dbsize (integer) 0 redis 127.0.0.1:6379[1]>PHP操作Redis
String類型
//普通set/get操作 $redis->set("library", "predis"); $retval = $redis->get("library"); echo $retval; //顯示 "predis" echo "
"; //setex set一個存儲時效 $redis->setex("str", 10, "bar"); //表示存儲有效期為10秒 echo $redis->get("str"); //setnx/msetnx相當于add操作,不會覆蓋已有值 var_dump($redis->setnx("foo",12)); //true var_dump($redis->setnx("foo",34)); //foo已經存在,無法覆蓋,所以返回false //getset操作,set的變種,結果返回替換前的值 echo $redis->getset("foo",56);//返回12 echo $redis->get("foo");//返回56 echo "
"; // incrby/incr/decrby/decr 對值的遞增和遞減 echo $redis->incr("foo"); //foo為57 echo $redis->incrby("foo",2); //foo為59 echo "
"; //exists檢測是否存在某值 var_dump($redis->exists("foo"));//true //del 刪除 var_dump($redis->del("foo"));//true echo $redis->get("foo");//空 //type 類型檢測,字符串返回string,列表返回 list,set表返回set/zset,hash表返回hash var_dump($redis->type("foo"));//不存在,返回0 $redis->set("str","test"); //append 連接到已存在字符串 $redis->append("str","_123"); //返回累加后的字符串長度8,此進str為 "test_123" echo $redis->get("str"); //test_123 echo "
"; //substr 部分獲取操作 echo $redis->substr("str",0,2);//表示從第0個起,取到第2個字符,共3個,返回"tes" //strlen 獲取字符串長度 echo $redis->strlen("str"); //str為test_123,字符長度為8 //setbit/getbit 位存儲和獲取 echo $redis->setbit("binary",31,1); //表示在第31位存入1,這邊可能會有大小端問題?不過沒關系,getbit 應該不會有問題 echo $redis->getbit("binary",31); //返回1 //keys 模糊查找功能,支持*號以及?號(匹配一個字符) $redis->set("foo1",123); $redis->set("foo2",456); print_r($redis->keys("foo*")); //返回Array ( [0] => foo1 [1] => foo2 ) print_r($redis->keys("f?o?")); //同上Array ( [0] => foo1 [1] => foo2 ) //randomkey 隨機返回一個key echo $redis->randomkey(); //可能是返回 "foo1"或者是"foo2"及其它任何一存在redis的key //rename/renamenx 對key進行改名,所不同的是renamenx不允許改成已存在的key $redis->rename("str","str2"); //把原先命名為"str"的key改成了"str2" //expire 設置key-value的時效性,ttl 獲取剩余有效期,persist 重新設置為永久存儲 $redis->expire("foo", 1); //設置有效期為1秒 $redis->ttl("foo"); //返回有效期值1s echo "
"; //dbsize 返回redis當前數據庫的記錄總數 echo $redis->dbsize();
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/25658.html
摘要:前面容器重建后需要重新運行命令綁定關聯,需要命令行下生效。直接同步成功,在查看關系均有對方信息。是否要守護進程這里是經過多次測試,發現容器重啟,也會正常啟動。哨兵的配置于此類似,略過。 前面mysql容器重建后需要重新運行 change master to 命令綁定關聯,8.0需要命令行下生效。redis首先想到用官方的,沒想到進去各個基本shell命令無法使用,所以先棄了。這次由于官...
摘要:前面容器重建后需要重新運行命令綁定關聯,需要命令行下生效。直接同步成功,在查看關系均有對方信息。是否要守護進程這里是經過多次測試,發現容器重啟,也會正常啟動。哨兵的配置于此類似,略過。 前面mysql容器重建后需要重新運行 change master to 命令綁定關聯,8.0需要命令行下生效。redis首先想到用官方的,沒想到進去各個基本shell命令無法使用,所以先棄了。這次由于官...
摘要:作為面試官,我是如何甄別應聘者的包裝程度語言和等其他語言的對比分析和主從復制的原理詳解和持久化的原理是什么面試中經常被問到的持久化與恢復實現故障恢復自動化詳解哨兵技術查漏補缺最易錯過的技術要點大掃盲意外宕機不難解決,但你真的懂數據恢復嗎每秒 作為面試官,我是如何甄別應聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復制的原理詳...
閱讀 2633·2021-11-25 09:43
閱讀 2735·2021-11-04 16:09
閱讀 1652·2021-10-12 10:13
閱讀 889·2021-09-29 09:35
閱讀 887·2021-08-03 14:03
閱讀 1781·2019-08-30 15:55
閱讀 2997·2019-08-28 18:14
閱讀 3498·2019-08-26 13:43