互联网应用的基石

现在流量稍微大些的网站,都会采取Redis。基于Redis的内存缓存特性,可以大幅度降低数据库的访问量,大大提升了网站的并发能力,充当数据库的削量先锋。既然Redis这么重要,我们从它的官方介绍来完整的了解下它的能力,知己知彼,才能更运用自如。

Redis官方介绍

Redis是一个开源(BSD协议),内存解构存储,可以用作数据库,缓存和消息代理。它支持诸如字符串(strings),哈希散列(hashs),列表(lists),集合(sets),带有范围查询的排序集(sorted sets with range queries),位图(bitmaps),超级日志(hyperloglogs )和带有半径查询的地理空间索引(geospatial indexes with radius queries),Redis具有内置复制( replication),Lua脚本(Lua scripting),LRU驱逐(LRU eviction),事务(transactions )和不同级别的磁盘持久性(different levels of on-disk persistence),并通过Redis Sentinel提供高可用性和通过Redis Cluster自动分区。 您可以 对这些类型运行原子操作,例如附加到字符串 ; 递增哈希值 ; 将元素推送到列表中 ; 计算集合交集, 并集和差异 ; 或者在排序集中获得排名最高的成员。 你可以对这些类型执行原子操作,像追加字符串;在哈希里递增值;推送一个元素到列表;计算集合交集, 并集和差异 ; 或者在排序集中获得排名最高的成员。为了实现其出色的性能,Redis使用 内存数据集。根据您的使用情况,您可以通过 每隔一段时间将数据集转储到磁盘或通过将每个命令附加到日志来保留它。如果您只需要功能丰富的网络内存缓存,则可以选择禁用持久性。

Redis还支持简单到设置的主从异步复制,具有非常快速的非阻塞第一次同步,自动重新连接以及在网络分割上的部分重新同步。

其他功能包括:

  • 事务
  • 发布/订阅
  • Lua脚本(例如:eval 调用redis的脚本)
  • 设置Key的过期时间
  • LRU-Cahce(内存管理的一种页面置换算法,最近最少使用)
  • 自动故障转移(通过Redis Sentinel实现)

Redis是用ANSI C编写,官方建议使用Linux进行部署,Windows版本没有官方支持,但Microsoft开发并维护了Redis的Win-64端口。

Redis应用场景

  • 数据表缓存

一般访问量较大的表,读取时可以先获取Redis缓存,获取不到再查询数据库,然后放入Redis。这是最常见的运用场景。

  • 业务状态缓存

例如,多租户的系统,为了减小批量数据压力,可以利用redis实现同一时间内,只能由一个导入。导入完成,清空缓存。也可以限制十分钟内只能导入一次等。

还有例如首页数据放入缓存,两分钟更新一次。

  • 原子性

利用Redis一些原子性命令Inc,decr,可以实现业务参数唯一执行的场景,如订单付款成功通知,为了防止业务线创建多条记录,可以对订单Id执行inc命令,判断是否为1,1代表只有一个执行,如果大于1,则返回结果,并调用decr。类似于信号量。

Redis应用风险

虽然Redis给我们提供了巨大的便利,但也要时刻保持对它的关注。要不然有些时候,会对你造成巨大的伤害。

  • 缓存穿透

意思是指同一个key,数据库没有数据,巨大流量下,会不断的访问数据库。这是浪费的,可以针对一些场景,控制查询次数。如果获取不到值,在指定的时间内不再请求数据库。

  • 缓存雪崩

同一时间内大量key同时失效,造成流量集体访问数据库,临时失去了缓存的作用。

  • 缓存预热

必要的基础数据,可以提前缓存掉。节约第一次加载时间。

  • 风险监控

针对线上机器的不同维度实施监控,如链接数,内存,cpu,稳定性等有异常及时发通知。

  • flushall风险预知

在极端情况下,为了保证新业务的稳定,可能采取被迫措施flushall,清空所有缓存。这种情况下,你一定不能把缓存当成数据库来使用,要有缓存随时可以丢弃的自觉性。谨记!

虽然有大量要注意的风险点,但比起它的收益来讲,我们肯定会继续使用的。量一大,各种问题都会出来,不要怕,挺住!

Redis C#客户端

C#客户端 这里列举了

  • csredis
  • Nhiredis
  • redis-sharp
  • redisboost
  • ServiceStack.Redis
  • Sider
  • StackExchange.Redis
  • TeamDev Redis Client

使用之前,可以先了解下它们的优点和弊端,如ServiceStack.Redis 4.0以上版本属于收费版本。StackExchange.Redis在.net core下有超时bug。

Redis常用命令知悉

Redis官方提供了在线命令测试redis命令,我们可以通过这个网页快速熟悉命令。 命令种类有很多,我们今天先从strings,lists来熟悉下。

string下的命令

  • set
  • get
  • getrange 获取字符串区间
  • append 追加
> set key1 dolll
OK
> get key1
"dolll"
> GETRANGE key1 0 2
"dol"
> append key1 as
7
> get key1
"dolllas"
  • incr 递增
  • decr 递减
> incr hello
(integer) 1
> incr hello
(integer) 2
> decr hello
(integer) 1

list下的命令

  • lpush
  • lrange
> lpush dwe redis
(integer) 1
> lpush dwe ds
(integer) 2
> lpush dwe sd
(integer) 3
> lpush dwe qd
(integer) 4 > lRange dwe 0 20
1) "qd"
2) "sd"
3) "ds"
4) "redis"

匆忙的结束

