细说Redis

Redis

1.什么是redis?

redis是一个基于内存的高性能key-value数据库

 

2.redis基本数据类型及应用场景 

String(字符串)数据结构是key-value键值对类型,value也可以是数字  常用的命令:

Get Set incr decr mget 

应用场景:比较常用,既可以实现memcached的功能并且效率更高(redis和memcached的区别和联系)redis的定时持久化,操作日志和Replication等功能。除此之外还可以进行其他的功能操作。

实现方式: String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作会转换成数值进行计算

此时redisObject的encoding字段为int。

hash(散列)

实现方式:

其实hash对应的value内部实际就是一个hashMap

实际这里会有两种不同实现,这hash中数据较少的时候不会采用hshMap结构,会采用一种=类似于数组方式来紧凑存储,对应的value redisObject的encoding为zipmap。

在数据存储数据较大的情况下用hashMap,此时encoding转换为ht.

应用场景我项目中进行商品页面进行查询的时候,当时考虑到性能优化,就将商品分类给放到的redis中用的,让各个项目需要调用的时候不用再查询数据库了,直接去rededis中查询

 

list(列表)  

Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作

每个子元素都是String类型的双向链表,可以通过push和pop操作从列表的头部或者尾部添加或者删除元素,这样List即可以作为栈,也可以作为队列。

 

 

sets (集合)  

区别于list,set可以更好的去除重复元素,由此而言我们可以进行存储一些集合性的元素。

set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

sorted set(有序集合)

和set相比,sorted set增加了一个权重参数score,使得集合中的元素能够按score进行有序排列,比如一个存储全班同学成绩的sorted set,其集合value可以是同学的学号,而score就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。可以用sorted set来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行

 

 

4.redis优点

  a.单线程,利用redis队列技术并将访问变为串行访问,消除了传统数据库串行控制的开销

  b.redis具有快速和持久化的特征,速度快,因为数据存在内存中。

  c.分布式 读写分离模式

  d.支持丰富数据类型

  e.支持事务,操作都是原子性,所谓原子性就是对数据的更改要么全部执行,要不全部不执行。

  f.可用于缓存,消息,按key设置过期时间,过期后自动删除

 

5.回收策略

  从最近最少使用的数据淘汰,挑选将要过期的数据淘汰。

  volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰

  volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰

  volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰

  allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰

  allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰

  no-enviction(驱逐):禁止驱逐数据

 

6.redis和memcache相比,有哪些优势?

  a.memcache所有的值均是简单的字符串,redis支持更为丰富的数据类型

  b.redis速度比memcached快很多

  c.redis支持持久化

 

7.redis与memcache区别

  a.存储方式 memcache存在内存中,redis存在硬盘中,保证数据持久化

  b.数据类型 memcache对数据类型支持相对简单,redis有复杂的数据类型

  c.使用底层模型不同:底层实现方式以及客户端之间通信的应用协议不一样

  d.redis最大可以达到1G而memcache只有1MB

 

8.redis 持久化

默认使用RDB(快照)持久化可以通过配置文件设置持久化间隔时间  数据会被保存到dump.rdb二进制文件中文件体积比AOF文件小加载效率就高对IO的操作比较少

AOF持久化使用前需要配置AOF持久化为yes 该机制是将每一次改变数据库的都会进行持久化  缺点就是文件体积大IO操作很多但是文件的完整度是最高的

 

面试问题?

在mysql中数据修改后怎样将数据同步更新到redis中?

 

答:在进行增删改的时候mysql中的数据同步到redis中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值