当前位置:海洋目录网 » 站长资讯 » 教育考试 » 文章详细 订阅RssFeed

【redis】有关redis面试那些事(一)

来源:本站原创 浏览:47次 时间:2022-12-08
1.redis是什么?

一个开源的内存数据库,可用作数据库、缓存、消息中间件,可以持久化。支持多种数据类型,字符串string,列表list,集合set,有序集合sorted set,散列hash等等。内置了复制、lua脚本支持、事务、LRU清除、不同级别的数据持久化机制。通过哨兵模式和自动分区集群模式提供高可用。2.redis常见配置默认在redis.conf中配置,redis启动时可以指定配置文件。

bind 127.0.0.1 192.168.0.1
protected-mode no
port 6379
#客户端闲置关闭连接超时时间
timeout 0
#守护进程启动
daemonize yes
#数据库数量默认db0
databases 16
#密码 包含空格时请使用引号
requirepass redis5
#rdb快照保存
save 600 100
#可用内存 超出时开始清除key
maxmemory 2gb
#清除策略
maxmemory-policy noeviction
#lua执行超时时间
lua-time-limit 5000
#开启集群模式
cluster-enabled yes
#指定集群配置文件
cluster-config-file nodes-6379.conf

3.数据类型
string:最基本的redis值类型,二进制安全,可以包含任意数据,如图片或序列化对象,一个字符串最大可存储512M字节内容。可以使用INCR命令集合(incr/decr/incrby)将数字型字符串用作计数器,使用append命令追加字符串,使用getrange/setrange进行字符串随机向量访问,使用getbit/setbit位图实现布隆过滤器。list:列表是简单字符串列表,按照插入顺序排列,你可以添加一个元素到列表的头部(左边)或者尾部(右边)常见操作:lpush/rpush/lpop/rpop/lrange。一个列表最多可以232-1个元素。你可以非常快速地在列表的两端进行数据插入和删除操作,但如果你试着访问一个非常大 的列表的中间元素仍然是十分慢的,因为那是一个时间复杂度为 O(N) 的操作。set:集合是一个无序的字符串合集。你可以以O(1) 的时间复杂度(无论集合中有多少元素时间复杂度都为常量)完成 添加,删除以及测试元素是否存在的操作。Redis集合有着不允许相同成员存在的优秀特性。向集合中多次添加同一元素,在集合中最终只会存在一个此元素。实际上这就意味着,在添加元素前,你并不需要事先进行检验此元素是否已经存在的操作。hash:哈希是字符串字段和字符串值之间的映射,所以它们是完美的表示对象的数据类型,一个hash最多可以包含232-1 个key-value键值对,常用命令:hget/hset/hgetall/hmget/hmset/hmget。sorted set:有序集合类似集合,它们的差别是,每个有序集合 的成员都关联着一个评分,这个评分用于把有序集 合中的成员按最低分到最高分排列。使用有序集合,你可以非常快地(O(log(N)))完成添加,删除和更新元素的操作。因为元素是在插入时就排好序的,所以很快地通过评分(score)或者 位次(position)获得一个范围的元素。访问有序集合的中间元素同样也是非常快的。常用命令:zadd/zrange/zrank/zcard/zcount。4.redis事务
事务是一系列命令原子性执行的操作,事务中的命令会按顺序执行,要么全部被执行,要么全部不执行。事务相关命令:multi/exec,使用multi开启事务,然后就可以发送一系列命令,最后使用exec进行提交,所有命令才会被执行,使用discard命令可以取消事务队列。redis事务是不支持回滚的,因为只有执行命令存在错误时才会执行失败,且回滚并不能解决编程错误。事务其实类似于lua脚本执行redis命令,都是将多个命令组织在一起,发送至redis,且脚本执行更快,写起来更简单,完全可以使用脚本取代事务。
5.redis持久化
RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储,定时备份,RDB是一个非常紧凑的文件,它保存了某个时间点的数据集,RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他IO操作,所以RDB持久化方式可以最大化redis的性能。AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾。AOF文件保存的数据集要比RDB文件保存的数据集要完整。如果数据完整性要求特别高就使用AOF,否则使用RDB就好了,也可以同时启用,合理设置fsync到磁盘方式,兼顾下性能和安全。
6.分布式锁
使用redis命令setnx可以在共享资源时作为获取锁的依据,线程执行完相关操作时由锁的持有者del相关key,基本注意几点即可:使用setnx来上锁,注意要设置超时时间;没有获取到锁时,合理设置等待时间;最后谁加的锁由谁去释放。需要考虑集群中节点数据同步问题,可以直接使用redisson提供的api分布式锁来操作分布式下的共享资源。7.淘汰清除机制当maxmemory限制达到的时候Redis会使用的行为由 Redis的maxmemory-policy配置指令来进行配置。noeviction:当可用内存达到最大时,直接返回错误。allkeys-lru:尝试回收最少使用的键LRU。volatile-lru: 尝试回收最少使用的键LRU,但仅限于在过期集合的键。allkeys-random: 回收随机的键使得新添加的数据有空间存放。volatile-random:回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。volatile-ttl:回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间存放。redis的key值过期了,当再次访问时会清除,避免访问到过期的key;redis自身也有定时任务清除过期的key;当内存最大时不得不进行相关key的清除。


  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net