设计

  1. 选择合适的数据对象来存储对象:String,List,Hash(Entity角色对象),Set,Zset(需要排序);
  2. 选择存储是全局的,还是局部的;

机制

  1. 批处理(pipeline)
  2. 事务(watch-mulit-execut)
  3. 锁(setNx)

保存    

  1. Save/BGSave;占用内存不是很大(10G)
  2. AOF(10G以上);
  3. 复制;

细节

  1. Redis事务,Redis是单线程不假,但是命令是一条一条发过来的,所以如果是事务类操作,还是可能在两条命令之间被加塞,于是需要使用事务来控制,multi指令发送给客户端之后,redis服务端将会缓存该客户端的指令,直到exec接收到之后才会批量执行这些指令,执行完毕后,才会处理其他的客户端请求;
  2. Redis的info命令只是好用,配置以及占用的内存情况一清二楚的;我考虑创建可视化的Redis工具,不过估计网上应该已经有了;在从服务器端可以通过Info下面的master_link_status来判断从同步是否完成;再通过aof_pending_bio_fsync来判断数据是否已经写回到了硬盘中;如果有需要的话;
  3. 可以通过expire指定键值的过期时间,还可以通过persist来移除过期时间设定;
  1. redis集群是读写分离机制,主服务器写入信息,同步到各个从服务器中;只需要配置从服务器的配置文件slaveof节点,指明主服务器的ip以及端口即可;这样,服务器重启后将会主动和主服务器进行关联;无论主从保存方式rdb还是aof都可以;水平扩展Redis集群非常方便;对于大量Redis集群,一个主服务器可能会压力比较大,可以将从服务器当做为master(但是仍然不能写),组成集群树;
  2. 但是这也有一个问题:Redis只能是做到集群,这种集群和Memcache的一致性算法一样,前者是写压力集中在一台机器上面,读压力分散到了各个服务器,后者则是可以把写压力分散;Redis的主从复制既有负载均衡的意味,同时还有集群的味道;Memcache是纯粹的集群;
  3. 如果单台机器部署多个Redis,各自都是不同的端口,这个时候启动redis-cli需要指定-p参数,指定端口,如果想要连接到别的机器,需要指定-h参数;可以通过redis -h看到各个参数情况;
  4. 更换Redis服务器,可以新建一个服务器作为新的主服务器,然后把slavor都指向新的服务器,可以把一台从服务器提升为主服务器;我的想法是前者比较好,改动量小,外界调用还是内部同步,前提是通过域名关联,只要把域名指向新的服务器即可;这个还需呀好好想想;还有开发角度,对于获取读/写Redis需要一套控制流程等,如何设计比
    1. Redis中退出需要进入到客户端,执行shutdown命令;也可以通过redis-client -p 6379 shutdown进行关闭
    2. Redis启动如果直接使用redis-server需要指定一下config路径:./redis-server redis.conf(如果config就在同步目录下);否则Redis将会加载默认的配置文件;这个也是我在配置文件中配置了AOF半天,但是不好使的原因;
    3. 配置文件生效需要重启Redis
    4. Redis结构的本质是考虑数据结构的范围是全局的,还是局部的,比如login就是全局的,本身这个hash里面是保存各个token和user的映射关系,而不是专属于某一个元素;对于viewed就是局部的,他是专属于某个token的浏览记录,判断依据就是这个结构的name里面是否带有session,token等限定性名词;
    5. 如果配置为AOF,那么每次重启都会从AOF中重新加载数据;
    6. 代表关闭自动瘦身;
    7. Redis的权重一定要考虑时间维度,投票以及页面浏览量都设计了机制来进行新入老退的机制,就是在时间维度上面的考量,这一点不可不察;
    8. Redis还有Sort功能,可以对列表集合以及哈希进行排序;同时排序的时候还可以通过关联到Hash表来指定权重;
    9. 个元素;-1代表最大,0代表最小,删掉0~-101,意思明了;
  5. List并没有提供对于单个元素的获取,只有一个LIndex,也是基于元素获取索引;
    1. 设置AOF:config set appendonly yes; config set appendfsync everysec;这里有三个选项,always,过于频繁读写硬盘效率也低,对于硬盘伤害也大(尤其是固态硬盘);everysec,每秒钟同步一次,这是最推荐的方式;no,用操作系统决定;这个选项知道就可以了,因为让操作系统来决定,意味着等待缓冲区满了再搞,但是这样将会导致写操作缓慢(只有等待同步之后才能够空出缓冲区写入写操作);而且这个方式很不靠谱,一旦是丢失数据,数量不可估计;Redis里面提供了比较强大的纠错功能,set一个不合法的key将会报错;或者说,Redis的config命令只允许设置设定好存在的设置;不允许添加;
    2. Redis中,有序集合判断是否有某值,通过zscore的返回值是否为空进行判断。
    3. HSet和HMSet差别在于后者可以一次指定多个key-value;M意思为multi-
    4. setRange, 修改指定字符串指定起始位置之后的字符串;
    5. ,后者为0;
    6. Hash对象中,应用分片技术可以节省内存,是因为小元素Hash采用的是ziplist结构,节省空间;如果一堆元素一股脑全部保存,只能用比较占用空间的LinkedList结构;

