端口:0-65535
一、Redis入门 NOSQL
1、redis前世今生,redis是什么?
开源,学习,定制开发
C语言,5万行代码/2.3w line
高性能,多功能 10万并发 QPS 10万
单线程 - 单台部署多台,对CPU充分利用
基于key-Value的存储服务系统
支持多种数据结构
string (常用), hash , lists, set, hset
bitmap, geo, hyperloglog, stream
2、谁在使用redis?
github, twitter,stackoverflow,weibo,BAT
典型应用场景
2.1 缓存
2.2 计数器
2.3 消息队列 -- 简单消息队列 lists
2.4 排行榜 -- 有序集合
2.5 社交网络 -- 粉丝数,关注数,共同关注,时间轴等等
2.6 实时系统 -- 过滤器用Bitmap
3、Redis特性
3.1 特性之 -- 速度快,高性能 (单线程,10万并发)
3.2 特性之 -- 持久化 RDB,AOF
3.3 特性之 -- 支持多数据类型 ( string,hash,list,set,storeSet,stream)
3.4 特性之 -- 多语言客户端
3.5 特性之 -- 功能丰富 (pub/sub,慢查询,pipeline,bitmap,hyperloglog,geo)
3.6 特性之 -- 简单
3.7 特性之 -- 复制
3.8 特性之 -- 高可用分布式(sentinel,cluster)
4、安装和配置
1、默认配置启动
2、配置文件启动
-- daemoize
-- port
-- logfile
-- dir
RDB ,AOF,Slow log, MaxMemory等配置
3、动态参数启动 redis-servel --port 6380
二、Redis的API数据类型操作
1、数据结构和内部编码
2、单线程
3、字符串
4、hash
5、list列表
6、set 集合
7、zset 有序集合
三、Redis的其他功能
1、慢查询
2、pipeline
3、发布订阅模式
4、bitmap
5、hyperloglog
6、geo
四、Redis持久化
RDB
AOF
运维
五、Redis复制原理和优化
六、Redis sentinel 高可用
作用:监控,故障转移,多机器
1、主从复制问题
2、
七、Redis cluster 高可用
八、缓存设计与优化
九、Redis云平台
##########################################
五大数据类型总结
##########################################
第一部分:redis的基础,
(1)redis基础,安装配置
(2)redis的常见数据类型和使用场景
(3)字符串string的使用操作
set ,get , mset, mget ( geMultiple) ,
incr, incrby , decr, decrby,
delete , expire, exites , setNx
append , substr
练习: 1、广告列表的设置 ,
2、手机验证码的设置
总结
第二部分:list ,
(1)list 基础数据结构
双向链表
(2)list操作命令
lpush , lpop , llen, lrange , ltrim
练习:商品秒杀队列
总结
第三部分:hash使用操作
(1)hash 基础数据结构,哈希表,类关联数组
(2)操作命令
hset("key","member-key","value");
hget("key","member-key");
hkeys("key")
hvals("key")
hgetall("key")
hlen("key")
hdel("key","member-key")
del("key")
hsetNx("key","member-key","value")
hExists("key","member-key")
hincyby("key","member-key",5)
批量设置
hmset("key",["name"=>"lisi","pw"=>123456,"age"=>20]); ( 常用)
hmget("key",['name','age'])
hgetall("key")
第四部分 set(列表)的使用操作
(3) set数据结构
一组string
(4)set操作命令
sadd("key","member") , //添加成员
srem("key","member") , //移除成员
smembers("key") //获取成员列表
sismember("key","member") //判断元素是否是set的成员
scard("key") //查看集合中成员的数量
spop("key") //移除并返回集合中的一个随机元素(返回被移除的元素) 抽奖
sinter('set', 'set2')) //返回集合的交集,不会保存
sinterstore('output', 'set', 'set2'); //执行交集操作 并结果放到一个集合中
sunion('set', 'set2')) //返回集合的并集
sunionstore('output', 'set', 'set2'); //执行并集操作 并结果放到一个集合中
sdiff('set', 'set2') //返回集合的差集
sdiffstore('output', 'set', 'set2'); //执行差集操作 并结果放到一个集合中
练 习:粉丝列表,关注列表
第五部分 zset(有序列表)使用操作
1、zset数据结构,string类型集合,每个元素增加权重(score)
2、应用场景 : 排行榜,延时消息队列
3、操作命令
zadd( "key", score, member)
zrange("key",0,-1,['withscores'=>true]); //正序按下标
zrangebyscore("key", 10,20,['withscores'=>true]);//按照权重值正序排列
zrevrange('key', 1, 2,['withscores'=>true] ); //倒序按下标
zrevrangebyscore('key', 20, 10,['withscores'=>true] ); //按权重值的倒序排列
zcard('key') //统计元素数量
zcount('set', 30, 50) 返回集合中介于min和max之间的值的个数
zscore('key', 'dog') //元素的得分
zrem('set', 'cat'); //删除成员
zincrby('set', 2, 'dog'); //特定元素增加权重, 无自减
练习:
文章(主播)点赞,关注
文章点赞量的排行榜 TOP10
排行榜:
zincrby('set', 2, 'dog'); //特定元素增加权重, 无自减
zrevrange('key', 0, 9,['withscores'=>true] ); //倒序按下标
点赞/关注/收藏/粉丝/订阅
sadd("key","member") , //添加成员
smembers("key") //获取成员列表
sismember("key","member") //判断元素是否是set的成员