1:Redis概览
  1. Remote Dictionary Server 远程字典服务
  2. Redis是基于内存的存储
    1. 在一台普通的笔记本上,Redis每秒的读取速度可以达到10万
    2. 内存读取数据,断电的时候数据会丢失,但是Redis支持异步持久化到硬盘
  3. 多功能
    1. 数据库开发
    2. 缓存开发
    3. 队列开发
    4. 发布/订阅模式,可构建聊天室系统
  4. 键生存时间
    1. 每个键都可以设置生存时间,时间到后自动删除
  5. 与memcached的对比
    1. Redis是单线程,Memcached是多线程,所以多核服务器Mem的性能更高
    2. Redis的性能已经足够优秀了,所以大部门情况下Redis的性能并不会成为瓶颈
    3. 如果需要用到高级数据类型和持久化,Redis会是更好的选择
  6. 项目是开源的,3万多行代码,100名贡献者
  7. 安装与命令
    1. redis-cli  redis command line interface
    2. 命令回复
      1. 状态回复 PONG
      2. 错误回复 ERROR
      3. 整数回复 1
      4. 字符串回复 "1"
      5. 空回复 nil
      6. 多行字符串回复  "foo" "bar"
  8. 字典实例
    1. Redis默认支持16个字典实例
    2. Select 1选择1号数据库字典, 默认是0号
    3. FLUSHALL会清空所有 字典里面的数据,彼此并不隔离
    4. 不支持自定义名字
  9. 大小
    1. Redis非常轻量级,一个空的Redis实例只占有1M的大小
  10. 键命名:
    1. 对象类型:对象ID:对象属性
    2. 键的命名一定要有意义,如u:1:f的可读性显然不如user:1:friends好

2:Redis常用命令

  1. Keys * 显示所有的键,不建议在生产环境使用
  2. Exists,判断一个键是否存在。
    1. 返回1 表示存在
    2. 返回2 表示不存在
  3. Del  k1 k2 k3 ....kn
    1. 返回 1/2/3../n 表示成功删除的键的个数
  4. Keys  */k1 获取键
  5. Type  k1/k2... 获取键的类型
  6. Set/Lpush/
3:Redis数据类型
  1. 字符型
    1. 键允许的最大容量为512M
    2. 是其他四中类型的基础
    3. 命令
      1. set
      2. get
      3. incr、decr 递增 递减
        1. 如果是string会报错, 比如incr s1(s1 的值是a)
        2. 所有redis命令都是原子操作,不会出现并发的问题
      4. incrby、decrby  i 5  把i增加/减少 5
      5. incrbyfloat i 2.5 通过float类型添加
      6. append  key value 向key的末尾
      7. Mset k1 v1 k2 v2
      8. Mget k1 k2 k3
      9. GetBit/SetBit key offset 0/1 设置key值offset位置的bit为0或者1
      10. BitCount k  start  end
      11. BitOp   ex: bitop or result foo1 foo2
        1. And 并且
        2. Or 或者
        3. XOR 异或
        4. Not 非
        5. 利用位操作命令可以非常紧凑地存储布尔值。比如某网站的每个用户都有一个递增的整
          数ID,如果使用一个字符串类型键配合位操作来记录每个用户的性别(用户ID作为索引,
          二进
          制位值1和0表示男性和女性),那么记录100万个用户的性别只需占用100 KB多的空间,而且
          由于GETBIT和SETBIT的时间复杂度都是0(1),所以读取二进制位值性能很高。
      12. GetSet, set一个新值给key,返回旧值

                            你的系统每当有新用户访问时就用INCR命令操作一个Redis key。你希望每小时对这    

                            个信息收集一次。你就可以GETSET这个key并给其赋值0并读取原值。
    2.   散列型
  1. 最多可以容纳2^32个键
  2. 命令
    1. Hset key field value
    2. Hget key field
    3. Hmset key field1 value1 field2 values
    4. Hmget key field1 field2
    5. Hexists key field1 查看key 中 field1是否存在
    6. Hsetnx  key filednotexist value
    7. HIncrby key filed 20 将key中 field的值增加20
    8. Hdel key field field2 批量删除 key中的域
    9. Hkeys key 获取key中所有的field
    10. Hvals key 获取key中所有的值
    11. Hlen key 获取key中 field的个数

