分布式Redis缓存串讲(一)
互联网应用的基石
现在流量稍微大些的网站,都会采取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#客户端和简单的运行命令。
作者:从此启程/范存威
出处:http://www.cnblogs.com/fancunwei/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。如文章对您有用,烦请点个推荐再走,感谢! 本博客新开通打赏,鼠标移到右侧打赏浮动处,即可赏博主点零花钱,感谢您的支持!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Spring Boot 最佳实践(五)Spring Data JPA 操作 MySQL 8
一、Spring Data JPA 介绍 JPA(Java Persistence API)Java持久化API,是 Java 持久化的标准规范,Hibernate是持久化规范的技术实现,而Spring Data JPA是在 Hibernate 基础上封装的一款框架。 开发环境 Spring Boot 2.0.4 Spring Data JPA 2.0.4 MySQL 8.0.12 JDK 8 IDEA 2018.2 Windows 10 二、集成步骤 2.1 配置依赖 添加Spring Data JPA 和 MySQL Connector,配置pom.xml文件,代码如下: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <version>2.0.4.RELEASE</version> </dependency> &l...
- 下一篇
Python | Xpath实战训练
一、前言 今天给大家分享的是,如何在cmd和pycharm中启动自己的spider以及Xpath的基本介绍,并利用Xpath抓取伯乐在线单篇文章基本信息。 二、Xpath介绍 1. 维基百科看 Xpath XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。 XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初XPath的提出的初衷是将其作 为一个通用的、介于XPointer与XSL间的语法模型。但是XPath很快的被开发者采用来当作小型查询 语言。 2. 我来扯扯Xpath 1. Xpath使用路径表达式在xml和html中进行导航(据说访问速度、效率比bs4快) 2. Xpath包含标准函数库 3. Xpah是一个W3c的标准 3. Xpath基本使用语法 三、看代码,边学
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音