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. Beetl学习总结(4)——Web集成

    4.1. Web提供的全局变量 Web集成模块向模板提供web标准的变量,做如下说明 request 中的所有attribute.在模板中可以直接通过attribute name 来引用,如在cont ...

  2. Curious Cupid

    There are K different languages in the world. Each person speaks one and only one language. There ar ...

  3. ACM的你伤不起

    劳资六年前开始搞ACM啊!!!!!!!!!!  从此踏上了尼玛不归路啊!!!!!!!!!!!!  谁特么跟劳资讲算法是程序设计的核心啊!!!!!!  尼玛除了面试题就没见过用算法的地方啊!!!!!!  ...

  4. GIT的API主要应用示例

    这几个简单的API应用,主要是通过TOKEN来获取GIT内空的例子. 但在获取GIT的文件列表时,要注意区分目录和文件的MODE差别( 100644 普通文件 040000 普通目录 ). impor ...

  5. 洛谷 P2997 [USACO10NOV]旗帜Banner

    P2997 [USACO10NOV]旗帜Banner 题目背景 题目大意(by:曹彦臣): 平面上有(0,0)到(n,m)的(n+1)*(m+1)个点.问有多少点对所连的线段不过其他点,且长度在[l, ...

  6. 【cocos2d-x 3.7 飞机大战】 决战南海I (十) 游戏主场景

    主场景要包括其它类的头文件 #include "cocos2d.h" #include "MyPlane.h" #include "Bullet.h& ...

  7. QFileDialog关于选择文件对话框中的几个信号的说明(currentChanged,directoryEntered,fileSelected,filterSelected)

    QFileDialog关于选择文件对话框中的几个信号 实例: openFile::openFile(QWidget *parent) :QWidget(parent),ui(new Ui::openF ...

  8. kafka的topic和分区策略——log entry和消息id索引文件

    Topic在逻辑上可以被认为是一个在的queue,每条消费都必须指定它的topic,可以简单理解为必须指明把这条消息放进哪个queue里. 为了使得Kafka的吞吐率可以水平扩展,物理上把topic分 ...

  9. 套接字(socket)与socket 编程

    字节序: 主机字节序(host byte order):不同的主机有不同的字节序,x86:小端: 网络字节序(network byte order):大端字节序: 0. 什么是套接字 套接字是网络进程 ...

  10. PCB 全景图技术实现

    为了对3D模型理解更透,这里采用threejs(WebGL第三方库)实现,刚开始学习入门,为了能看明白基本上每行代码都注释. 如果仅仅是为了实现全景图,可以用photo-sphere-viewer.j ...