关于redis使用的一点理解(一)

redis简介:

       Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

       Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

       Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

       Redis支持数据的备份,即master-slave模式的数据备份。

---------------------------------------------------------------------------------------------------------------

Redis 优势:

性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。

丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

---------------------------------------------------------------------------------------------------------------

redis数据持久化:

有两种持久化方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。

RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上;

AOF,则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。

两种持久化的优缺点:

RDB:单独线程执行,有极高的性能,对主线程没影响。如果进行大规模的数据回复,比AOF高效。

AOF:只能追加不修改。AOF会越来越大,需要重写aof文件。回复速度比较慢。

官方建议同时使用。

---------------------------------------------------------------------------------------------------------------

redis各种数据类型的特点:

1、Stirng类型,value存放的是字符串信息;

2、Hash类型,hash类型比较适合存储对象;

3、List类型,存放的是字符串列表,按照插入顺序排序;

4、Set类型,存放的是字符串类型的无序集合,意味着集合中的数据不能重复;

5、Sorted Set类型,存放的是字符串类型集合,不允许出现重复的数据,不同之处是每个元素都关联一个double类型的分数,redis就是通过这个分数进行从小到大排序,集合的元素唯一,但分数可以重复,分数重复则按字典顺序排序。

redis的作用:

1、缓存;2、消息队列;3、分布式锁;

---------------------------------------------------------------------------------------------------------------

一、关于使用redis实现session共享的几个问题。

1、session使用哪种数据类型?

首先要明白http协议,http是一种无状态的请求协议,当客户端发送一个http请求到服务端时,服务端会创建一个session会话,并且返回一个sessionID给客户端,客户端将sessionID保存到cookie中,之后的每个请求都需要带有这个sessionID去访问服务端,服务端就是根据客户端传过来的sessionID来判断会话是否存在。

如果应用是一个单机系统架构,不需要考虑session共享问题。当系统是分布式架构时,就需要考虑了。

在项目中,我们使用redis字符串类型的数据结构,将sessionID保存到redis中,客户端的每次请求都先访问redis才能进入应用中。其实使用其他数据类型也可以,看项目的复杂程度,在我们项目中string类型已经够用了。也可以使用hash类型,将整一个session保存到redis中。

注意:这里是使用redis存储管理httpsession。

 

2、session超时怎办?

a、不处理,提醒用户重新登录;

b、每次获取session消息时,重新修改超时时间,这样做对redis的性能消耗比较大,不推荐使用;

c、客户端做判断,session超时后,偷偷发一个登录请求,重新登录;

 

3、redis实现session共享这一块功能应该放到整个系统架构的那个位置?

网关之前?网关之后?nginx之前?nginx之后?

 

4、redis实现session应该用单机还是集群?

当系统只有一个·redis服务时,当redis挂掉,会整个系统都不可用。因此最好的办法就是进行redis备份,目前普遍认为备份数应该是3,而且redis只支持主从备份。当主redis挂了,需要将从redis升级为主redis。这就是主动故障转移,redis sentinel带有这个功能。

还有既然做了集群,那个每个redis服务器应该有不同的IP,那么当主redis挂了之后,从redis升级为主redis,那要怎么将之前主redis的的IP转移到现在的主redis上呢?这就是IP漂移技术,redis sentinel可以设置。

大型网站,热点数据往往很大,有几十G上百G的可能,可以搭建分布式redis,多个redis实例协同工作。

 

5、要注意redis主要是用作缓存使用,不是当数据库使用

 

6、什么时候需要使用到redis持久化?

redis持久化数据的目的是为了防止redis挂掉后,redis保存的数据丢失,redis重启后可以恢复数据。我觉得还是看业务需要使用,当使用redis队列时,可以考虑使用持久化。

 

7、除了redis还有什么方式可以实现session共享?

a、将session放到cookie中,保存到客户端(去中心化),缺点是cookie可以被禁用,cookie的大小有限制;

b、将session信息保存到数据库中,每次请求要先访问数据库,对服务器压力大;

c、session复制,将session复制带其他节点上;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值