Redis应用开发

要求:

  1. 了解Redis应用场景
  2. 掌握Redis二次开发环境搭建
  3. 掌握Redis业务开发

Redis简介

  • Redis是一个基于网络的,高性能key-value内存数据库
  • Redis根memcached类似,不过数据可持久化,而且支持的数据类型很丰富。支持在服务端计算集合的并、交和补集等,还支持多种排序功能。

Redis使用场景有如下几个特点:

  1. 高性能
  2. 低延迟
  3. 丰富数据结构存取
  4. 支持持久化

Redis应用场景介绍
Redis提供了灵活多变的数据结构和数据操作,主要应用于如下场景:

  1. 取最新N个数据的操作,比如典型的取某网站的最新文章。
  2. 排行榜应用,取TOP N操作。
  3. 需要精准设定过期时间的应用。
  4. 计数器应用,比如记录用户访问网站的次数。
  5. 构建队列系统
  6. 缓存,如缓存关系数据库中的频繁访问的表数据。

架构回顾

  1. 无中心自组织的结构,节点之间使用Gossip协议来交换节点状态信息。
  2. 个节点维护Key->Server的映射关系。
  3. Client可以向任意节点发起请求,节点不会转发请求,只是重定向Client
  4. 如果在Client第一次请求之间,Cluster拓扑发生改变,则第二次重定向请求将被再次重定向,直到找到正确的Server为止。

Redis应用开发
设计Redis数据结构

  1. 取最新N个数据的操作:list
  2. 排行榜应用,取TOP N操作。以某个条件为权重,比如按顶的次数排行:sorted set。
  3. 利INCR,DECR命令来构建计数器系统。、
  4. Uniq操作,获取某段时间所有数据排重值:set。
  5. 使用list可以构建队列系统

Redis应用开发
根据场景开发工程

  1. 梳理业务场景流
  2. 设计各模块接口
  3. 如果使用的是安全集群,需要进行安全认证
  4. 熟悉Redis提供的相应API
  5. 调用业务需要的API实现各功能

数据结构设计

  • 计算过程中使用的用户信息使用hash结构存取,KEY设计为userinfo-<user id>,
  • field为用户的属性。

数据读写原则

  • MR任务每天定时将用户信息从后端存储源(HBase)批量导入Redis中。
  • 业务系统获取数据时,先从Redis中获取,获取不到再取后端HBase获取即实时计算,并同步写入到Redis。

样例说明-String类型操作

  1. set:将字符串值value关联到key
  2. get:返回key所关联的字符串值,
  3. setex:将字符串值value关联到key,并设置key的生存时间
  4. append:将value追加到key原值的末尾,类似Java String类型的“+”操作。

样例说明-List类型操作

  1. Ipush/rpush:往列表头/尾添加一个元素。
  2. Irange:返回列表中start至end之间的元素
  3. llen:返回列表的长度
  4. lpop/rpop:从列表头/尾获取一个元素,并将其中列表中删除。

样例说明-Hash类型操作

    • hset
    • hget
    • hgettall
    • hmset
    • hincrby
    • hkeys
    • hvals
    • hmget
    • hexists
    • hdel

