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中