注意:使用redis方法:
新增:先放入数据库,再放入缓存。
更新:先删缓存,再更新数据库。
查询:请求获取缓存时,存在,直接返回,若发现没有,从db获取,再重新赋值到缓存,这是最典型的缓存操作;
删除:使用expire命令
1、string使用场景
1.缓存功能:使用redis作为缓存层,mysql做为存储层,将部分常用数据放入到redis中,由于redis具有高并发的特性,所以可以缓存可以起到加速读写和减轻后端压力的左右
2.计数:很多模块可以使用Redis作为技术工具,它可以实现原子操作,保证数据的准确性,常用功能有短信发送,支付密码次数校验等
3.共享Session:一个分布式web服务会将客户端的请求根据负载均衡策略打入到不同服务中,若请求中的认证信息(用户登录认证)保存在各自服务器中,则可能出现用户会需要重复登录现象,为了解决该问题,可以使用redis进行集中管理
4.全局序列号:利用redis生成全局唯一序列号,用于在分库分表的mysql做好全局唯一主键,防止主键冲突
使用命令
单值缓存:
SETkeyvalue
GETkey
对象缓存:
1)SETuser:1value(json格式数据)
2)MSETuser:1:namezhugeuser:1:balance
MGETuser:1:nameuser:1:balance
分布式锁:
SETNXproduct:true //返回1代表获取锁成功
SETNXproduct:true //返回0代表获取锁失败
。。。执行业务操作
DELproduct: //执行完业务释放锁
SETproduct:trueex10nx //防止程序意外终止导致死锁
计数器:
INCRarticle:readcount:{文章id}
GETarticle:readcount:{文章id}
2、hash使用场景:
1.电商购物车:
1)以用户id为key
2)商品id为field
3)商品数量为value
2.稀疏型结构化存储:
利用各种存储方式对比
1.字符串类型:优缺点
2.序列化字符串:优缺点(setuser:1serialize(userinfo))
3.hash类型:优缺点
使用命令
HMSETuser{userId}:namezhuge{userId}:balance
HMSETuser1:namezhuge1:balance
HMGETuser1:name1:balance
3、list使用场景:
1.消息队列
利用lpush和brpop实现有序阻塞队列,缺点是无法保证消息丢失。
2.文章列表:。。。
3.微博消息和