FusionInsight大数据开发---Redis应用开发的更多相关文章

  1. FusionInsight大数据开发学习总结(1)

    FusionInsight大数据开发 FusionInsight HD是一个大数据全栈商用平台,支持各种通用大数据应用场景. 技能需求 扎实的编程基础 Java/Scala/python/SQL/sh ...

  2. 大数据全栈式开发语言 – Python

    前段时间,ThoughtWorks在深圳举办一次社区活动上,有一个演讲主题叫做“Fullstack JavaScript”,是关于用JavaScript进行前端.服务器端,甚至数据库(MongoDB) ...

  3. 为什么说Python 是大数据全栈式开发语言

    欢迎大家访问我的个人网站<刘江的博客和教程>:www.liujiangblog.com 主要分享Python 及Django教程以及相关的博客 交流QQ群:453131687 原文链接 h ...

  4. FusionInsight大数据开发---Hive应用开发

    Hive应用开发 了解Hive的基本架构原理 掌握JDBC客户端开发流程 了解ODBC客户端的开发流程 了解python客户端的开发流程 了解Hcatalog/webHcat开发接口 掌握Hive开发 ...

  5. FusionInsight大数据开发---MapReduce与YARN应用开发

    MapReduce MapReduce的基本定义及过程 搭建开发环境 代码实例及运行程序 MapReduce开发接口介绍 1. MapReduce的基本定义及过程 MapReduce是面向大数据并行处 ...

  6. FusionInsight大数据开发---HDFS应用开发

    HDFS应用开发 HDFS(Dadoop Distributed File System) HDFS概述 高容错性 高吞吐量 大文件存储 HDFS架构包含三部分 Name Node DataNode ...

  7. 一文总结高并发大数据量下MySQL开发规范【军规】

    在互联网公司中,MySQL是使用最多的数据库,那么在并发量大.数据量大的互联网业务中,如果高效的使用MySQL才能保证服务的稳定呢?根据本人多年运维管理经验的总结,梳理了一些核心的开发规范,希望能给大 ...

  8. FusionInsight大数据开发--HBase应用开发

    HBase应用开发 HBase的定义 HBase是一个高可靠.高性能.面向列.可伸缩的分布式存储系统. 适合于存储大表数据,可以达到实时级别. 利用Hadoop HDFS 作为其文件存储系统,提供实时 ...

  9. FusionInsight大数据开发---Flume应用开发

    Flume应用开发 要求: 了解Flume应用开发适用场景 掌握Flume应用开发 Flume应用场景Flume的核心是把数据从数据源收集过来,在送到目的地.为了保证输送一定成功,发送到目的地之前,会 ...

随机推荐

  1. my97Date如何多选日期且无重复日期

    最终的效果是: 首先引用my97Date的js WdatePicker.js html代码 <textarea cols="" name="txtNoUseDate ...

  2. Oracle 数据库修复一例

    Oracle 数据库修复一例:(系统装有两个实例,分别是:bhorcl,orcl)今天一台生产服务器的Oracle不能正常登录,用plSql登录,提示:TNS:listernet does noet ...

  3. 安装Ubuntu后需要做的事

    卸载软件 纸牌 麻将 扫雷 数独 火狐 邮件 扫描 拍照 照片 视频 计划 日历 打印 备份 计算器 亚马逊 电源统计 音乐播放 远程桌面 To Do LibreOffice 换下载源 装机的时候下载 ...

  4. django rest framework 解析器组件 接口设计,视图组件 (2)

    1. 使用视图组件进行接口优化 1.1 使用视图组件的mixin进行接口逻辑优化 - 导入mixin from rest_framework.mixinx import ( ListModelMix, ...

  5. Mybatis-plus中的condition条件

    @Test public void testCondition() { String name = "王"; String email = ""; condit ...

  6. unity客户端自动断开连接

    问题描述: 当unity失去焦点一段时间后,与photon服务器端断开连接 问题根源: 默认unity失去焦点后会暂停运行,导致连接超时,服务器端超时断开连接 解决方案: 连接服务器后,填加一句代码让 ...

  7. Nginx——请求head被过滤

    前言 nginx代理服务器,app发出的请求头被直接过滤了,当时想到nginx会自动过滤掉带有_的请求头信息,所以直接改了Nginx的配置当然也可以将app的request中header中的_改为- ...

  8. JDOJ 1140: 完数

    JDOJ 1140: 完数 题目传送门 Description 一个数如果恰好等于它的因子之和,这个数就称为"完数". 例如,6的因子为1.2.3,而6=1+2+3,因此6是&qu ...

  9. .Net反射-基础1-Assembly、Type

    Assembly:封装程序集信息,可以动态加载程序集 获取Assembly的几种方式: 1.var ass1 = Assembly.Load("ClassLibrary1");// ...

  10. 【mybatis】清空数据库表数据

    <update id="truncateTable"> truncate table ${tableName} </update> <update i ...