关于Redis的简单介绍

一。什么是redis?
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。简单而言,Redis是一款内存高速缓存数据库。

二。redis与mysql的区别:
1.mysql数据库是一个关系型数据库,而redis数据库是一个非关系型数据库
2.mysql数据库是利用sql语句进行操作的一个数据库,
而redis数据库不需要sql语句进行操作,给予k-v键值对的一个数据库,所以redis也称之为缓存机制

【扩展】 nosql数据库:redis、solr、mongdb、memcache、hbase

三。redis存储的数据结构

一.字符串类型	
	1.获取: get key
	2.设置: set key value
	3.删除: del key
	【注意:一个key对应一个value】
	
二.哈希类型
	1.获取: 
		*.hget key field
		*.hgetall key
	2.设置: hset key field value
	3.删除: hdel key field
		【注意:一个key对应一个value】
		
三.list列表类型  
	1. 存储:      
		 *. lpush key value: 将元素加入列表左表              
		 *. rpush key value:将元素加入列表右边 
		【可以添加一个元素到列表的头部(左边)或者尾部(右边)】
	2. 获取:       
		* lrange key start end :范围获取 
			start表示从0开始,索引
			end表示查询的结束数字,索引,全部,-1
	3. 删除:       
		* lpop key: 删除列表最左边的元素,并将元素返回       
		* rpop key: 删除列表最右边的元素,并将元素返回

四.set无序集合类型 
	1. 存储:sadd key value 
	2. 获取:smembers key:获取set集合中所有元素 
	3. 删除:srem key value:删除set集合中的某个元素  

五.sortedset有序集合类型 
	1. 存储:zadd key score value 
	2. 获取:zrange key start end [withscores] 
	3. 删除:zrem key value

四。SpringDataRedis:
spring家族的一个框架,这个框架是基于jedis的基础之上封装的一组框架,能够更加简化开发
RedisTemplate接口类

	封装的五种数据类型的方法
		ValueOperations:简单 K-V 操作  -->    相当于字符串类型
		SetOperations:set 类型数据操作 -->   set类型
		ZSetOperations:zset 类型数据操作 -->   zset类型
		HashOperations:针对 map 类型的数据操作 -->  hash类型
		ListOperations:针对 list 类型的数据操作 -->   list类型

五。为什么使用缓存机制?
缓存技术一般应用在访问量比较大的项目中,比如门户系统,对外开发的系统,
采用缓存技术可以减轻数据库的压力

六。redis缓存同步:
其实就是数据库中的数据要和redis缓存的数据保持一致称之为同步.
在新增,修改,和删除中,都先清空redis缓存

七。redis中的数据库:
redis数据库总共有16个数据库,从db0-db15,默认是先存储到db0中,db0满了之后再存db1,依次类推

九。redis缓存穿透
概念:按照KEY去查询VALUE,当KEY对应的VALUE一定不存在的时候并对KEY并发请求量很大的时候,就会对后端造成很大的压力
【 客户端 ------>redis缓存------->mysql : 如果说redis缓存中有值,那么直接返回,如果没有值,就直接穿过redis去查询mysql,当高并发阶段的时候redis缓存中还是没有值,直接再去查询mysql,相当于redis缓存没有起到作用】

解决方案:

	1、缓存层缓存空值。 
		–缓存太多空值,占用更多空间。(优化:给个空值过期时间) 
		–存储层更新代码了,缓存层还是空值。(优化:后台设置时主动删除空值,并缓存把值进去)

	2、将数据库中所有的查询条件,放到布隆过滤器中。当一个查询请求来临的时候,
		先经过布隆过滤器进行检查,如果请求存在这个条件中,那么继续执行,如果不在,直接丢弃。

十。redis缓存雪崩(缓存失效)
概念:如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数据库上,造成了缓存雪崩。

解决方法:

	1.在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。
		比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
		
	2.可以通过缓存reload机制,预先去更新缓存,再即将发生大并发访问前手动触发加载缓存
		不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀
		
	3.做二级缓存,或者双缓存策略。A1为原始缓存,A2为拷贝缓存,A1失效时,
		可以访问A2,A1缓存失效时间设置为短期,A2设置为长期。

	4.搭建集群,使用集群中的哨兵机制
		集群:由多台服务器组成的一个服务器群,每台服务器做的都是同样的工作
			  集群在实际开发中最小的配置是需要三台服务器,由于一主一备的原则,每台主机都要配置一个备份机
			  所以最好的配置是六台服务器(一主两从)
		
		哨兵的作用
			1.通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
			2.当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

十一。redis击穿
概念:key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存
过期一般都会从数据库加载数据并会会设到缓存,这个时候大并发的请求可能瞬间把数据库压垮

解决方案:利用互斥锁,缓存失效的时候,先去获得锁,得到锁了,再去请求数据库。没得到锁,则休眠一段时间重试。

【小编个人整理,如有错误之处,还望各位大神留言一同研究,谢谢】

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值