Redis

RedisAPI的理解和使用

2019-10-23  本文已影响0人  printf200

API的使用和理解

一、通用命令

1.通用命令
keys
#keys命令一般不在生产环境中使用
#原因keys命令是比较重,如果数据量比较大的话会慢会阻塞其他命令

keys * 怎么用
热备从节点 --》主从复制  从节点不在实际环境中运行可以采用重命令
scan

keys *
遍历所有key

image.png

keys [pattern]
遍历所有key

image.png
dbsize
计算key的总数
image.png
exists key
检查key是否存在
正确返回1 错误返回0
可以使用
有可能出现的问题
del key [key...]
删除指定key-value 可以删除多个key-value
image.png
expire(常用)、ttl、persist
expire key seconds
key在seconds秒后过去
ttl key
查看key剩余的过期时间
persist key
去掉key的过期时间
-2代表key已经不存在了
-1代表key存在,并没有过期时间
image.png
image.png
type key 
返回key的类型
string
hash
list
set
zset
none
image.png
image.png
2.数据结构和内部编码
image.png
image.png
3.单线程架构
串行等待

为什么redis单线程还这么快
1.纯内存,redis会讲全部数据存到内存中
2.非阻塞IO


image.png

3.避免线程切换和竞态消耗
单线程要注意什么:
1.一次只执行一条命令
2.拒绝长(慢)命令
keys,flushall,flushdb,slow lua script,mutil/exec,operaten big value(collection)
3.其实不是单线程
fysnc file descriptor
close file descriptor

二、字符串类型

结构和命令
image.png

不能大于512MB key-value都建议在100kb左右


image.png

命令

get、set、del
image.png
image.png
incr、decr、incrby、decrby
image.png
image.png

实战

实现如下功能
记录网站每个用户个人主页的访问量?

incr userid:pageview(单线程:无竞争)
例如userid叫做123456 以pageview为key 比如123456:pageview 然后进行自增 让userid的每个页面的访问量做一个区分
单线程无竞争:redis天然适合做计数器的,因为redis是单线程的,所以在并发执行incr不会有一个竞争问题不会计错数,独立运行。在很多网站会用incr做计数器

实现如下功能
缓存视频的基本信息(数据源在MySQL中)伪代码

image.png
image.png

实现如下功能
分布式id生成器

image.png
incr id
set、 setnx、setxx
image.png image.png
mget 、mset
image.png
image.png
image.png
image.png
getset(常用)、append、strlen
image.png
image.png
incrbyfloat、getrange、setrange
image.png
image.png
image.png

复杂度在服务端执行的开销

三、哈希类型

特点
image.png
image.png

Mapmap?(key value -> key value)
small redis
field不能相同,value可以相同

hash vs string
重要API
hget、hset、hdel
image.png
image.png
hexists、hlen
image.png
image.png
hmget 、hmset
image.png
image.png

实战

实现如下功能
记录网站每个用户个人主页的访问量?

hincrby user:1:info pageview count
添加了一个pageview一个属性

实现如下功能
缓存视频的基本信息(数据源在MySQL中)伪代码

image.png
hgetall、hvals、hkeys

注意 小心使用hgetall
hgetall会返回所有的key和value
加入你的hash里存了很多的属性例如存了1w条会很慢 因为是单线程

image.png
image.png

string和hash的对比

image.png

如何更新用户属性

image.png

更新操作

image.png
a.gif
b.gif image.png
image.png
image.png

四、列表类型

1.特点

有序可重复左右进行弹出


c.gif
2.重要API

增删

rpush、 lpush、linsert、lpop、rpop、lrem、ltrim
image.png
image.png
d.gif
e.gif
f.gif
g.gif

ltrim 、lrange[图片上传中...(j.gif-95618a-1571736246459-0)]

h.gif
j.gif
k.gif
image.png

l.gif

演示

image.png
3.实战
image.png
m.gif
4.查缺补漏
blpop brpop
image.png
image.png

五、集合类型

1.集合结构
n.gif
p.gif

特点
无序
无重复
集合间操作

2.API
sadd 、srem
image.png
scard sismember 
srandmember和spop的区别
spop从集合中弹出,srandmember不会破坏集合 
smembers:无序的,小心使用
如果有很多元素可以使用scan

image.png
3.实战
image.png
image.png
can be spop
image.png
实战
4.集合间的API
sdiff sinter sunion
image.png

集合间的实战

image.png
image.png

六、有序集合类型

1.结构和特点
image.png
image.png
image.png
2.API
zadd、zren、zscore、zincrby自增、zcard、zrange
zadd image.png
zscore
image.png
zincrby自增
image.png
image.png
image.png
image.png

实例:

image.png
image.png
image.png
image.png
image.png
3.实战
image.png
4.补充
image.png
image.png
上一篇 下一篇

猜你喜欢

热点阅读