精华内容
下载资源
问答
  • Redis支持的数据类型

    2018-12-02 17:08:05
    @Redis Redis支持的数据类型 相比memcache, redis的value支持丰富的数据类型。如:strings, hashs, lists, sets, sorted sets。

    @Redis

    Redis支持的数据类型

    相比memcache, redis的value支持丰富的数据类型。如:strings, hashs, lists, sets, sorted sets。

    展开全文
  • redis支持的数据类型

    2018-03-27 09:59:58
    string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M 2.Hash(哈希)Redis hash 是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对...

    1.String(字符串)

    string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

    string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M

     2.Hash(哈希)

    Redis hash 是一个键值对集合。
    Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

    类似Java里面的Map<String,Object>

     3.List(列表)

    Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。
    它的底层实际是个链表

     4.Set(集合)

    Redis的Set是string类型的无序集合。它是通过HashTable实现实现的,

     5.zset(sorted set:有序集合)

    Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
    不同的是每个元素都会关联一个double类型的分数。
    redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。


    展开全文
  • 1.Redis支持的数据类型? String(字符串) 格式: set key value string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。 string类型是Redis最基本的数据类型,一个键最大...

    1.Redis支持的数据类型?

    String(字符串)

    格式: set key value

    string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

    string类型是Redis最基本的数据类型,一个键最大能存储512MB。

    Hash(哈希)

    格式: hmset name key1 value1 key2 value2

    Redis hash 是一个键值(key=>value)对集合。

    Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

    List(列表)

    Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

    格式: lpush name value

    在 key 对应 list 的头部添加字符串元素

    格式: rpush name value

    在 key 对应 list 的尾部添加字符串元素

    格式: lrem name index

    key 对应 list 中删除 count 个和 value 相同的元素

    格式: llen name

    返回 key 对应 list 的长度

    Set(集合)

    格式: sadd name value

    Redis的Set是string类型的无序集合。

    集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

    zset(sorted set:有序集合)

    格式: zadd name score value

    Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

    不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

    zset的成员是唯一的,但分数(score)却可以重复。

    2.什么是Redis持久化?Redis有哪几种持久化方式?优缺点是什么?

    持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。

    Redis 提供了两种持久化方式:RDB(默认) 和AOF

    RDB:

    rdb是Redis DataBase缩写

    功能核心函数rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)两个函数

    AOF:

    Aof是Append-only file缩写

    每当执行服务器(定时)任务或者函数时flushAppendOnlyFile 函数都会被调用, 这个函数执行以下两个工作

    aof写入保存:

    • WRITE:根据条件,将 aof_buf 中的缓存写入到 AOF 文件
    • SAVE:根据条件,调用 fsync 或 fdatasync 函数,将 AOF 文件保存到磁盘中。

    存储结构:

    内容是redis通讯协议(RESP )格式的命令文本存储。

    比较:

    • aof文件比rdb更新频率高,优先使用aof还原数据。
    • aof比rdb更安全也更大
    • rdb性能比aof好
    • 如果两个都配了优先加载AOF

    刚刚上面你有提到redis通讯协议(RESP ),能解释下什么是RESP?有什么特点?(可以看到很多面试其实都是连环炮,面试官其实在等着你回答到这个点,如果你答上了对你的评价就又加了一分)

    RESP 是redis客户端和服务端之前使用的一种通讯协议;

    RESP 的特点:实现简单、快速解析、可读性好

    For Simple Strings the first byte of the reply is “+” 回复
    For Errors the first byte of the reply is “-” 错误
    For Integers the first byte of the reply is “:” 整数
    For Bulk Strings the first byte of the reply is “$” 字符串
    For Arrays the first byte of the reply is “*” 数组

    持久化在面试中问到的频率较高,重点学一下,篇幅有限,具体点下面的文章:

    10分钟彻底理解Redis的持久化机制:RDB和AOF

    3.Redis 有哪些架构模式?讲讲各自的特点

    单机版

    特点:

    简单

    问题:

    • 内存容量有限
    • 处理能力有限
    • 无法高可用。

    主从复制

    Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品,其中被复制的服务器为主服务器(master),而通过复制创建出来的服务器复制品则为从服务器(slave)。

    只要主从服务器之间的网络连接正常,主从服务器两者会具有相同的数据,主服务器就会一直将发生在自己身上的数据更新同步 给从服务器,从而一直保证主从服务器的数据相同。

    特点:

    • master/slave 角色
    • master/slave 数据相同
    • 降低 master 读压力在转交从库

    问题:

    • 无法保证高可用
    • 没有解决 master 写的压力

    哨兵

    Redis sentinel 是一个分布式系统中监控 redis 主从服务器,并在主服务器下线时自动进行故障转移。其中三个特性:

    • 监控(Monitoring):Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
    • 提醒(Notification):当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
    • 自动故障迁移(Automatic failover):当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作。

    特点:

    • 保证高可用
    • 监控各个节点
    • 自动故障迁移

    缺点:

    • 主从模式,切换需要时间丢数据
    • 没有解决 master 写的压力

    集群(proxy 型)

    Twemproxy 是一个 Twitter 开源的一个 redis 和 memcache 快速/轻量级代理服务器;Twemproxy 是一个快速的单线程代理程序,支持 Memcached ASCII 协议和 redis 协议。

    特点:

    • 多种 hash 算法:MD5、CRC16、CRC32、CRC32a、hsieh、murmur、Jenkins
    • 支持失败节点自动删除
    • 后端 Sharding 分片逻辑对业务透明,业务方的读写方式和操作单个 Redis 一致

    缺点:

    • 增加了新的 proxy,需要维护其高可用。
    • failover 逻辑需要自己实现,其本身不能支持故障的自动转移可扩展性差,进行扩缩容都需要手动干预

    集群(直连型):

    从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。

    特点:

    • 无中心架构(不存在哪个节点影响性能瓶颈),少了 proxy 层。
    • 数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布。
    • 可扩展性,可线性扩展到 1000 个节点,节点可动态添加或删除。
    • 高可用性,部分节点不可用时,集群仍可用。通过增加 Slave 做备份数据副本
      -实现故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave到 Master 的角色提升。

    缺点:

    • 资源隔离性较差,容易出现相互影响的情况。
    • 数据通过异步复制,不保证数据的强一致性

    高可用Redis架构分析搭建,可以参考:

    高可用Redis服务架构分析与搭建

    4.使用过Redis分布式锁么,它是怎么实现的?

    先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。

    如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样?

    set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的!

    5.使用过Redis做异步队列么,你是怎么用的?有什么缺点?

    一般使用list结构作为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候,要适当sleep一会再重试。

    缺点:

    • 在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如rabbitmq等。

    能不能生产一次消费多次呢?

    使用pub/sub主题订阅者模式,可以实现1:N的消息队列。

    6.什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?

    缓存穿透

    一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。

    如何避免?

    • 对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。
    • 对一定不存在的key进行过滤。可以把所有的可能存在的key放到一个大的Bitmap中,查询时通过该bitmap过滤。

    缓存雪崩

    当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,会给后端系统带来很大压力。导致系统崩溃。

    如何避免?

    • 在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
    • 做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期
    • 不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。

    这道相当常见,详细再参考下文,一定熟练掌握:

    Redis缓存雪崩、缓存击穿、缓存穿透和常见的几种缓存模式

    7.Redis常用命令

    管理命令

    # dbsize 返回当前数据库 key 的数量。# info 返回当前 redis 服务器状态和一些统计信息。# monitor 实时监听并返回redis服务器接收到的所有请求信息。# shutdown 把数据同步保存到磁盘上,并关闭redis服务。# config get parameter 获取一个 redis 配置参数信息。(个别参数可能无法获取)# config set parameter value 设置一个 redis 配置参数信息。(个别参数可能无法获取)# config resetstat 重置 info 命令的统计信息。(重置包括:keyspace 命中数、# keyspace 错误数、 处理命令数,接收连接数、过期 key 数)# debug object key 获取一个 key 的调试信息。# debug segfault 制造一次服务器当机。# flushdb 删除当前数据库中所有 key,此方法不会失败。小心慎用# flushall 删除全部数据库中所有 key,此方法不会失败。小心慎用
    

    工具命令

    #redis-server:Redis 服务器的 daemon 启动程序#redis-cli:Redis 命令行操作工具。当然,你也可以用 telnet 根据其纯文本协议来操作#redis-benchmark:Redis 性能测试工具,测试 Redis 在你的系统及你的配置下的读写性能$redis-benchmark -n 100000 –c 50#模拟同时由 50 个客户端发送 100000 个 SETs/GETs 查询#redis-check-aof:更新日志检查#redis-check-dump:本地数据库检查
    

    8.Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比

    Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比

    9.为什么Redis 单线程却能支撑高并发?

    为什么Redis 单线程却能支撑高并发?

    10.Redis常见性能问题和解决方案:

    1).Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。

    2).Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度。Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化,如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。

    3).Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,导致服务load过高,出现短暂服务暂停现象。

    4).Redis主从复制的性能问题,为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内

    Redis性能分析相关问题,限于篇幅,给出文章链接:

    Redis 性能问题分析(好文推荐)

    11.Redis的并发竞争问题如何解决?

    Redis为单进程单线程模式,采用队列模式将并发访问变为串行访问。Redis本身没有锁的概念,Redis对于多个客户端连接并不存在竞争,但是在Jedis客户端对Redis进行并发访问时会发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是由于客户端连接混乱造成。对此有2种解决方法:

    • 客户端角度,为保证每个客户端间正常有序与Redis进行通信,对连接进行池化,同时对客户端读写Redis操作采用内部锁synchronized。
    • 服务器角度,利用setnx实现锁。

    注:对于第一种,需要应用程序自己处理资源的同步,可以使用的方法比较通俗,可以使用synchronized也可以使用lock;第二种需要用到Redis的setnx命令,但是需要注意一些问题。

    12.说说Redis的内存淘汰策略

    直接点这里:Redis的内存淘汰策略

    13.Redis最适合的场景

    Redis最适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就会有疑问,似乎Redis更像一个加强版的Memcached,那么何时使用Memcached,何时使用Redis呢?

    如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:

    • Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
    • Redis支持数据的备份,即master-slave模式的数据备份。
    • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

    会话缓存(Session Cache)

    最常用的一种使用Redis的情景是会话缓存(session cache)。用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗?

    幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用Redis来缓存会话的文档。甚至广为人知的商业平台Magento也提供Redis的插件。

    全页缓存(FPC)

    除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地FPC。

    再次以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。

    此外,对WordPress的用户来说,Pantheon有一个非常好的插件 wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。

    队列

    Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。

    如果你快速的在Google中搜索“Redis queues”,你马上就能找到大量的开源项目,这些项目的目的就是利用Redis创建非常好的后端工具,以满足各种队列需求。例如,Celery有一个后台就是使用Redis作为broker,你可以从这里去查看。

    排行榜/计数器

    Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的10个用户–我们称之为“user_scores”。

    当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行:ZRANGE user_scores 0 10 WITHSCORES

    Agora Games就是一个很好的例子,用Ruby实现的,它的排行榜就是使用Redis来存储数据的,你可以在这里看到。

    发布/订阅

    最后(但肯定不是最不重要的)是Redis的发布/订阅功能。发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis的发布/订阅功能来建立聊天系统!

    展开全文
  • 本文主要讲述:Redis支持的数据类型、key、string、list、set、hash的相关命令,以及它的持久化、主从复制和事务。
  • Redis支持的数据类型以及使用场景,持久化,哨兵机制,缓存击穿,缓存穿透 简单介绍一个redis? redis是内存中的数据结构存储系统,一个key-value类型的非关系型数据库,可持久化的数据库,相对于关系型数据库(数据...

    Redis支持的数据类型以及使用场景,持久化,哨兵机制,缓存击穿,缓存穿透

    简单介绍一个redis?

    redis是内存中的数据结构存储系统,一个key-value类型的非关系型数据库,可持久化的数据库,相对于关系型数据库(数据主要存在硬盘中),性能高,因此我们一般用redis来做缓存使用;并且redis支持丰富的数据类型,比较容易解决各种问题,因此redis可以用来作为注册中心,​数据库、缓存和消息中间件。Redis的Value支持5种数据类型,string、hash、list、set、zset(sorted set);

    String类型:一个key对应一个value

    Hash类型:它的key是string类型,value又是一个map(key-value),适合存储对象。

    List类型:按照插入顺序的字符串链表(双向链表),主要命令是LPUSH和RPUSH,能够支持反向查找和遍历

    Set类型:用哈希表类型的字符串序列,没有顺序,集合成员是唯一的,没有重复数据,底层主要是由一个value永远为null的hashmap来实现的。

    zset类型:和set类型基本一致,不过它会给每个元素关联一个double类型的分数(score),这样就可以为成员排序,并且插入是有序的。

    你还用过其他的缓存吗?这些缓存有什么区别?都在什么场景下去用?

    对于缓存了解过redis和memcache

    Memcache和redis的区别:

    数据支持的类型:redis不仅仅支持简单的k/v类型的数据,同时还支持list、set、zset、hash等数据结构的存储;memcache只支持简单的k/v类型的数据,key和value都是string类型

    可靠性:memcache不支持数据持久化,断电或重启后数据消失,但其稳定性是有保证的;redis支持数据持久化和数据恢复,允许单点故障,但是同时也会付出性能的代价

    性能上:对于存储大数据,memcache的性能要高于redis

    应用场景:

    Memcache:适合多读少写,大数据量的情况(一些官网的文章信息等)

    Redis:适用于对读写效率要求高、数据处理业务复杂、安全性要求较高的系统

    案例:分布式系统,存在session之间的共享问题,因此在做单点登录的时候,我们利用redis来模拟了session的共享,来存储用户的信息,实现不同系统的session共享;

    对redis的持久化了解不?

    redis的持久化方式有两种:

    RDB(半持久化方式):按照配置不定期的通过异步的方式、快照的形式直接把内存中的数据持久化到磁盘的一个dump.rdb文件(二进制的临时文件)中,redis默认的持久化方式,它在配置文件(redis.conf)中。

    优点:只包含一个文件,将一个单独的文件转移到其他存储媒介上,对于文件备份、灾难恢复而言,比较实用。

    缺点:系统一旦在持久化策略之前出现宕机现象,此前没有来得及持久化的数据将会产生丢失

    RDB持久化配置:

    Redis会将数据集的快照dump到dump.rdb文件中。此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开6379.conf文件之后,我们搜索save,可以看到下面的配置信息:

    save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。

    save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。

    save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。

    AOF(全持久化的方式):把每一次数据变化都通过write()函数将你所执行的命令追加到一个appendonly.aof文件里面,Redis默认是不支持这种全持久化方式的,需要在配置文件(redis.conf)中将appendonly no改成appendonly yes

    优点:数据安全性高,对日志文件的写入操作采用的是append模式,因此在写入过程中即使出现宕机问题,也不会破坏日志文件中已经存在的内容;

    缺点:对于数量相同的数据集来说,aof文件通常要比rdb文件大,因此rdb在恢复大数据集时的速度大于AOF;

    AOF持久化配置:

    在Redis的配置文件中存在三种同步方式,它们分别是:

    appendfsync always #每次有数据修改发生时都会都调用fsync刷新到aof文件,非常慢,但是安全;

    appendfsync everysec #每秒钟都调用fsync刷新到aof文件中,很快,但是可能丢失一秒内的数据,推荐使用,兼顾了速度和安全;

    appendfsync no #不会自动同步到磁盘上,需要依靠OS(操作系统)进行刷新,效率快,但是安全性就比较差;

    二种持久化方式区别:

    AOF在运行效率上往往慢于RDB,每秒同步策略的效率是比较高的,同步禁用策略的效率和RDB一样高效;

    如果缓存数据安全性要求比较高的话,用aof这种持久化方式(比如项目中的购物车);

    如果对于大数据集要求效率高的话,就可以使用默认的。而且这两种持久化方式可以同时使用。

    做过redis的集群吗?你们做集群的时候搭建了几台,都是怎么搭建的?

    Redis的数据是存放在内存中的,不适合存储大数据,大数据存储一般公司常用hadoop中的Hbase或者MogoDB。redis主要用来处理高并发的,用我们的项目来说,电商项目如果并发大的话,一台单独的redis是不能足够支持我们的并发,这就需要我们扩展多台设备协同合作,即用到集群。

    Redis搭建集群的方式有多种,例如:客户端分片、Twemproxy、Codis等,但是redis3.0之后就支持redis-cluster集群,这种方式采用的是无中心结构,每个节点保存数据和整个集群的状态,每个节点都和其他所有节点连接。如果使用的话就用redis-cluster集群。集群这块是公司运维搭建的,具体怎么搭建不是太了解。

    我们项目中redis集群主要搭建了6台,3主(为了保证redis的投票机制)3从(高可用),每个主服务器都有一个从服务器,作为备份机。所有的节点都通过PING-PONG机制彼此互相连接;客户端与redis集群连接,只需要连接集群中的任何一个节点即可;Redis-cluster中内置了16384个哈希槽,Redis-cluster把所有的物理节点映射到【0-16383】slot上,负责维护。

    redis有事务吗?

    Redis是有事务的,redis中的事务是一组命令的集合,这组命令要么都执行,要不都不执行,保证一个事务中的命令依次执行而不被其他命令插入。redis的事务是不支持回滚操作的。redis事务的实现,需要用到MULTI(事务的开始)和EXEC(事务的结束)命令 ;

    缓存穿透

    缓存查询一般都是通过key去查找value,如果不存在对应的value,就要去数据库中查找。如果这个key对应的value在数据库中也不存在,并且对该key并发请求很大,就会对数据库产生很大的压力,这就叫缓存穿透

    解决方案:

    1.对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃。

    2.将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。

    3.如果一个查询返回的数据为空(不管是数 据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

    缓存雪崩

    当缓存服务器重启或者大量缓存集中在一段时间内失效,发生大量的缓存穿透,这样在失效的瞬间对数据库的访问压力就比较大,所有的查询都落在数据库上,造成了缓存雪崩。 这个没有完美解决办法,但可以分析用户行为,尽量让失效时间点均匀分布。大多数系统设计者考虑用加锁或者队列的方式保证缓存的单线程(进程)写,从而避免失效时大量的并发请求落到底层存储系统上。

    解决方案:

    1.在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
    2.可以通过缓存reload机制,预先去更新缓存,再即将发生大并发访问前手动触发加载缓存
    3.不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀
    4.做二级缓存,或者双缓存策略。A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期。

    redis的安全机制(你们公司redis的安全这方面怎么考虑的?)

    漏洞介绍:redis默认情况下,会绑定在bind 0.0.0.0:6379,这样就会将redis的服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在访问目标服务器的情况下,未授权就可访问redis以及读取redis的数据,攻击者就可以在未授权访问redis的情况下可以利用redis的相关方法,成功在redis服务器上写入公钥,进而可以直接使用私钥进行直接登录目标主机;

    解决方案:

    禁止一些高危命令。修改redis.conf文件,用来禁止远程修改DB文件地址,比如 rename-command FLUSHALL “” 、rename-command CONFIG"" 、rename-command EVAL “”等;
    以低权限运行redis服务。为redis服务创建单独的用户和根目录,并且配置禁止登录;
    为redis添加密码验证。修改redis.conf文件,添加requirepass mypassword;
    禁止外网访问redis。修改redis.conf文件,添加或修改 bind 127.0.0.1,使得redis服务只在当前主机使用;
    做log监控,及时发现攻击;
    redis的哨兵机制(redis2.6以后出现的)
    哨兵机制:

    监控:监控主数据库和从数据库是否正常运行;

    提醒:当被监控的某个redis出现问题的时候,哨兵可以通过API向管理员或者其他应用程序发送通知;

    自动故障迁移:主数据库出现故障时,可以自动将从数据库转化为主数据库,实现自动切换;

    具体的配置步骤参考的网上的文档。要注意的是,如果master主服务器设置了密码,记得在哨兵的配置文件(sentinel.conf)里面配置访问密码

    redis中对于生存时间的应用

    Redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除;

    应用场景:

    设置限制的优惠活动的信息;
    一些及时需要更新的数据,积分排行榜;
    手机验证码的时间;
    限制网站访客访问频率;

    展开全文
  • Redis 支持的数据类型,特点和优势

    千次阅读 2019-08-07 19:25:12
    Redis支持五种数据类型: string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 Redis的特点: 内存数据库,速度快,也支持数据的持久化,可以将内存中的数据保存在磁盘中...
  • redis常用命令1、全局命令keys *查看所有键dbsize查看是当前所在redis数据库键总数 如果存在大量键,线上禁止使用此指令exists key检查键是否存在,存在返回1,不存在返回0del key删除键,返回删除键个数,删除...
  • Redis系列四:redis支持的数据类型

    千次阅读 2018-04-01 00:41:59
    1.字符串类型:实际上可以是字符串(包括XML JSON),还有数字(整形 浮点数),二进制(图片 音频 视频),最大不能超过512MB2.设值命令:set name lgs ex 10//10秒后过期 px 10000 毫秒过期setnx name...
  • 如果不使用缓存的话,对于一些需要后台程序经过复杂的计算、返回的数据相对稳定(不经常变化)、大量用户频繁访问的请求,对于这样类型请求的处理将会是十分低效的。既然数据相对稳定,变化很少,为什么每次请求的...
  • Redis目前支持5种数据类型,分别是: String(字符串)List(列表)Hash(字典)Set(集合)Sorted Set(有序集合) String(字符串) String是简单 key-value 键值对,value 不仅可以是 String,也可以是...
  • 2020-06-11:Redis支持的数据类型

    千次阅读 2020-06-11 11:35:19
    明天给答案。 评论
  • 并且redis支持丰富的数据类型,比较容易解决各种问题,因此redis可以用来作为注册中心,​数据库、缓存和消息中间件。Redis的Value支持5种数据类型,string、hash、list、set、zset(sorted set); String类型:一...
  • Redis支持的数据类型主要有五种:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 1、String(字符串) string是redis最基本的类型,一个key对应一个value。 string...
  • Redis在我们日常工作中使用的非常频繁,但是也有人只会使用string类型,那么今天笔者梳理下redis中常用的5种数据类型,分别适用于哪些业务场景和基本操作,让大家以后能够在合适的缓存场景使用合适的数据类型。...
  • Redis支持的数据类型? 1. String字符串: 格式: set key value string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。 string类型是Redis最基本的数据类型,一个键最大...
  • Redis的数据类型

    2017-12-18 18:19:56
    Redis支持5中数据类型:string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合) string: string类型是redis最基本类型,一个key对应于一个value,并且是二进制安全,即可以包含任何数据...
  • Redis系列之数据类型

    万次阅读 2020-05-26 20:11:10
    Redis支持数据类型有以下5种:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合),下面我们将一一介绍。 String(字符串) string是redis最基本类型:一个key对应一...
  • Redis支持丰富的数据结构类型,字符串,散列(哈希),集合,有序集合,还支持订阅发布,地理位置等等。实际运用中可以redis,memcache结合,memcache可作为session存储的方式,session都是KV类型键值对。Redis 提供...
  • Redis的数据类型

    千次阅读 2020-03-22 18:32:19
    redis当中一共支持五种数据类型,分别是string字符串类型,list列表类型,集合set类型,hash表类型以及有序集合zset类型,通过这五种不同的数据类型,我们可以实现各种不同的功能,也可以应用与各种不同的场景,接...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,867
精华内容 5,146
关键字:

redis支持的数据类型

redis 订阅