redis笔记

基本概念

redis 开源的高性能的,c语言开发的,键值对存储数据的nosql(非关系型数据库)数据库。

数据库发展历史:

单数据库实例
缓存(ehCache)+数据库实例
缓存(ehCache)+主从数据库+读写分离
缓存+主从数据库集群+读写分离+分库分表
nosql+主从数据库集群+读写分离+分库分表

作用:快速存取

redis应用场景

单点登录

限时秒杀

排行耪

点赞 评论 访问统计 舍弃了数据的绝对精确

记录在线列表

五种数据类型及其应用

string hash list set zset

String

set key value 

get key value

mset key1 value1 key2 value2

del key

应用场景:秒杀

	set key 100 

	get key

	Decr key 1

	incr key 2

hash (map<Object,Object)

应用场景:商品的详细信息

hset key:name:手机 id 001

hget key:name:phone id ----->001

hmset key:name:phone id 001 price 1999

hmget key:name:phone id price

hgetall key:name:phone

list(linkedList,有序非唯一)

lpush commemt:test  1 2 3

rpush comment:test  4 5 6

321456

lrang comment:test 0 10

应用场景:商品的评论列表

lpush comment:bra:vidolia {comment:id,commentContent:"good",commentPice:"lef/tpc.png"}

set(set无序 唯一)

应用场景:ip投票的限制、共同好友

sadd key value1 value2 value3 value4

srem key value1

sismember key value5

sinter key1 key2(交集)

Zset(有序set集合)

应用场景:商品排行榜

zadd key 100 华为 99 苹果 98 vivo 97 oppo

zscore key 华为

zrange key 0 -1 withsocres(升序)

zrevrange key 0 -1 withsocres(降序)

其他

删除所有key:flushdb

java 操作redis Jedis spring集成

redis的主从复制、集群、持久化aof(不停备份数据)和rdb(每次操作的日志)

redis三大问题

redis缓存穿透解决

  1. 缓存空对象
  2. 自写布隆过滤器,将数据先查询到布隆过滤器,有请求过来就先判断布隆过滤器有没有,有就查询,没有就返回非法请求,每次有新增操作时,需要将数据加入到布隆过滤器,删除数据过多时,需要重建布隆过滤器(设置插入数据量和容错率(哈希函数的个数越多,容错率越低,开销率越大),实际是存了三个hash;布隆出错的原因:hash碰撞;出错率跟数组长度和hash表大小有关)

不使用谷歌框架的过滤器:谷歌框架使用的是jwt的内存,位数组为21亿(int);
redis使用的redis的内存,位数组为42亿(String)。

redis底层保存数据是位数组,redis可实现数组扩容。位符

布隆过滤优缺点:占用内存小,会出现误判,需要维护,不能删除数据。

redis缓存击穿解决

缓存当中没有,数据库有数据(并发)

当缓存中没有,先加分布式锁,再去数据库查,查完将数据放到redis,最后释放锁。

redis缓存雪崩解决

过期时间错开、搭建高可用集群cluster
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值