第2章 API的理解和使用
全面介绍了Redis提供的5种数据结构字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(zset)的数据模型、常用命令、典型应用场景。同时本章还会对Redis的单线程处理机制、键值管理做一个全面介绍,通过对这些原理的理解,听众可以在合适的应用场景选择合适的数据结构。 …
2-1 -课程目录
2-2 -通用命令
2-3 数据结构和内部编码
2-4 单线程
2-5 字符串
2-6 hash (1)
2-7 hash (2)
2-8 list(1)
2-9 list(2)
2-10 set
2-11 zset
第2章 API的理解和使用
全面介绍了Redis提供的5种数据结构字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(zset)的数据模型、常用命令、典型应用场景。同时本章还会对Redis的单线程处理机制、键值管理做一个全面介绍,通过对这些原理的理解,听众可以在合适的应用场景选择合适的数据结构。 …
2-1 -课程目录
通用命令
数据结构和内部编码
单线程架构
2-2 -通用命令
通用命令 数据结构和内部编码 单线程架构
keys
比较重的命令,所以一般不用
dbsize
内置了计数器,所以可以使用
exists
del
expire,ttl,persist
过期了,就是说没有这样的一个key了
type
返回类型
通用命令
mset /mget 批量设置 减少了网络时间 一般而言=网络时间+命令时间
sadd myset a b c d e 将一个或多个成员元素加入到集合中
keys * 遍历 生产不适用 热备从节点 scan
dbsize 计算key的总数
exists key 检查key是否存在
del key[key…] 删除键,删除多个键
expire key seconds key在seconds秒后过期
ttl key 查看key剩余的过期时间
persist key 去掉key的过期时间
type key 返回key的类型
2-3 数据结构和内部编码
list
linkedlist
ziplist
2-4 单线程
单线程为什么这么块?
1.纯内存(主要原因)
2.非阻塞IO
3.避免现场切换和竟态消耗
一瞬间只能执行一条命令
总结“
1.一次只运行一条命令
2.拒绝长(慢)命令
keys,flushall,flushdb,show lua script,mutil/exec,operate big value(collection)
3.其实不是单线程
fysnc file descriptor,close file descriptor
2-5 字符串
结构和命令 内部编码 快速实战 查缺补漏
字符串键值结构
字符串类型
场景:缓存、计数器、分布式锁
get,set,del
incr,decr,incrby,decrby
不存在的话,初始值为0
实战
1.记录网站每个用户个人主页的访问量
天然适合做计数器
2.缓存视频的基本信息(数据源在MySQL中)伪代码
一个用户访问app server(Java tomcat),首先会从Redis中去获取(内存)使用缓存系统,有就直接返回,否则的话去mysql中获取,然后不仅把数据返回,而且还要把数据缓存到Redis中。
3.分布式id生成器
三个服务希望每次获取到的id是自增的,三个服务并发的获取,不会重复
set,setnx,setxx
添加操作、更新操作
mget,mset
网络时间是大头
差缺补漏
getset,append,strlen
中文占两个字节
increbyfloat,getrange,setrange
字符串总结
incr key #自增1
decr key #自减1
incrby key k #自增k
decrby key k #自减k
set key value #不管key是否存在,都设置
setnx key value #key不存在,才设置
set key value xx #key存在,才设置
getset key newvalue #set key newvalue并返回旧的value
append key value #将value追加到旧的value
strlen key #返回字符串的长度
incrbyfloat key 3.5 #增加key对应的值3.5
getrange key start end #获取字符串指定下标的所有值
setrange key index value #设置指定下标所对应的值
2-6 hash (1)
哈希
特点 重要API hash vs string 差缺补漏
哈希键值结构
filed是属性值、
特点
重要API
hget,hset,hdel
hexists,hlen
将这个数量作为内部一个优化的值,所以O(1)
hmget,hmset
2-7 hash (2)
实战
1.记录网站每个用户个人主页的访问量
pageview是一个属性
在string里面各个信息是分离的
2.缓存视频的基本信息(数据源在MySQL中)伪代码
hgetall,hvals,hkeys
小心使用hgetall
string vs hash
如何更新用户属性
string v1
json字符串
string v2
hash
比较
差缺补漏
hsetnx,hincreby,hincrbyfloat
总结
2-8 list(1)
特点 重要API 实战 查缺补漏
列表结构
有序的队列
特点
有序
可以重复
左右两边插入弹出
重要API
增rpush
lpush
2-9 list(2)
linsert
删lpop
rpop
lrem
ltrim
查lrange
lindex
llen
改lset
例子
实战
将信息流从新到旧的顺序进行排列
每10条进行一个分页
查缺补漏
blpop,brpop
阻塞的概念
TIPS
固定数量的列表
消息队列
2-10 set
特点 集合内API和实战 集合间API实战
集合结构
特点
无序
无重复
集合间操作
集合内API
sadd,srem
scard,sismember,srandmember,smembers
smembers
无序
小心使用
srandmember,spop
集合内实战
实战-抽奖系统
实战-赞,踩
实战-标签tag
集合间API
sdiff,sinter,sunion
集合间实战
共同关注
TIPS
2-11 zset
有序集合
特点 重要API 实战 查缺补漏
有序集合结构
分数:代表分来排序
本身集合是无序的
集合 vs 有序集合
列表vs有序集合
API
zadd
分数可以重复,但是元素不能重复
zrem
zscore
zincrby
zcard
例子
zrange
zrangebyscore
zcount
zremrangebyrank
zremrangebyscore
例子
实战
排行榜
查缺补漏