redis

为什么使用 Redis

性能:耗时且返回结果变化不频繁,
		例如:秒杀获取秒杀商品集合,做到不同地区不同会员级别获取不同的商品集合
		处理:if(get(地区+会员级别) ==null){
					数据库获取商品集合
					set(地区+会员级别,商品集合,超时时间);
				 }
		注意:在获取redi缓存之前,一定要检验地区和会员级别在不在你的设置的集合里(可以用redis来存放这个集合),如果没有就给默认值(不然就会造成缓存穿透)
并发:数据库的频繁交互
		例如:获取首页的商品详情(首页的商品获取很频繁,如果每个都和数据库交互系统压力很大)
		处理:if(get(商品id) ==null){
					数据库获取商品详情
					set(商品id,商品详情,超时时间(10-15));
				 }
		注意:设置超时时间不要设定为固定值,如果设置为固定值可能导致(缓存雪蹦)

使用 Redis 的常见问题

缓存和数据库双写一致性问题
	最终一致性 
	强一致性:不能放缓存,例如:商品库存
缓存雪崩问题
	设置超时时间不要设定为固定值,如果设置为固定值可能导
缓存击穿问题
	在获取redi缓存之前,一定要检验地区和会员级别在不在你的设置的集合里(可以用redis来存放这个集合),如果没有就给默认值(不然就会造成缓存穿透)
缓存的并发竞争问题

单线程的 Redis 为什么这么快

纯内存操作
单线程操作,避免了频繁的上下文切换
采用了非阻塞 I/O 多路复用机制

自我理解非阻塞 I/O 多路复用机制第二种:

		List<String> request = new ArrayList<>();
        request.add("0");
        request.add("1");
        request.add("2");
        request.add("3");
        request.add("4");
        String[] redis = new String[100000];
        //第一种
        for (int i = 0; i < request.size(); i++) {
            Thread.sleep(10000);
            redis[i] = request.get(i);
        }
        //第二种(由于只用放到指定socket,就可以成功返回了,所以效率高)
        //第一步和第二步都在同时进行
        //第一步单线程存到socket  
        Map<Integer,String> socket = new HashMap<>();
        for (int i = 0; i < request.size(); i++) {
            Thread.sleep(10);
            socket.put(i,request.get(i));
        }
        //第二步单线程存储到redis
        while (socket.size() !=0){
            for (Integer i : socket.keySet()) {
                Thread.sleep(10000);
                redis[i] = socket.get(i);
            }
        }

Redis 的数据类型及使用场景

String   
		get、获取
		set、设置
		incr、值自增一(例如:缓存点赞次数)
		decr 值自减一 (例如:缓存点赞次数)
Hash
	hset, 通过KEY和HashKey设置值
	hget,  返回单个HashKey的值	
	hgetall 返回全部HashKey的值
          hset  user name lzh
          hset  user age 18
          hget  user name  结果:lzh
          hgetall user 结果:lzh,18
List
      lpush,左插入
      rpush,右插入
      lpop,左移除
      rpop,右移除
      lrange AList 0 5 ,获取第0个到5个元素
      lrange AList 0 -1 ,获取全部元素
Set
	sadd, 添加
	spop,移除
	smembers,获取全部元素
	sunion Aset,Bset的合集
	smember Aset nihao,nihao在集合Aset里
Sorted Set 带权重的set
	zadd,  添加
	zrange, 区间获取集合
	zrem, 移除
	zcard 数量
Pub/Sub
	发布(Publish)与订阅(Subscribe)
Transactions

Redis 的过期策略和内存淘汰机制

1.被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key
2.主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key
3.当前已用内存超过maxmemory限定时,触发主动清理策略

注: http://www.cnblogs.com/mrhgw/p/6278619.html
注:https://mp.weixin.qq.com/s/1TXICDZ_BoJ7FeAFqiZa5A
注:https://mp.weixin.qq.com/s/8fdBKAyHZrfHmSajXT_dnA
注:http://redisdoc.com/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值