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