精华内容
下载资源
问答
  • Redis应用场景--Redis作者谈Redis应用场景
  • redis应用场景

    2019-01-09 19:10:24
    redis应用场景 1 缓存提高访问速度 redis数据库是基于缓存的数据库,缓存可以提高速度,当我们访问某个网站的时候,第一个访问的人发起请求之后服务器这边收到请求,下一步就是返回一些静态文件,那么如果某些静态文件的...

    redis应用场景

    1 缓存提高访问速度

    redis数据库是基于缓存的数据库,缓存可以提高速度,当我们访问某个网站的时候,第一个访问的人发起请求之后服务器这边收到请求,下一步就是返回一些静态文件,那么如果某些静态文件的内容是不经常变动的,那么就没有必要每次都去查找文件进行返回

    在redis开辟一个空间进行存储,用户发起访问之后现在redis中进行寻找,如果里面存放着数据,那么直接就从redis中进行返回,这样非常快,如果redis里面没有,那么就再在文件中找,找到后返回数据,同时将数据存到redis中,这样下一个人来访问的时候就会非常快,慢的只是第一个人

    这种方式非常常见,但是并不是一直向redis中存,redis基于内存的存储,如果内存存满之后将无法存储,因此对于那种被访问频率最高的数据,和访问频率很低的数据需要进行区别,那么就进行存在时间设置,每个被加载到redis中对的数据进行时间设置,如果超时就自动清理

    用户每次访问的时候就对这个时间进行更新,如果是一个被访问频率很高的数据就会因为一直有用户访问导致失效时间一直后延,而那种访问频率非常低的数据就会因为两个连续访问用户之间时间间隔过长,从而导致失效时间达到后自动删除

    2 非关系性质的应用

    redis与mysql是两种典型的数据库代表,redis是非关系型数据库,这种数据库里面存储的是key value对,key实际上就是索引.这种数据库相对于mysql的优势在于不存在连表查询这种非常复杂的操作

    比如在社交网络中的关系非常复杂,你朋友的朋友的亲戚的外甥的同学的哥哥的女朋友,听起来就脑壳痛,关系非常长,如果是mysql进行存储的,需要从你开始,连接多个表,最后才定位到目标,先不说数据库的效率,这种连接多层表的查询在书写语句的时候就要写死人,如果里面的关系再恶心点,有一对多,多对多,多对一的杂糅关系,那么写查询语句简直巴适得板

    redis直接解决这种问题,根本就没有关系,只有索引,你给索引,瞬间找到

    3 多任务公用—分布式思维

    在多进程中,我们使用的是管道进行进程之间的数据交流,这种思维就是找一个公共的区域进行存放大家都要用的数据,从而实现进程之间的传递

    两个独立的内存空间需要通信则需要找一个都能访问到的空间,那么任何进程都能够进行通过库访问到指定的一个redis数据库,两个空间都向这个库中添加和读取信息,那么就是实现了公用的问题

    有点像QQ里面的群发消息,把群看成一个公共的地区,你发的消息发到这个公共地区,别人都能看到,别人发的数据你也能读到,这样的好处在于分布式的思维

    如果现在有多台计算机,那么多个计算机就相当于是多个进程,如果计算机之间各自执行不同的功能,同时也需要其他计算提供加工后的数据,数据之间相互调用,那么使用网络方式确实也可以实现,这就有点费力不讨好了,最简单最容易的方式就是大家都把数据存到指定的一个redis数据库中,所有人都能访问到,这样就能够在某个计算机需要的时候进行读取,产生数据后保存到redis中方便其他计算机使用

    展开全文
  • redis应用场景简介

    2019-05-06 10:29:48
    去年我写的培训用教材,redis应用场景简介,简单列举了一些Redis的使用场景。 发现下载积分居然无法调整……
  • Redis使用场景

    千次阅读 2019-09-27 11:32:38
    文章目录计数器缓存会话缓存全页缓存(FPC)查找表消息队列(发布/订阅功能)分布式锁实现其它 计数器 可以对 String 进行自增自减运算,从而实现...可以使用 Redis 来统一存储多台应用服务器的会话信息。 当应用服...

    计数器

    可以对 String 进行自增自减运算,从而实现计数器功能。

    Redis 这种内存型数据库的读写性能非常高,很适合存储频繁读写的计数量。

    缓存

    将热点数据放到内存中,设置内存的最大使用量以及淘汰策略来保证缓存的命中率。

    会话缓存

    可以使用 Redis 来统一存储多台应用服务器的会话信息。

    当应用服务器不再存储用户的会话信息,也就不再具有状态,一个用户可以请求任意一个应用服务器,从而更容易实现高可用性以及可伸缩性。

    全页缓存(FPC)

    除基本的会话token之外,Redis还提供很简便的FPC平台。

    以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。此外,对WordPress的用户来说,Pantheon有一个非常好的插件 wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。

    查找表

    例如 DNS 记录就很适合使用 Redis 进行存储。

    查找表和缓存类似,也是利用了 Redis 快速的查找特性。但是查找表的内容不能失效,而缓存的内容可以失效,因为缓存不作为可靠的数据来源。

    消息队列(发布/订阅功能)

    List 是一个双向链表,可以通过 lpush 和 rpop 写入和读取消息

    不过最好使用 Kafka、RabbitMQ 等消息中间件。

    分布式锁实现

    在分布式场景下,无法使用单机环境下的锁来对多个节点上的进程进行同步。

    可以使用 Redis 自带的 SETNX 命令实现分布式锁,除此之外,还可以使用官方提供的 RedLock 分布式锁实现。

    其它

    Set 可以实现交集、并集等操作,从而实现共同好友等功能。

    ZSet 可以实现有序性操作,从而实现排行榜等功能。

    展开全文
  • Redis应用场景

    2014-06-04 15:50:55
    Redis应用场景 Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的...

    Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的冰箱。

    Redis常用数据类型

    Redis最为常用的数据类型主要有以下五种:

    • String
    • Hash
    • List
    • Set
    • Sorted set

    在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的:

    首先Redis内部使用一个redisObject对象来表示所有的key和value,redisObject最主要的信息如上图所示:type代表一个value对象具体是何种数据类型,encoding是不同数据类型在redis内部的存储方式,比如:type=string代表value存储的是一个普通字符串,那么对应的encoding可以是raw或者是int,如果是int则代表实际redis内部是按数值型类存储和表示这个字符串的,当然前提是这个字符串本身可以用数值表示,比如:"123" "456"这样的字符串。

    这里需要特殊说明一下vm字段,只有打开了Redis的虚拟内存功能,此字段才会真正的分配内存,该功能默认是关闭状态的,该功能会在后面具体描述。通过上图我们可以发现Redis使用redisObject来表示所有的key/value数据是比较浪费内存的,当然这些内存管理成本的付出主要也是为了给Redis不同数据类型提供一个统一的管理接口,实际作者也提供了多种方法帮助我们尽量节省内存使用,我们随后会具体讨论。

    下面我们先来逐一的分析下这五种数据类型的使用和内部实现方式:

    • String

      常用命令:

      set,get,decr,incr,mget 等。

      应用场景:

      String是最常用的一种数据类型,普通的key/value存储都可以归为此类,这里就不所做解释了。

      实现方式:

      String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。

    • Hash

      常用命令:

      hget,hset,hgetall 等。

      应用场景:

      我们简单举个实例来描述下Hash的应用场景,比如我们要存储一个用户信息对象数据,包含以下信息:

      用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储,主要有以下2种存储方式:

      第一种方式将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保护,引入CAS等复杂问题。

      第二种方法是这个用户信息对象有多少成员就存成多少个key-value对儿,用用户ID+对应属性的名称作为唯一标识来取得对应属性的值,虽然省去了序列化开销和并发问题,但是用户ID为重复存储,如果存在大量这样的数据,内存浪费还是非常可观的。

      那么Redis提供的Hash很好的解决了这个问题,Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口,如下图:

      也就是说,Key仍然是用户ID, value是一个Map,这个Map的key是成员的属性名,value是属性值,这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题。很好的解决了问题。

      这里同时需要注意,Redis提供了接口(hgetall)可以直接取到全部的属性数据,但是如果内部Map的成员很多,那么涉及到遍历整个内部Map的操作,由于Redis单线程模型的缘故,这个遍历操作可能会比较耗时,而另其它客户端的请求完全不响应,这点需要格外注意。

      实现方式:

      上面已经说到Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现,这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap,当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。

    • List

      常用命令:

      lpush,rpush,lpop,rpop,lrange等。

      应用场景:

      Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现,比较好理解,这里不再重复。

      实现方式:

      Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。

    • Set

      常用命令:

      sadd,spop,smembers,sunion 等。

      应用场景:

      Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。

      实现方式:

      set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

    Sorted set

    常用命令:

    zadd,zrange,zrem,zcard等

    使用场景:

    Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构,比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。

    实现方式:

    Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。
    展开全文
  • Redis应用场景3——电商场景

    千次阅读 2019-06-10 00:10:06
    传送门 Redis应用场景1——简单场景 Redis应用场景2——广告定向 Redis应用场景3——电商场景 Redis应用场景4——搜索场景 Redis应用场景5——社交网络 持续更新中。。。 ...
    展开全文
  • Redis应用场景4——搜索场景

    千次阅读 2019-06-10 00:11:00
    传送门 Redis应用场景1——简单场景 Redis应用场景2——广告定向 Redis应用场景3——电商场景 Redis应用场景4——搜索场景 Redis应用场景5——社交网络 持续更新中。。。。 ...
  • Redis应用场景1——简单场景

    万次阅读 2014-01-02 22:08:26
    Redis应用场景1——简单场景 Redis应用场景2——广告定向 Redis应用场景3——电商场景 Redis应用场景4——搜索场景 Redis应用场景5——社交网络 1、计数器 redis incrBy就可以了 2、信号量 1)基本信号量...
  • Redis 使用场景

    千次阅读 2019-05-22 09:10:52
    在某些场景下,可以充分的利用 Redis 的特性,大大提高效率。 缓存 对于热点数据,缓存以后可能读取数十万次,因此,对于热点数据,缓存的价值非常大。例如,分类栏目更新频率不高,但是绝大多数的页面都需要访问...
  • Redis 应用场景

    千次阅读 2015-04-05 22:24:27
    Redis作者@antirez,描述了Redis比较适合的一些应用场景.......
  • Redis应用场景2——广告定向

    千次阅读 2019-06-09 22:36:17
    传送门 Redis应用场景1——简单场景 Redis应用场景2——广告定向 Redis应用场景3——电商场景 Redis应用场景4——搜索场景 Redis应用场景5——社交网络 待续。。。。 ...
  • #Redis# REDIS应用场景

    2017-04-21 22:22:56
    一、以下为redis应用场景图 二、结合redis+MySQL,以下给出某页游的实际应用 PS : redis应用场景只需更新 ...
  • Redis应用场景5——社交网络

    千次阅读 2019-06-10 00:26:31
    Redis应用场景1——简单场景 Redis应用场景2——广告定向 Redis应用场景3——电商场景 Redis应用场景4——搜索场景 Redis应用场景5——社交网络 一个社交网络中最常见的三个场景是用户相互关注,关注者...
  • Redis作者谈Redis应用场景 毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作...
  • redis使用场景

    2015-10-05 10:47:45
    1 设置redis的最大使用内存  当redis达到最大使用内存时,则按照预先设置好的过期key丢失策略,丢弃过期的key。如果配置了从redis,则会采用主从复制通知从redis丢弃相应的key。  当redis达到最大使用内存时,则写...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 176,004
精华内容 70,401
关键字:

redis应用场景

redis 订阅