RedisAPI的理解和使用
2019-10-23 本文已影响0人
printf200
API的使用和理解
一、通用命令
1.通用命令
keys
#keys命令一般不在生产环境中使用
#原因keys命令是比较重,如果数据量比较大的话会慢会阻塞其他命令
keys * 怎么用
热备从节点 --》主从复制 从节点不在实际环境中运行可以采用重命令
scan
keys *
遍历所有key

keys [pattern]
遍历所有key

dbsize
计算key的总数

exists key
检查key是否存在
正确返回1 错误返回0
可以使用
有可能出现的问题

del key [key...]
删除指定key-value 可以删除多个key-value

expire(常用)、ttl、persist
expire key seconds
key在seconds秒后过去
ttl key
查看key剩余的过期时间
persist key
去掉key的过期时间
-2代表key已经不存在了
-1代表key存在,并没有过期时间


type key
返回key的类型
string
hash
list
set
zset
none


2.数据结构和内部编码


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
二、字符串类型
结构和命令

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

命令
get、set、del


incr、decr、incrby、decrby


实战
实现如下功能
记录网站每个用户个人主页的访问量?
incr userid:pageview(单线程:无竞争)
例如userid叫做123456 以pageview为key 比如123456:pageview 然后进行自增 让userid的每个页面的访问量做一个区分
单线程无竞争:redis天然适合做计数器的,因为redis是单线程的,所以在并发执行incr不会有一个竞争问题不会计错数,独立运行。在很多网站会用incr做计数器
实现如下功能
缓存视频的基本信息(数据源在MySQL中)伪代码


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

incr id
set、 setnx、setxx


mget 、mset




getset(常用)、append、strlen


incrbyfloat、getrange、setrange



复杂度在服务端执行的开销
三、哈希类型
特点


Mapmap?(key value -> key value)
small redis
field不能相同,value可以相同
hash vs string
重要API
hget、hset、hdel


hexists、hlen


hmget 、hmset


实战
实现如下功能
记录网站每个用户个人主页的访问量?
hincrby user:1:info pageview count
添加了一个pageview一个属性
实现如下功能
缓存视频的基本信息(数据源在MySQL中)伪代码

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


string和hash的对比

如何更新用户属性

更新操作






四、列表类型
1.特点
有序可重复左右进行弹出

2.重要API
增删
rpush、 lpush、linsert、lpop、rpop、lrem、ltrim






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




改

演示

3.实战


4.查缺补漏
blpop brpop


五、集合类型
1.集合结构


特点
无序
无重复
集合间操作
2.API
sadd 、srem

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

3.实战


can be spop


4.集合间的API
sdiff sinter sunion

集合间的实战


六、有序集合类型
1.结构和特点



2.API
zadd、zren、zscore、zincrby自增、zcard、zrange









实例:





3.实战

4.补充

