当前位置: 代码迷 >> 综合 >> redis-基本知识
  详细解决方案

redis-基本知识

热度:73   发布时间:2023-11-23 10:14:16.0

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 

  个人搜索资料整理的,为了应对面试,也希望分享出来帮助大家。

  如有不对的地方非常希望能够指点一下, 由于写的较早,已忘记参考博客链接, 在此感谢,同时非常抱歉下次定会注意.