Redis总录
设计
- 选择合适的数据对象来存储对象:String,List,Hash(Entity角色对象),Set,Zset(需要排序);
- 选择存储是全局的,还是局部的;
机制
- 批处理(pipeline)
- 事务(watch-mulit-execut)
- 锁(setNx)
保存
- Save/BGSave;占用内存不是很大(10G)
- AOF(10G以上);
- 复制;
细节
- Redis事务,Redis是单线程不假,但是命令是一条一条发过来的,所以如果是事务类操作,还是可能在两条命令之间被加塞,于是需要使用事务来控制,multi指令发送给客户端之后,redis服务端将会缓存该客户端的指令,直到exec接收到之后才会批量执行这些指令,执行完毕后,才会处理其他的客户端请求;
- Redis的info命令只是好用,配置以及占用的内存情况一清二楚的;我考虑创建可视化的Redis工具,不过估计网上应该已经有了;在从服务器端可以通过Info下面的master_link_status来判断从同步是否完成;再通过aof_pending_bio_fsync来判断数据是否已经写回到了硬盘中;如果有需要的话;
- 可以通过expire指定键值的过期时间,还可以通过persist来移除过期时间设定;
- redis集群是读写分离机制,主服务器写入信息,同步到各个从服务器中;只需要配置从服务器的配置文件slaveof节点,指明主服务器的ip以及端口即可;这样,服务器重启后将会主动和主服务器进行关联;无论主从保存方式rdb还是aof都可以;水平扩展Redis集群非常方便;对于大量Redis集群,一个主服务器可能会压力比较大,可以将从服务器当做为master(但是仍然不能写),组成集群树;
- 但是这也有一个问题:Redis只能是做到集群,这种集群和Memcache的一致性算法一样,前者是写压力集中在一台机器上面,读压力分散到了各个服务器,后者则是可以把写压力分散;Redis的主从复制既有负载均衡的意味,同时还有集群的味道;Memcache是纯粹的集群;
- 如果单台机器部署多个Redis,各自都是不同的端口,这个时候启动redis-cli需要指定-p参数,指定端口,如果想要连接到别的机器,需要指定-h参数;可以通过redis -h看到各个参数情况;
- 更换Redis服务器,可以新建一个服务器作为新的主服务器,然后把slavor都指向新的服务器,可以把一台从服务器提升为主服务器;我的想法是前者比较好,改动量小,外界调用还是内部同步,前提是通过域名关联,只要把域名指向新的服务器即可;这个还需呀好好想想;还有开发角度,对于获取读/写Redis需要一套控制流程等,如何设计比
- Redis中退出需要进入到客户端,执行shutdown命令;也可以通过redis-client -p 6379 shutdown进行关闭
- Redis启动如果直接使用redis-server需要指定一下config路径:./redis-server redis.conf(如果config就在同步目录下);否则Redis将会加载默认的配置文件;这个也是我在配置文件中配置了AOF半天,但是不好使的原因;
- 配置文件生效需要重启Redis
- Redis结构的本质是考虑数据结构的范围是全局的,还是局部的,比如login就是全局的,本身这个hash里面是保存各个token和user的映射关系,而不是专属于某一个元素;对于viewed就是局部的,他是专属于某个token的浏览记录,判断依据就是这个结构的name里面是否带有session,token等限定性名词;
- 如果配置为AOF,那么每次重启都会从AOF中重新加载数据;
- 代表关闭自动瘦身;
- Redis的权重一定要考虑时间维度,投票以及页面浏览量都设计了机制来进行新入老退的机制,就是在时间维度上面的考量,这一点不可不察;
- Redis还有Sort功能,可以对列表集合以及哈希进行排序;同时排序的时候还可以通过关联到Hash表来指定权重;
- 个元素;-1代表最大,0代表最小,删掉0~-101,意思明了;
- List并没有提供对于单个元素的获取,只有一个LIndex,也是基于元素获取索引;
- 设置AOF:config set appendonly yes; config set appendfsync everysec;这里有三个选项,always,过于频繁读写硬盘效率也低,对于硬盘伤害也大(尤其是固态硬盘);everysec,每秒钟同步一次,这是最推荐的方式;no,用操作系统决定;这个选项知道就可以了,因为让操作系统来决定,意味着等待缓冲区满了再搞,但是这样将会导致写操作缓慢(只有等待同步之后才能够空出缓冲区写入写操作);而且这个方式很不靠谱,一旦是丢失数据,数量不可估计;Redis里面提供了比较强大的纠错功能,set一个不合法的key将会报错;或者说,Redis的config命令只允许设置设定好存在的设置;不允许添加;
- Redis中,有序集合判断是否有某值,通过zscore的返回值是否为空进行判断。
- HSet和HMSet差别在于后者可以一次指定多个key-value;M意思为multi-
- setRange, 修改指定字符串指定起始位置之后的字符串;
- ,后者为0;
- Hash对象中,应用分片技术可以节省内存,是因为小元素Hash采用的是ziplist结构,节省空间;如果一堆元素一股脑全部保存,只能用比较占用空间的LinkedList结构;
Redis总录的更多相关文章
- Redis总导航目录
NoSQL入门和概述 NoSQL入门概述 3V + 3高 当下的NoSQL经典应用 NoSQL数据模型简介 NoSQL数据库的四大分类 在分布式数据库中CAP原理CAP+BASE Redis入门介绍 ...
- PHP对redis操作详解【转】
/*1.Connection*/ $redis = new Redis(); $redis->connect('127.0.0.1',6379,1);//短链接,本地host,端口为6379,超 ...
- 深入分析redis cluster 集群
深入分析redis cluster 集群安装配置详解 下面小编来为各位介绍一篇深入分析redis cluster 集群安装配置详解,如果你希望做数据库集群就可以来看看此文章的哦. http://rub ...
- redis 基础学习总结
背景:因为项目用到了redis,加上之前一直听说了redis,但一直没有用过,正好项目现在要用到了,抽时间简单学习了下,做个记录总结下. 一 .Redis简介 介绍Redis之前,先了解下NoSQL ...
- redis函数总结
<?php /*1.Connection*/ $redis = new Redis(); $redis->connect('127.0.0.1',6379,1);//短链接,本地host, ...
- php Redis函数使用总结(string,hash,list, set , sort set )
对于:string, set , sort set , hash 的增,改操作,是同一个命令,但是把它当改操作时,及时成功返回值依旧为0 对于:list结构来说,增删改查自有一套方法. <? ...
- Java访问Redis
Redis的数据类型总共有如下几种 1.String(字符串) 2.List(列表),字符串列表,有序 3.Hash(哈希),可以存储类似于数据库的表结构 4.Set(集合),无序,不可重复 5.ZS ...
- PHP对redis操作详解
/*1.Connection*/$redis = new Redis();$redis->connect('127.0.0.1',6379,1);//短链接,本地host,端口为6379,超过1 ...
- php redis 的基本操作
前言: 断断续续的接触了redis的使用.但是也就简单的记住了几个set.get方法,用的还是太少了吧.所以来做个笔记,记录下一些常用的命令. 内容: 首先是php连接redis. $redis = ...
随机推荐
- [React] React Fundamentals: Component Lifecycle - Mounting Basics
React components have a lifecycle, and you are able to access specific phases of that lifecycle. Thi ...
- RHCA442学习笔记-Unit10内存地址及分配
Unit 10 Memory Addressing and Allocation 内存地址及分配 学习目标: A. 虚拟地址与物理地 B. 调整内存地址分配 C. 解析内存溢出 10.1 O ...
- Java基础知识强化之IO流笔记48:IO流练习之 复制单级文件夹案例
1. 复制单级文件夹 数据源:e:\\demo 目的地:e:\\test 分析: A:封装目录 B:获取该目录下的所有文本的File数组 C:遍历该File数组,得到每一个File对象 ...
- [置顶] 第一天初试linux
1).unix linix macos android 的区别 Unix是要收费的,而linix是一种开源免费的unix ,macos 和andorid又是linux的一种,macos闭源,仅仅是 ...
- Amazon EC2上搭建VPN服务器
Amazon EC2 提供了一年免费试用,Micro Instance,配置是 1G 内存,共享 CPU,和每月 15G 的流量.搭一个 VPN 服务器绰绰有余了.操作系统我选的是 Amazon Li ...
- html5 video.js 使用及兼容所有浏览器
废话少说,直接开始 一.准备材料 video.js下载: http://www.videojs.com/ 二.代码 引入相关文件:(必须放在文件的开头,也是说一定要放在video标签之前) 贴入htm ...
- 什么是SysWow64
转自 什么是SysWow64 Wow!什么是Wow64 64位的Windows并不是简单地把所有东西都编译成64位就万事大吉的.关于64位的CPU应该做成什么样子,Intel和AMD曾有各自的打算.A ...
- ActionBar只显示图标不显示文字
问题:ActionBar菜单项android:showAsAction设置为android:showAsAction="always|withText"或者android:show ...
- OC加强-day05
#program mark - 0_11 NSRange结构体介绍 [掌握] 是Foundation框架中的一个结构体 NSRange 定义的一个变量的两个属性 location:起始下标 lengt ...
- Runtime 在IOS中的详细使用
因为之前写东西的时候,都在未知笔记中,所有大家没有看到过我的文章,今天就开始使用博客园来进行和大家沟通.好了,废话不那么多了,转入正题.下面我把runtime 给大家介绍一下. ### 一.runti ...