1.数据存储
数据保存在内存,这使得redis的访问速度非常快;
可扩展,通过主从复制,分片。
2.数据结构
string,list,set,zset,hash
说明:list:
格式:key,value
value:表示数组,允许存在重复值
示例:key=userId,value=[1,2,3,1](z)set:
格式:key,value
value:表示数组,且不能存在重复值,对于zset会对数组中的值排序
示例:key=userId,value=[1,2,3]hash:
格式: key,field,value
示例:key=user_id=1, field=age,value=20key=user_id=1, field=name,value=luckkey=user_id=2, field=age,value=21key=user_id=2, field=name,value=happy
3.常用命令
keys*:查找所有键
flushall:删除所有键
4.redis事务
通过multi开启事务,然后将执行的命令加入队列,最后使用EXEC执行加入队列中的命令。
有两种错误,1。语法错误2.运行时错误(如用操作列表的命令执行string类型的命令)
若是语法错误,事务将会回滚;若是运行时错误,自动略过错误命令,其他命令正常。
discard清除先前在事务中放入队列的指令;watch监控键,不同客户端修改监控键事务将终止。
5.pub/sub
Redis的支持发送/订阅消息,通过pub将消息发送到管道(channel),由sub订阅管道接收消息。
6.持久化
快照持久化:bgsave将会调用fork创建一个子进程处理持久化数据,父进程继续处理请求命令save接收save命令后,将快照创建完毕后,才处理其他命令配置文件save 60 1000,自动调用bgsave
aof持久化:AOF持久化的实质就是将被执行的命令写到AOF文件的末尾,以此来记录数据发生的变化。因此只要执行一次AOF文件中的命令就可以恢复AOF文件所记录的数据集了。调用对文件的写入,将需要写入的文件内容存储到缓冲区,系统在某个时候将缓冲区信息写入硬盘
问题一:为什么访问查询那么快
1.完全基于内存,绝大部分操作纯粹内存操作;
2.单线程,避免了不必要的上下分切换和竞争条件,不用考虑各种锁操作,加锁释放锁;
3.多路复用,非阻塞io
问题二:缓存雪崩
1.不同的key设置不同的过期时间
2.通过加锁和队列控制读数据库和写缓存的线程数量
3.二级缓存
问题三:缓存击穿
1.对key一定不存在的数据过滤
2.对没有数据key的也设值如null
问题四:缓存一致性
1.数据实时同步更新
修改数据库的同时,修改缓存,数据一致性比较强,数据同步没有延时
2.数据准实时更新
使用多线程,MQ实现,数据同步有较短时间延时
3.缓存失效机制
对缓存数据设置失效时间,有一定的延时时间(设置的失效时间),可能存在缓存雪崩
4.任务调度更新
最终一致性,按一定的频率更新;
常用命令:
清空整个 Redis 服务器的数据:flushall
清空当前库中的所有 key:flushdb
个人搜索资料整理的,为了应对面试,也希望分享出来帮助大家。
如有不对的地方非常希望能够指点一下, 由于写的较早,已忘记参考博客链接, 在此感谢,同时非常抱歉下次定会注意.