3.   列表型

  1. 概览
    1. 列表内部是使用双向链表实现的,所以越靠近两端的元素速度越快
    2. 最多可以容纳2^32-1个键
  2. 命令
    1. Lpush listkey 1 2 3 4
    2. Rlush listkey 5 6 ,结果是  4 3 2 1 5 6
    3. Lpop  listkey
    4. Rpop listkey
    5. Llen listkey 返回键的元素数量,不存在返回0
    6. Lrange  listkey start end 返回 start 到 end之间的元素
      1. Lrange listkey 0 lenth 从左边开始获取所有
      2. Lrange listkey -length -1 从右边开始获取所有
    7. Lrem listkey count value
      1. count >0 从左边开始,删除count个键值等于value的键
      2. count <0 从右边开始,删除count个键值等于value的键
    8. Lindex listkey 0 获取左边第一个, Lindex listkey -1 获取右边第一个
    9. Ltrim listkey start end 类似 lrange
    10. Linsert listkey After/Before findValue insertValue 在listkey中查找值等于findValue的元素,然后根据After/Before在后面插入数据
    11. RpopLpush source destination 很方便的传递数据,从一个列表的队尾传递到另一个列表的队首。
  3. 应用场景,较少访问中间元素的应用场景
    1. 新鲜事
    2. 日志

4.    集合型

    1. 概览
      1. 一个集合类
      2. 最多可以容纳2^32-1个键
    2. 命令
      1. Sadd key a b c 批量添加元素
      2. Srem key a d 删除 a,d没有找到
      3. Smembers key
      4. Sismember key a 判断a是否存在在key中
      5. Sdiff key1 key2  表示所有属于key1但是不属于key2的元素
      6. Sinter key1 key2 取交集
      7. Sunion key1 key2 取并集
      8. Scard key1 获取key中元素个数
      9. Sdiffstore destiontion key1 key2
      10. Sintertore destiontion key1 key2
      11. Sunionstore destiontion key1 key2
      12. Srandmember key 随机获取key中的元素
    3. 实践
      1. 存储文章标签
      2. 127.0.0.1:6379> sadd post:1:tags java

(integer) 1

127.0.0.1:6379> sadd post:2:tags java redis
(integer) 2
127.0.0.1:6379> sadd post:3:tags java redis mysql
(integer) 3
127.0.0.1:6379> sadd tags:redis:post 3
(integer) 1
127.0.0.1:6379> sadd tags:mysql:post 2 3
(integer) 2
127.0.0.1:6379> sadd tags:java:post 1 2 3
(integer) 3
127.0.0.1:6379> sinter tags:redis:post tags:mysql:post tags:java:post 
1) "3"
127.0.0.1:6379> 
sinterstore tags_inter tags:redis:post tags:mysql:post tags:java:post

5:有序集合

                    1:概览
                            1:每个值都关联了一个分数
                            2:有序的,可以获取分数最高最低的值,或者某一个范围的值
                            3:虽然集合中每个元素都是不同的,但是他们的分数确是可以相同
                            4:类似列表
                                    1:有序的
                                    2:可以获取某个范围的值
                            5:基于散列表和跳跃表,即时读取中间位置速度也很快,O(log(N))
                    2:命令
                            1:Zadd key score member [score member...]

                            2:Zrange(从小到大)、Zrevrange(从大到小) key 0 -1(表示结尾) 
                            3:Zrangebyscore key 80 100 取出key中80-100以内的的值                                                
                                  zrangebyscore scoreboard 20 100 limit 1 3  从index=1 开始取3个值
                            4:zrevrangebyscore 倒转查询 limit
                            5:zincrby
                            6:zscore  key value 获取key中值为value的分数
                            7:zcard key 返回key中值的个数
                            8:zcount key 80 100 统计分数在80 -100 之间的个数
                            9:zrem key  member 删除key中的member
                            10:zremrangebyrank  key start stop 
                                   zremrangebyrank testRem 0 2
                            11:Zrank 、Zrevrank  key member 获取key中member值的元素的排名
                            12:zinterstore destiontion zset1 zset2
 

4:Redis重要特性

       1:发布/订阅机制  pub/sub
                  当一个key值被更新之后,所以订阅他的客户端都会收到相应的消息
       2:事务
                1:Multi
                          do something
                    Exec
                2:错误情况
                            1:语法错误,没执行exec的时候就报错了
                            2:运行时错误,例如用集合操作去操作散列表,这个要等到exec之后错误才会显示出来
                                  并且错误语句之后的命令照样会执行
                    
 
 
    
 
 
 
    

