一 通用命令
1.1 通用命令
####1-keys #打印出所有key keys * #打印出所有以he开头的key keys he* #打印出所有以he开头,第三个字母是h到l的范围 keys he[h-l] #三位长度,以he开头,?表示任意一位 keys he? #keys命令一般不在生产环境中使用,生产环境key很多,时间复杂度为o(n),用scan命令 ####2-dbsize 计算key的总数 dbsize #redis内置了计数器,插入删除值该计数器会更改,所以可以在生产环境使用,时间复杂度是o(1) ###3-exists key 时间复杂度o(1) #设置a set a b #查看a是否存在 exists a (integer) 1 #存在返回1 不存在返回0 ###4-del key 时间复杂度o(1) 删除成功返回1,key不存在返回0 ###5-expire key seconds 时间复杂度o(1) expire name 3 #3s 过期 ttl name #查看name还有多长时间过期 persist name #去掉name的过期时间 ###6-type key 时间复杂度o(1) type name #查看name类型,返回string ### 7 其他 info命令:内存,cpu,主从相关 client list 正在连接的会话 client kill ip:端口 dbsize 总共有多少个key flushall 清空所有 flushdb 只清空当前库 select 数字 选择某个库 总共16个库 monitor 记录操作日志,夯住
1.2 数据结构和内部编码
1.3.1 单线程架构,
一个瞬间只会执行一条命令
1.3.2 单线程为什么这么快
1 纯内存
2 非阻塞IO (epoll),自身实现了事件处理,不在网络io上浪费过多时间
3 避免线程间切换和竞态消耗
1.3.3 注意
1 一次只运行一条命令
2 拒绝长慢命令
-keys,flushall,flushdb,慢的lua脚本,mutil/exec,operate,big value
3 其实不是单线程(在做持久化是另外的线程)
-fysnc file descriptor
-close file descriptor
二 字符串类型
2.1 字符串键值结构
|
|
2.2 常用命令
|
|
三 哈希类型
###3.1 哈希值结构
3.2 重要api
|
|
3.3 hash vs string
3.3.1相似的api
get | hget |
---|---|
set /sentnx | hset hsetnx |
del | hdel |
incr incrby dear decrby | hincrby |
mset | hmset |
mget | hmget |
3.3.2 缓存三种方案
直接json格式字符串
每个字段一个key
使用hash操作
3.4 其他操作
|
|
四 列表类型
4.1 列表特点
有序队列,可以从左侧添加,右侧添加,可以重复,可以从左右两边弹出
4.2 API操作
4.2.1 插入操作
|
|
4.2.2 删除操作
|
|
4.2.3 查询操作
|
|
4.2.3 修改操作
|
|
4.3 实战
实现timeLine功能,时间轴,微博关注的人,按时间轴排列,在列表中放入关注人的微博的即可
4.4 其他操作
|
|
五 集合类型
5.1 特点
无序,无重复,集合间操作(交叉并补)
5.2 API操作
|
|
5.3 实战
抽奖系统 :通过spop来弹出用户的id,活动取消,直接删除
点赞,点踩,喜欢等,用户如果点了赞,就把用户id放到该条记录的集合中
标签:给用户/文章等添加标签,sadd user:1:tags 标签1 标签2 标签3
给标签添加用户,关注该标签的人有哪些
共同好友:集合间的操作
5.4 总结
sadd:可以做标签相关
spop/srandmember:可以做随机数相关
sadd/sinter:社交相关
六 有序集合类型
6.1 特点
|
|
6.2 API使用
|
|
6.3 实战
排行榜:音乐排行榜,销售榜,关注榜,游戏排行榜
6.4 其他操作
|
|
6.5 总结
操作类型 | 命令 |
---|---|
基本操作 | zadd/ zrem/ zcard/ zincrby/ zscore |
范围操作 | zrange/ zrangebyscore/ zcount/ zremrangebyrank |
集合操作 | zunionstore/ zinterstore |