1、概述
- Redis是一個(gè)由C語(yǔ)言開發(fā)的基于key-value形式的非關(guān)系型數(shù)據(jù)庫(kù)key-value:鍵值對(duì)【鍵:String,值:五種數(shù)據(jù)類型】非關(guān)系數(shù)據(jù)庫(kù):NoSQL【Not Only SQL】關(guān)系型數(shù)據(jù)庫(kù):由二維表的形式來存儲(chǔ)數(shù)據(jù)不是關(guān)系型數(shù)據(jù)庫(kù),就是非關(guān)系型數(shù)據(jù)庫(kù)
- 存儲(chǔ)介質(zhì)默認(rèn)是內(nèi)存可以持久化到磁盤上
- 官網(wǎng)中文:http://www.redis.cn/
- 英文:https://redis.io/
2、Redis的五種基本數(shù)據(jù)類型
- string:字符串
- hash:對(duì)象
- list:有序列表
- set:無序集合
- zset:有序集合
3、基本用法
1、string
set get getset mset mget
setnx strlen append incr incrby
decr decrby
#設(shè)置key和value,正確返回OKset key valueset name zhangsan#獲取key對(duì)應(yīng)的value值,若沒有返回nilget keyget name#返回key對(duì)應(yīng)的value,再重新設(shè)置這個(gè)key的值getset key valuegetset name lily#設(shè)置多個(gè)鍵值對(duì) 正確返回OKmset k1 v1 k2 v2 …mset sex 1 age 20 address hz#獲取多對(duì)key對(duì)應(yīng)的valuemget k1 k2 k3 …mget sex age address#設(shè)置key-value:如果key不存在,則設(shè)置,如果key存在,則什么都不做#成功返回1,失敗返回0setnx key valuesetnx phone 13577889900#計(jì)算key對(duì)應(yīng)的value的長(zhǎng)度strlen keystrlen phone#在原先的基礎(chǔ)之上進(jìn)行字符串追加append key valueappend address xs#本來address的值是hz,現(xiàn)在就是hzxs#自增1,value是數(shù)值類型才能成功。如果key不存在,則直接以0為基礎(chǔ),進(jìn)行自增。如果這個(gè)值不是數(shù)值,則會(huì)報(bào)錯(cuò)incr keyincr age#age本來是20,現(xiàn)在返回就是21#自增指定數(shù)量,value是數(shù)值類型才能成功incrby age 5#age本來是20,現(xiàn)在返回就是25#自減1,value是數(shù)值類型才能成功。decr keydecr age#age本來是0,現(xiàn)在返回就是-1#自減指定數(shù)量,value是數(shù)值類型才能成功decrby keydecrby age 20#age本來是30,現(xiàn)在返回就是10
2、hash
hset hmset hget hmget hkeys
hvals hgetall hexists hlen hsetnx hdel
#設(shè)置值,必須指定大key和小key、valuehset person name tom#設(shè)置多值hmset person sex 1 age 20#獲取單個(gè)小key對(duì)應(yīng)的valuehget person sex#獲取多個(gè)小key對(duì)應(yīng)的value們hmget person name age#獲取所有的小keyhkeys person#獲取所有的小key對(duì)應(yīng)的valueshvals person#獲取所有大key中的鍵值對(duì)hgetall person#判斷小key是否存在hexists person age#求大key中小key的數(shù)量hlen person#設(shè)置小key【小key不存在,則設(shè)置成功,如果存在,則什么都不做】hsetnx person age 25#刪除hdel person age
3、list
- 增加數(shù)據(jù):兩種方式左邊增加數(shù)據(jù):左壓棧,后增加的數(shù)據(jù)在左邊右邊增加數(shù)據(jù):右壓棧,后增加的數(shù)據(jù)在右邊
- 讀取數(shù)據(jù)讀取數(shù)據(jù)從左往右
lpush rpush lrange llen lindex lpop rpop rpoplpush lrem
#左壓棧lpush key v1 v2 …#特征:存入的數(shù)據(jù)順序跟讀取順序相反#右壓棧rpush key v1 v2 …#特征:存入的數(shù)據(jù)順序跟讀取順序相同#查詢列表中的數(shù)據(jù)#下標(biāo)從0開始,如果要讀到最末尾,endIndex就是-1lrange key startIndex endIndexlrange key 0 -1#獲取列表元素的個(gè)數(shù)llen key#獲取指定索引的元素,index表示索引lindex key index#獲取指定索引為3的元素lindex key 3#從左邊彈出一個(gè)元素[獲取最左邊的元素,再刪除它]lpop key#從右邊彈出一個(gè)元素rpop key#從一個(gè)列表的右邊彈出元素,再追到加另一個(gè)列表的左邊rpoplpush 源列表 目標(biāo)列表#移除count個(gè)的value值lrem key count valuelrem names 2 tom#刪除names列表中2個(gè)tom【是從左開始移除】
4、set
sadd scard smembers sismember spop sdiff sinter sunion
sdiffstore sinterstore sunionstore smove
#存值sadd myset aa bb cc#返回存入的個(gè)數(shù)#獲取集合長(zhǎng)度scard myset#獲取集合元素smembers myset#判斷元素是否在集合中。存在:返回1,不存在:返回0sismember myset cc#隨機(jī)彈出一個(gè)元素spop myset#隨機(jī)彈出指定個(gè)數(shù)元素spop myset 2#差集sdiff myset1 myset2#交集sinter myset1 myset2#并集sunion myset1 myset2#將交集結(jié)果存入到另一個(gè)集合中#sdiffstore 存儲(chǔ)結(jié)果的集合名 操作的集合一 操作的集合二sdiffstore myset3 myset1 myset2#將交集結(jié)果存入到另一個(gè)集合中sinterstore myset4 myset1 myset2#將并集結(jié)果存入到另一個(gè)集合中sunionstore myset5 myset1 myset2#將myset1中的aa元素移動(dòng)到myset3smove myset1 myset3 aa
5、zset(sorted set)
zadd zcard zrange zincrby zscore zinterstore zrangebyscore zrevrangebyscore
zrem zrank zremrangebyscore
#向有序集合中增加元素#zadd 集合名 分?jǐn)?shù)1 名稱1 分?jǐn)?shù)2 名稱2 …zadd tuhaobang 10 zhangsan 80 lisi 30 wangwu#返回插入的數(shù)量#獲取集合中元素的數(shù)量zcard tuhaobang#獲取集合中指定區(qū)間的元素名稱,如果后面的索引是-1,則返回所有元素名稱zrange tuhaobang 0 -11) “zhangsan”2) “wangwu”3) “lisi”#獲取集合所有的元素,包括名稱和分?jǐn)?shù)【是從小到大排序】zrange tuhaobang 0 -1 withscores1) “zhangsan”2) “10”3) “wangwu”4) “30”5) “lisi”6) “80”#獲取集合前兩位元素的名稱和分?jǐn)?shù)zrange tuhaobang 0 1 withscores1) “zhangsan”2) “10”3) “wangwu”4) “30”#為集合中指定的名稱的元素增加分?jǐn)?shù)zincrby tuhaobang 50 zhangsan#返回增加后的分?jǐn)?shù)#返回集合中指定名稱的分?jǐn)?shù)zscore tuhaobang wangwu#把myzset1和myzset2根據(jù)元素名稱求出交集,并把相同名稱的value加在一起,得到元素名稱的新分?jǐn)?shù),存入到新集合中,成功返回的是交集的個(gè)數(shù)#zinterstore 目標(biāo)集合 操作集合的數(shù)量 集合一 集合二 …ZINTERSTORE myzset3 2 myzset1 myzset2#zrangebyscore 集合名稱 小分?jǐn)?shù) 大分?jǐn)?shù) [withscores] [limit 第幾條開始顯示 顯示數(shù)量]#在不知道當(dāng)前集合中最大值和最小值的情況下,-inf代表最小值 +inf代表最大值#獲取tuhaobang集合中所有元素名稱及分?jǐn)?shù)zrangebyscore tuhaobang -inf +inf withscores#獲取tuhaobang集合中第一個(gè)元素名稱及分?jǐn)?shù)zrangebyscore tuhaobang -inf +inf withscores limit 0 1#獲取tuhaobang集合中分?jǐn)?shù)在50-100之間的所有元素名稱及分?jǐn)?shù)zrangebyscore tuhaobang 50 100 withscores#獲取tuhaobang集合中分?jǐn)?shù)在50-100之間的前兩位元素名稱及分?jǐn)?shù)zrangebyscore tuhaobang 50 100 withscores limit 0 2#按從大到小的順序進(jìn)行排序,并獲取前2位zrevrangebyscore tuhaobang +inf -inf withscores limit 0 2#根據(jù)元素名刪除元素zrem key member [member…]#獲取集合中指定元素名稱對(duì)應(yīng)的索引zrank tuhaobang lisi#刪除指定分?jǐn)?shù)區(qū)間的元素[10,20],刪除成功返回刪除的個(gè)數(shù),否則返回0zremrangebyscore tuhaobang 10 20
4、通用命令
- key相關(guān)
#查找匹配規(guī)則的key, *:代表0到多個(gè)字符,?代表一個(gè)字符#查詢所有keykeys *#查詢keys中第二個(gè)字母為a的keykeys ?a*#判斷key是否存在,存在:返回1,不存在:返回0exists key#刪除key,刪除成功返回1,刪除不存在的key返回0del key#查看key剩余有效時(shí)間#ttl keyttl gender結(jié)果:返回剩余有效時(shí)間,如果已經(jīng)過期:返回-2,如果沒有設(shè)置有效時(shí)間:返回-1#設(shè)置已經(jīng)存在的key的過期時(shí)間,單位為秒expire key seconds#為已經(jīng)存在的key設(shè)置過期時(shí)間,單位是毫秒pexpire key 毫秒#查看指定key的剩余存活時(shí)間,單位是毫秒pttl key#移除指定key的生存時(shí)間,永久的持久化persist key#獲取指定的key的value的數(shù)據(jù)類型type key#移動(dòng)當(dāng)前數(shù)據(jù)庫(kù)中對(duì)應(yīng)的key到其他數(shù)據(jù)庫(kù),dbindex是0-15move key dbindex
- 數(shù)據(jù)庫(kù)相關(guān)
#redis默認(rèn)有16個(gè)數(shù)據(jù)庫(kù),分別是 db0 – db15#查看當(dāng)前數(shù)據(jù)庫(kù)下有多少keydbsize#切換數(shù)據(jù)庫(kù),dbindex是0-15select dbindex#清空當(dāng)前數(shù)據(jù)庫(kù)flushdb#清空所有數(shù)據(jù)庫(kù)中的數(shù)據(jù)flushall#實(shí)時(shí)監(jiān)控Redis服務(wù)接收到的命令【其他客戶端的操作,能夠被監(jiān)控到】monitor
- 查看redis讀寫性能
#redis寫的性能redis-benchmark set#redis讀的性能redis-benchmark get