Redis API的使用和理解
![ce024acd68d08a58c1d6a3fd064b41b9.png](https://i-blog.csdnimg.cn/blog_migrate/1cc51a4681e56cfdb6be0cb65fc452ad.jpeg)
通用命令
keys:遍历所有key(keys *)
dbsize:计算Key的总数
exists key:判断key是否存在
del key[key...]:删除指定key-value
expire key seconds:key在seconds秒后过期
ttl key:查看key剩余的过期时间
persist key:去掉Key的过期时间
type key:返回key的类型
数据结构和内部编码
![4c0a9e4b81f5b58ce104b2ea7b861e94.png](https://i-blog.csdnimg.cn/blog_migrate/39fee76961a7f29f98415ad9dca3b461.jpeg)
单线程架构
Redis在同一时间点,只会执行一条命令
![7b7fcf00b1f8aa4359699a74f810974a.png](https://i-blog.csdnimg.cn/blog_migrate/2ddd7e53b0a024dc8654c726c7bffa03.jpeg)
Redis中单线程为什么这么快?
1,纯内存
2,非阻塞IO
3,避免线程切换和竞态消耗
字符串类型
key:字符串 value:(字符串、数字、json、二进制...)
get key:获取key对应的value
set key value:设置key-value
del key:删除key-value
incr key:key自增1,如果key不存在,自增后get(key)=1
decr key:自减,如果key不存在,自减后get(key)=-1
incrby key k:key自增Key,如果Key不存在,自增后get(key)=k
decrby key k:key自减Key,如果Key不存在,自增后get(key)=-k
set key value:不管Key是否存在,都设置
setnx key value: key不存在才设置
set key value xx: key 存在才设置
mget key1 key2 key3...:批量获取key,原子操作
mset key1 value1 key2 value2 ...:批量设置key-value
getset key newvalue:set key newvalue并返回旧的value
append key value:将value追加到旧的value
strlen key:返回字符串的长度(注意中文,中文不是占有一个字节)
incrbyfloat key 3.5:增加key对应的值3.5
getrange start end:获取字符串指定下标所有的值
setrange key index value:设置指定下标所有对应的值
实战:
记录网站每个用户个人主页的访问量?--incr userid:pageview
缓存视频的基本信息(数据源在mysql)?伪代码
分布式id生成器? incr id
哈希类型
特点:key field value
field不能相同,value可以相同
![01c0d40a8276105b230e614e6f89fcd8.png](https://i-blog.csdnimg.cn/blog_migrate/6f8bb36aad18f493bafa582722f01f0c.jpeg)
![ec17f040829cfe8568c98b8e67d4e6e7.png](https://i-blog.csdnimg.cn/blog_migrate/12ce5d92d737ab6c6b6fff976a217e94.jpeg)
重要API:
hget key field:获取hash key对应的field的value
hset key field value:设置hash key对应field的value
hdel:删除hash key 对应field的value
hexists key field:判断hash key是否有field
hlen key:获取hash key field的数量
hmget key field1 field ...fieldN:批量获取hashkey的一批field对应的值
hmset key field1 value1 field2 value2 ... fieldN valueN:批量设置hash key的一批 field value
hgetall key:返回hash key对应所有的field和value
hvals key:返回hash key对应所有field的value
hkeys key:返回hash key对应所有field
实战:
记录网站每个用户个人主页的访问量?
hincrby user:1:info pageview count
缓存视频的基本信息?
hsetnx key field value:设置hash key对应field的value(如field已经存在则失败)
hincrby key field intCounter:hash key对应的field的value自增intCounter
hincrbyfloat key field floatCounter:hincrby浮点数版
列表类型
特点:有序、可重复
![8de8cf31da9bd97421460f915374a020.png](https://i-blog.csdnimg.cn/blog_migrate/2ba57ef255afbe2d9b6699fe8d00adb1.jpeg)
rpush key value1 value2 ... valueN:从列表右端插入值(1-N)
lpush key value1 value2 ... valueN:从列表左端插入值(1-N)
linsert key before|after value newValue:在list指定的值前|后插入newValue
![3091c9a3f9536118ae19c436c77a07e3.png](https://i-blog.csdnimg.cn/blog_migrate/920a2a5078204a0e70256b1853e7638a.jpeg)
lpop key:从列表左侧弹出一个item
rpop key:从列表右侧弹出一个item
lrem key count vlaue:根据count值,从列表中删除所有value相等的项
count>0,从左到右,删除最多count个value相等的项
count<0,从右到左,删除最多Math.abs(count)个value相等的项
count=0,删除所有value相等的项
ltrim key start end:按照索引范围修剪列表
lrange key start end(包含end):获取列表指定索引范围所有item
lindex key index:获取列表指定索引的item
llen key:获取列表长度
lset key index newValue:设置列表指定索引值为newValue
tips:
栈:
lpush+lpop=statck
队列:
lpush+rpop=queue
有固定数量的列表
lpush+ltrim
消息队列:
lpush+brpop
集合类型
特点:无序、不可重复
![c09837a8f8f2b99564262d3ebf118265.png](https://i-blog.csdnimg.cn/blog_migrate/c22dc3bcfc2042cfe0eb17e829c51392.jpeg)
sadd key element:向集合key添加element(如果element已经存在,添加失败)
srem key element:将集合key中的element移除掉
![cdfb6e60e2ab9f294eee6f7b309e87e6.png](https://i-blog.csdnimg.cn/blog_migrate/4b2528f2877abc28596ab5020c1db9cd.jpeg)
实战:
抽奖系统
标签(tag)
1,给用户添加标签
![7af0b950033bf1b75acafbc026b52cb2.png](https://i-blog.csdnimg.cn/blog_migrate/2f151b8feedc062864bbc2ec1c7bab46.jpeg)
2,给标签添加用户
![ced583a689c0cb8f4ea1c6c967d8505b.png](https://i-blog.csdnimg.cn/blog_migrate/d5cf6c1fac5b6075f54f4088df86ffb6.jpeg)
集合间的操作: sdiff sinter sunion
![75a78f251c7f6492b4dcc48bf9db77dd.png](https://i-blog.csdnimg.cn/blog_migrate/41e0e7d94e96695381dc7e2883177132.jpeg)
![971efc0b2e7e70b3a904f3e95f30edaf.png](https://i-blog.csdnimg.cn/blog_migrate/70b42abd4ea4bc0488a8722c244cdb0e.jpeg)
实战
![a5bfbada805be16323b09b5f4380d0de.png](https://i-blog.csdnimg.cn/blog_migrate/f79736329aa8f430589c775e9cc985d0.jpeg)
有序集合类型
特点:有序
![7998691829436e7fb4794ea7ad2d5373.png](https://i-blog.csdnimg.cn/blog_migrate/bc71b504d5ea2796dfb5648704f88c3d.jpeg)
集合vs有序集合
![6b56800a210cc651a4d052f8389f52ba.png](https://i-blog.csdnimg.cn/blog_migrate/c0242f8b9c2cfe2c0767aafcbfe4770a.jpeg)
重要api:
zadd key score element(可以是多对)
![00a9366f99e854bd4e24cbd3922a09ab.png](https://i-blog.csdnimg.cn/blog_migrate/1167747f14193dd574e138ddb8b14acc.jpeg)
zrem key element(可以是多个)删除元素
![e606b62122324d80a7c866b2eca0bd32.png](https://i-blog.csdnimg.cn/blog_migrate/6e76fda44c868f494c2d75be2bd9bb0b.jpeg)
zscore key element: 返回元素的分数
![37165c13f95b52b952f027f4c35443d5.png](https://i-blog.csdnimg.cn/blog_migrate/4e15dcbebc1d1e651786d8c578ad2623.jpeg)
zincrby key increScore element:增加或减少元素的分数
zcard key:返回元素的个数
zrange key start end[withscores]:返回指定索引范围的升序元素[分值]
zrangebyscore key minScore maxScore[withscores]:返回指定分数返回内的升序元素
![23ad9a2a8323c52b8498e73a15ebfc14.png](https://i-blog.csdnimg.cn/blog_migrate/9857968594b47820ac8c1195c8d10b03.jpeg)
zcount key minScore maxScore:返回有序集合内在指定分数返回内的个数
zremrangebyrank key start end:删除指定排名内的升序元素
zremrangebyscore key minScore maxScore:删除指定分数内的升序元素
![48e61b581b17186736c51fd001be48d6.png](https://i-blog.csdnimg.cn/blog_migrate/2e227603e782c8a69511f34fc3671452.jpeg)
实战:排行榜
![2d7405ae44cdcbf2e159d1f9ca0980e1.png](https://i-blog.csdnimg.cn/blog_migrate/426425fa9f19fc21b39494a8d20275d3.jpeg)
score :timeStamp saleCount followCount