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. 【Codeforces 522A】Reposts

    [链接] 我是链接,点我呀:) [题意] 有人转载官方号的动态. 又有其他人转载其他人转载的动态. 问你最长的一条转载动态的链有多长. [题解] 用map把每个人的英文都转成小写的 然后从map中获取 ...

  2. noip模拟赛 时之终末

    题目背景 圣乔治:不用拘泥,剩下的时间已不多…… 圣乔治:直呼我的真名—— 丝佩碧雅:圣乔治大人 圣乔治:如今,已无法维持结界,或是抑制深渊的前进 圣乔治:既然如此,我将献上这副身躯,期望最后的战斗 ...

  3. 请问spfa+stack 和spfa+queue 是什么原理

    一个是bfs加迭代 一个是dfs加迭代 请问迭代是什么 就是不断地做,做到没有更优的解为止 或者是不断得做,做到逼近答案为止.. 栈比队列更快更节省空间

  4. linux系统监控:记录用户操作轨迹,谁动过服务器

    1.前言 我们在实际工作当中,都碰到过误操作.误删除.误修改过配置文件等等事件.对于没有堡垒机的公司来说,要在linux系统上深究到底谁做过配置文件的修改.做过误删除是很头疼的事情,特别是遇到删库跑路 ...

  5. N天学习一个linux命令之ssh

    用途 通过加密连接,远程登录主机和在远程主机执行命令,也可以用于转发x11和tcp,也可用于搭建VPN.第一次连接时,会弹出远程主机公钥指纹确认信息,通过这个方式防止中间人攻击. 用法 ssh [op ...

  6. MYSQL 字符集 MYSQL 源码

    http://blog.csdn.net/maray/article/details/46504621

  7. redo allocation latch redo copy latch

    这两个latch 是干什么的一直有点迷糊,刚才上网查了一下,总结如下: redo allocation latch 在Log Buffer中分配内存空间时需要获取Redo allocation lat ...

  8. 查看OS 各项参数

    查看CPU 在linux下 cat /proc/cpuinfo 可以得到CPU信息. 要注意的是CPU型号有不同的种类比如AMD Intel.可能在这个文件中显示的信息也不同.但终归是存在这个文件中的 ...

  9. HDU 4534

    AC自动机+状态DP. 虽然很明显的AC自动机+状态DP题,但要分析问题上还是欠缺一点了.一直在犹豫枚举每一个字符选或不选的状态会不会超时,以为会达到状态有2^n,但其实根本没有.因为有很多状态是可以 ...

  10. 寒城攻略:Listo 教你用 Swift 写IOS UI 项目计算器

    之前总结过 Swift 的语言攻略,这里就不做赘述了,如今做一个实例计算器项目来介绍一下 Swift 的应用.(凝视已经全然.直接上代码) 先看一下效果图: 以下是详细的代码和解释: 分享快乐.开源中 ...