Redis总录的更多相关文章

  1. Redis总导航目录

    NoSQL入门和概述 NoSQL入门概述 3V + 3高 当下的NoSQL经典应用 NoSQL数据模型简介 NoSQL数据库的四大分类 在分布式数据库中CAP原理CAP+BASE Redis入门介绍 ...

  2. PHP对redis操作详解【转】

    /*1.Connection*/ $redis = new Redis(); $redis->connect('127.0.0.1',6379,1);//短链接,本地host,端口为6379,超 ...

  3. 深入分析redis cluster 集群

    深入分析redis cluster 集群安装配置详解 下面小编来为各位介绍一篇深入分析redis cluster 集群安装配置详解,如果你希望做数据库集群就可以来看看此文章的哦. http://rub ...

  4. redis 基础学习总结

    背景:因为项目用到了redis,加上之前一直听说了redis,但一直没有用过,正好项目现在要用到了,抽时间简单学习了下,做个记录总结下. 一 .Redis简介 介绍Redis之前,先了解下NoSQL ...

  5. redis函数总结

    <?php /*1.Connection*/ $redis = new Redis(); $redis->connect('127.0.0.1',6379,1);//短链接,本地host, ...

  6. php Redis函数使用总结(string,hash,list, set , sort set )

    对于:string, set , sort set , hash 的增,改操作,是同一个命令,但是把它当改操作时,及时成功返回值依旧为0 对于:list结构来说,增删改查自有一套方法.   <? ...

  7. Java访问Redis

    Redis的数据类型总共有如下几种 1.String(字符串) 2.List(列表),字符串列表,有序 3.Hash(哈希),可以存储类似于数据库的表结构 4.Set(集合),无序,不可重复 5.ZS ...

  8. PHP对redis操作详解

    /*1.Connection*/$redis = new Redis();$redis->connect('127.0.0.1',6379,1);//短链接,本地host,端口为6379,超过1 ...

  9. php redis 的基本操作

    前言: 断断续续的接触了redis的使用.但是也就简单的记住了几个set.get方法,用的还是太少了吧.所以来做个笔记,记录下一些常用的命令. 内容: 首先是php连接redis. $redis = ...

随机推荐

  1. CameraTest

    from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage #device = MonkeyRunner.wa ...

  2. [React ] React Fundamentals: Component Lifecycle - Mounting Usage

    The previous lesson introduced the React component lifecycle mounting and unmounting. In this lesson ...

  3. requestFocusFromTouch , requestFocus

    /*if(userNameEditText.isInTouchMode()){ userNameEditText.requestFocusFromTouch(); }else{ userNameEdi ...

  4. Linux系统及应用问题分析排查工具

    linux 阿里技术协会 摘要: Linux服务器上经常遇到一些系统和应用上的问题,如何分析排查,需要利器,下面总结列表了一些常用工具.trace tool:最后也列举了最近hadoop社区在开发发展 ...

  5. careercup-树与图 4.4

    4.4 给定一棵二叉树,设计一个算法,创建含有某一深度上所有结点的链表(比如,若一棵树的深度为D,则会创建D个链表). 类似于leetcode:Populating Next Right Pointe ...

  6. Labview 中的类

    一.创建一个空的类 在 LabVIEW 工程窗口里,鼠标右键菜单的新建栏中有一项,是创建类.类的结构和 LabVIEW 工程库是比较相近的:类的名字也作为名字空间:也可以为类中的 VI 设置访问权限等 ...

  7. Mac OS X 10.7下找不到~/Library/Application Support的解决方案

    28二 最近有台机器升级到了Mac OS X 10.7,Finder的sidebar变了不说,连用户目录下的Library目录也不见了.但是Terminal中是有的,估计是被隐藏了.直接在Finder ...

  8. Java基础知识强化之IO流笔记52:IO流练习之 把一个文件中的字符串排序后再写入另一个文件案例

    1. 把一个文件中的字符串排序后再写入另一个文件 已知s.txt文件中有这样的一个字符串:"hcexfgijkamdnoqrzstuvwybpl" 请编写程序读取数据内容,把数据排 ...

  9. Mysql实时双备

    设置方法: 步一设 A 服务服 (192.168.1.43) 上用户为 backup, 123456 , 同步的数据库为test; B 服务服 (192.168.1.23) 上用户为 root, 12 ...

  10. Bootstrap与tab组合,切换菜单实例

    <html><head><meta http-equiv="Content-Type" content="text/html; charse ...