[读书笔记]-技术学习-Redis的更多相关文章

  1. [读书笔记]C#学习笔记八:StringBuilder与String详解及参数传递问题剖析

    前言 上次在公司开会时有同事分享windebug的知识, 拿的是string字符串Concat拼接 然后用while(true){}死循环的Demo来讲解.其中有提及string操作大量字符串效率低下 ...

  2. [读书笔记]C#学习笔记一: .Net Framwork

    前言: 一次偶然的机会  在园子里看到@Learning hard 出版的一本书: <<C#学习笔记>>, 然后买来 一直到现在读完, 感觉很不错, 适合入门, 书中内容是从C ...

  3. [读书笔记]C#学习笔记三: C#类型详解..

    前言 这次分享的主要内容有五个, 分别是值类型和引用类型, 装箱与拆箱,常量与变量,运算符重载,static字段和static构造函数. 后期的分享会针对于C#2.0 3.0 4.0 等新特性进行. ...

  4. 视觉机器学习读书笔记--------BP学习

    反向传播算法(Back-Propagtion Algorithm)即BP学习属于监督式学习算法,是非常重要的一种人工神经网络学习方法,常被用来训练前馈型多层感知器神经网络. 一.BP学习原理 1.前馈 ...

  5. [读书笔记]C#学习笔记四: C#2.0泛型 可控类型 匿名方法和迭代器

    前言 C#1.0的委托特性使方法作为其他方法的参数来传递,而C#2.0 中提出的泛型特性则使类型可以被参数化,从而不必再为不同的类型提供特殊版本的实现方法.另外C#2.0还提出了可空类型,匿名方法和迭 ...

  6. [读书笔记]C#学习笔记二: 委托和事件的用法及不同.

    前言:  C#委托是什么 c#中的委托可以理解为函数的一个包装, 它使得C#中的函数可以作为参数来被传递, 这在作用上相当于C++中的函数指针. C++用函数指针获取函数的入口地址, 然后通过这个指针 ...

  7. Java7编程高手进阶读书笔记--final学习

    这段时间终于有了一些自己的时间,在网上淘了一本书把java学习下,顺便记下每日的学习心得 工作快两年多了,才知道基础的东西永远看的时候都有一个新的体验,今天中午看了下final,把自己炒的代码贴在这以 ...

  8. [读书笔记]C#学习笔记七: C#4.0中微小改动-可选参数,泛型的可变性

    前言 下面就开始总结C#4.0的一些变化了, 也是这本书中最后的一点内容了, 这一部分终于要更新完了. 同时感觉再来读第二遍也有不一样的收获. 今天很嗨的是武汉下雪了,明天周六,一切都是这么美好.哈哈 ...

  9. [读书笔记]C#学习笔记六: C#3.0Lambda表达式及Linq解析

    前言 最早使用到Lambda表达式是因为一个需求:如果一个数组是:int[] s = new int[]{1,3,5,9,14,16,22};例如只想要这个数组中小于15的元素然后重新组装成一个数组或 ...

随机推荐

  1. 『REM』手机屏幕适配

    function adapt(designWidth, rem2px){ var d = window.document.createElement('div'); d.style.width = ' ...

  2. ZooKeeper学习总结(1)——ZooKeeper入门介绍

    1. 概述 Zookeeper是Hadoop的一个子项目,它是分布式系统中的协调系统,可提供的服务主要有:配置服务.名字服务.分布式同步.组服务等. 它有如下的一些特点: 简单 Zookeeper的核 ...

  3. Spring Cloud 之 Cookie 丢失 与 Host 传递

    通过spring zuul 代理至后台,写入Cookie发现无法写入,到浏览器中,和无法获取Domain域名 通过长时间的度娘和求助别人发现:Spring-zuul  需要加入以下配置 zuul.se ...

  4. Python 1 初识python

    1.Python介绍 Python是一种高级语言,与JAVA C# 等同.可以编写各种应用程序,每种语言都有其合适的应用场景.而Python 的优势在于更加人性化.简便的语法规则,以及针对各种具体场景 ...

  5. 同开三本DJANGO,需要提升一下本职工作的能力啦

    慢慢将一些概念固化到基因内,才有可能和SPRING MVC,MEAN之类的好好作比较吧. 全都是基于1.8版本的教材,爽!!!

  6. Android颜色透明度数值一览

    100% — FF 95% — F2 90% — E6 85% — D9 80% — CC 75% — BF 70% — B3 65% — A6 60% — 99 55% — 8C 50% — 80 ...

  7. UVA 11762 - Race to 1(概率)

    UVA 11762 - Race to 1 题意:给定一个n,每次随即选择一个n以内的质数,假设不是质因子,就保持不变,假设是的话.就把n除掉该因子,问n变成1的次数的期望值 思路:tot为总的质数. ...

  8. Android动态逆向分析工具ZjDroid--脱壳神器

    项目地址:https://github.com/BaiduSecurityLabs/ZjDroid 前提条件: 1.Root手机一部 2.须要通过Xposed installer( http://dl ...

  9. Extjs显示图片

    1.首先做一个容器 xtype : 'container', // 第2行 anchor : '100%', layout : 'column', items : [{ columnWidth : 0 ...

  10. luogu3155 [CQOI2009]叶子的染色

    题目大意 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白色.你的着色方案应该保证根结点到每个叶子的简单路径上都至少包含一个有色结点( ...