今天主要重温了下Redis,了解Redis应用场景,C#客户端和简单的运行命令。

分布式Redis缓存串讲(一)的更多相关文章

  1. AbpVnext使用分布式IDistributedCache Redis缓存(自定义扩展方法)

    AbpVnext使用分布式IDistributedCache缓存from Redis(带自定义扩展方法) 我的依赖包的主要版本以及Redis依赖如下 1:添加依赖 <PackageReferen ...

  2. 【转载】分布式之redis复习精讲

    注: 本篇文章转自:分布式之redis复习精讲 引言 为什么写这篇文章? 博主的<分布式之消息队列复习精讲>得到了大家的好评,内心诚惶诚恐,想着再出一篇关于复习精讲的文章.但是还是要说明一 ...

  3. SpringBoot集成Redis分布式锁以及Redis缓存

    https://blog.csdn.net/qq_26525215/article/details/79182687 集成Redis 首先在pom.xml中加入需要的redis依赖和缓存依赖 < ...

  4. 分布式改造剧集之Redis缓存采坑记

    Redis缓存采坑记 ​ 前言 ​ 这个其实应该属于分布式改造剧集中的一集(第一集见前面博客:http://www.cnblogs.com/Kidezyq/p/8748961.html),本来按照顺序 ...

  5. 在这个应用中,我使用了 MQ 来处理异步流程、Redis 缓存热点数据、MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ、MySQL 持久化的数据也会存在于一个分布式文件系统中,他们之间的调用也是需要用 RPC 来完成数据交互的。

    在这个应用中,我使用了 MQ 来处理异步流程.Redis 缓存热点数据.MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ.MySQ ...

  6. 分布式二级缓存组件实战(Redis+Caffeine实现)

    前言 在生产中已有实践,本组件仅做个人学习交流分享使用.github:https://github.com/axinSoochow/redis-caffeine-cache-starter 个人水平有 ...

  7. 分布式中为什么要加入redis缓存的理解

    面我们介绍了mybatis自带的二级缓存,但是这个缓存是单服务器工作,无法实现分布式缓存.那么什么是分布式缓存呢?假设现在有两个服务器1和2,用户访问的时候访问了1服务器,查询后的缓存就会放在1服务器 ...

  8. 转 Redis 总结精讲 看一篇成高手系统-4

    转 Redis 总结精讲 看一篇成高手系统-4 2018年05月31日 09:00:05 hjm4702192 阅读数:125633   本文围绕以下几点进行阐述 1.为什么使用redis 2.使用r ...

  9. Redis缓存穿透、缓存雪崩、redis并发问题 并发竞争key的解决方案 (阿里)

    阿里的人问我 缓存雪崩(大量数据在同一时间过期了)了如何处理,缓存击穿了如何处理,回答的很烂,做了总结: 把redis作为缓存使用已经是司空见惯,但是使用redis后也可能会碰到一系列的问题,尤其是数 ...

随机推荐

  1. ubuntu下给raspy pi2 编译qt5库

    交叉编译时,通常要准备mkspec, 参考: http://wiki.qt.io/Building_Qt_for_Embedded_Linux mkspec包含两个文件: qmake.conf- Th ...

  2. 转:sqlserver 临时表、表变量、CTE的比较

    1.临时表 1.1 临时表包括:以#开头的局部临时表,以##开头的全局临时表. 1.2 存储 不管是局部临时表,还是全局临时表,都会放存在tempdb数据库中. 1.3 作用域 局部临时表:对当前连接 ...

  3. plupload 大文件分片上传与PHP分片合并探索

    最近老大分给我了做一个电影cms系统,其中涉及到一个功能,使用七牛云的文件上传功能.七牛javascript skd,使用起来很方便,屏蔽了许多的技术细节.如果只满足与调用sdk,那么可能工作中也就没 ...

  4. MySQL一个延迟案例

    突然接到报警显示MySQL主从之间延迟过大,随后尽快到集群上面看看,进行排查. 首先我们查看延迟是由什么造成的,排查一遍过后发现不是网卡和从库机器的负载,那就要从其他地方来排除了 查看binlog日志 ...

  5. win10 损坏 bios?

    自从前几个月升级为win10后,主板莫名奇妙的就出问题了,遇到3块不同型号2块技嘉b75,1块微信ph67 技嘉b75-ds3v 技嘉b75m-d3v 微星ph67s-c43 ms-7673 1.0 ...

  6. apk静态注射[转]-未实践

    原文:http://free0coding.iteye.com/blog/1684263 1.将需要注入的代码块打包成jar1,释放一个公共类的静态方法a  2.反编译apk得到smali文件,在适当 ...

  7. 2019 wannafly winter camp

    2019 wannafly winter camp Name Rank Solved A B C D E F G H I J K day1 9 5/11 O O O O O day2 5 3/11 O ...

  8. 4、JUC--CountDownLatch闭锁

    CountDownLatch  Java 5.0 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能.  CountDownLatch 一个同步辅助类,在完 ...

  9. weex+vue2.x 踩坑实录(不定期更新)

    执行 npm start 显示空白页面 这个是开始使用weex就出现的一个大坑,说实话对新手真的很不友好. 1.打开控制台显示:Cannot assign to read only property ...

  10. docker-machine create -d generic 运行的波折过程及遇见的问题

    这是一个愚蠢的学习过程,但是因为觉得过程还是值得记录的,还是写了下来 2>driver = generic 1)在这个过程中使用的都是本地的mac系统,然后尝试在mac本地create -d g ...