redis

Redis是采用字典结构以键值对的形式存储数据的

看了redis入门指南,收获颇多

_______________String:

首先:字符串类型是其他4种数据类型的基础,其他数据类型和字符串类型的差别从某种角度来
说只是组织字符串的形式不同。例如,列表类型是以列表的形式组织字符串,而集合类型是以
集合的形式组织字符串

常用命令:
set get

incr -> key 当字符串的值为整数形式时,当要操作的键不存在时会默认键值为0,所以第一次递增后的结果是1。当键值不是整数时Redis会提示错误。

APPEND key value 向尾部追加值 返回值是字符串的总长度

STRLEN key:获取字符串的长度

MGET MSET 同时设置/获得多个键值

***********具体实践:

1.文章访问量统计:每次访问文章的时候使用INCR命令使相应的键值
递增。

2.生成自增ID:那么怎么为每篇文章生成一个唯一ID呢?在关系数据库中我们通过设置字段属性为
AUTO_INCREMENT来实现每增加一条记录自动为其生成一个唯一的递增ID的目的,而在
Redis中可以通过另一种模式来实现:对于每一类对象使用名为对象类型(复数形式):count① 的
键(如users:count)来存储当前类型对象的数量,每增加一个新对象时都使用INCR命令递增该
键的值。由于使用INCR命令建立的键的初始键值是1,所以可以很容易得知,INCR命令的返回
值既是加入该对象后的当前类型的对象总数,又是该新增对象的ID。

3.存储文章数据:由于每个字符串类型键只能存储一个字符串,而一篇博客文章是由标题、正文、作者与发布时间等多个元素构成的

++++++++++++++++++++++hash

*****除了散列类型,Redis的其他数据类型同样不支持数据类型嵌套。比如集合类型
的每个元素都只能是字符串,不能是另一个集合或散列表等。

散列类型,最有特点的就是它可以很方便存储对象,使用

对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。例如要存储ID为2 的汽车对象,可以分别使用名为color。name和price的三个字段来存储该辆汽车的颜色,名称和价格。

例: color   黄色

car:2 name 本田

price 90万

命令:
HSET key field value

HSET命令的方便之处在于不区分插入和更新操作,这意味着修改数据时不用事先判断字
段是否存在来决定要执行的是插入操作(update)还是更新操作(insert)。当执行的是插入操作
时(即之前字段不存在)HSET命令会返回1,当执行的是更新操作时(即之前字段已经存
在)HSET命令会返回0。更进一步,当键本身不存在时,HSET命令还会自动建立它

HGET key field

判断字段是否存在
HEXISTS key field
HEXISTS命令用来判断一个字段是否存在。如果存在则返回1,否则返回0(如果键不存在
也会返回0).

HSETNX key field value
HSETNX命令与HSET命令类似,区别在于如果字段已经存在,HSETNX命令将不执行
任何操作。当字段不存在时赋值

HDEL key field

HMGET HMSET key field value

HGETALL

只获取字段名或字段值
HKEYS key
HVALS key

获得字段数量
HLEN key

实践:
1.存储文章数据
获取指定的字段  存的时候按照字段划分存储

2.存储文章缩略名

((((((((((((((((list列表类型

列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。
列表类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时
间复杂度为0(1),获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的
列表,获取头部或尾部的10条记录也是极快的(和从只有20个元素的列表中获取头部或尾部的
10条记录的速度是一样的)。
不过使用链表的代价是通过索引访问元素比较慢,设想在iPad mini发售当天有1000个人
在三里屯的苹果店排队等候购买,这时苹果公司宣布为了感谢大家的排队支持,决定奖励排
在第486位的顾客一部免费的iPad mini。为了找到这第486位顾客,工作人员不得不从队首一个
一个地数到第486个人。但同时,无论队伍多长,新来的人想加入队伍的话直接排到队尾就好
了,和队伍里有多少人没有任何关系。这种情景与列表类型的特性很相似。
这种特性使列表类型能非常快速地完成关系数据库难以应付的场景:如社交网站的新鲜
事,我们关心的只是最新的内容,使用列表类型存储,即使新鲜事的总数达到几千万个,获取
其中最新的100条数据也是极快的。同样因为在两端插入记录的时间复杂度是0(1),列表类型
也适合用来记录日志,可以保证加入新日志的速度不会受到已有日志数量的影响。
借助列表类型,Redis还可以作为队列使用。
与散列类型键最多能容纳的字段数量相同,一个列表类型键最多能容纳232-1个元素

命令:::

向列表两端增加元素
LPUSH key value[value...]
RPUSH   key value[value...]

LPUSH 命令用来向列表左边插入元素,返回值表示增加元素后列表的长度。
LPUSH命令还支持同时增加多个元素

从列表两端弹出元素
RPOP key
LPOP命令可以从列表左边弹出一个元素。
LPOP命令执行两步操作:第一步是将列表左边的元素从列表中移除,第二步是返回被移除的元素值

&&***&&&&&&&&&&&&&&&&&
结合上面提到的4个命令可以使用列表类型来模拟栈和队列的操作:如果想把列表当做
栈,则搭配使用LPUSH和LPOP或RPUSH和RPOP,如果想当成队列,则搭配使用LPUSH和RPOP或RPUSH和LPOP。

获取列表中元素的个数
LLEN key 当键不存在时LLEN会返回0
LLEN命令的功能类似SQL语句SELECT COUNT(*) FROM table_name,但是LLEN的时间复杂度为0(1),使用时Redis会直接读取现成的值,而不需要像部分关系数据库(如使用InnoDB存储引擎的MySQL表)那样需要遍历一遍数据表来统计条目数量。

获得列表片段

LRANGE key

LRANGE命令是列表类型最常用的命令之一,它能够获得列表中的某一片段。LRANGE命令将返回索引从start到stop之间的所有元素(包含两端的元素)。与大多数人的直觉相同,Redis的列表起始索引为0。

删除列表中指定的值
LREM key count value 
LREM命令会删除列表中前count个值为value的元素,返回值是实际删除的元素个数。根据count值的不同,LREM命令的执行方式会略有差异:
●当count>0时LREM命令会从列表左边开始删除前count个值为value的元素;
●当count<0时LREM 命令会从列表右边开始删除前|count|个值为value的元素;
●当count=0是LREM命令会删除所有值为value的元素

获得/设置指定索引的元素值
LINDEX key index 
LSET key index value

实践:
1.存储文章ID列表

2.存储评论列表
在博客中还可以使用列表类型键存储文章的评论。由于小白的博客不允许访客修改自己发表的评论,而且考虑到读取评论时需要获得评论的全部数据(评论者姓名,联系方式,评论时间和评论内容),不像文章一样有时只需要文章标题而不需要文章正文。所以适合将一条评论的各个元素序列化成字符串后作为列表类型键中的元素来存储

**********(((((((((((()))))))))set集合类型

集合类型和列表类型对比:
集合            列表
存储内容: 至多2^32-1个字符串  至多2^32-1个字符串
有序性: 否 是
唯一性: 是 否

集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等,由于集合
类型在Redis内部是使用值为空的散列表(hash table)实现的,所以这些操作的时间复杂度都是
0(1)。最方便的是多个集合类型键之间还可以进行并集、交集和差集运算。

命令:

添加/删除元素
SADD key member[member...]
SREM key member[member...]

SADD命令用来向集合中增加一个或多个元素,如果键不存在则会自动创建。因为在一个
集合中不能有相同的元素,所以如果要加入的元素已经存在于集合中就会忽略这个元素。本
命令的返回值是成功加入的元素数量(忽略的元素不计算在内).
获得集合中的所有元素
SMEMBERS key 返回集合中的所有元素。

判断元素是否在集合中
SISMEMEBER key member

集合间运算
SDIFF key [key …]
SINTER key [key …]
SUNION key [key …]

获得集合中元素个数
SCARD key
随机获得集合中的元素
SRANDMEMBER key [count]

从集合中弹出一个元素
SPOP key

%%%%%%%%%%%%%%%%%ZSET有序集合类型

有序集合类型(sorted set)的特点从它的名字中就可以猜到,它与上一节介绍的集合类型
的区别就是“有序”二字。
在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数,这使得我们
不仅可以完成插入、删除和判断元素是否存在等集合类型支持的操作,还能够获得分数最高
(或最低)的前N个元素、获得指定分数范围内的元素等与分数有关的操作。虽然集合中每个元
素都是不同的,但是它们的分数却可以相同。
有序集合类型在某些方面和列表类型有些相似。
(1)二者都是有序的。
(2)二者都可以获得某一范围的元素。
但是二者有着很大的区别,这使得它们的应用场景也是不同的。
(1)列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问
中间数据的速度会较慢,所以它更加适合实现如“新鲜事”或“日志”这样很少访问中间元素的
应用。
(2)有序集合类型是使用散列表和跳跃表(Skip list)实现的,所以即使读取位于中间部分
的数据速度也很快(时间复杂度是O(log(N)))。
(3)列表中不能简单地调整某个元素的位置,但是有序集合可以(通过更改这个元素的分
数)。
(4)有序集合要比列表类型更耗费内存

命令:

ZADD key score member [score member...]
ZADD命令用来向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会
用新的分数替换原有的分数。ZADD命令的返回值是新加入到集合中的元素个数(不包含之前
已经存在的元素)。

获得元素的分数
ZSCORE key member

获得排名在某个范围的元素列表
ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]

获得指定分数范围的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
ZRANGEBYSCORE命令参数虽然多,但是都很好理解。该命令按照元素分数从小到大的
顺序返回分数在min和max之间(包含min和max)的元素

增加某个元素的分数
ZINCRBY key increment member
ZINCRBY命令可以增加一个元素的分数,返回值是更改后的分数。

获取集合中元素的数量:
ZCARD key

获取指定分数范围内的元素个数
ZCOUNT key min max

删除一个或多个元素
ZREM key member [member …]
ZREM命令的返回值是成功删除的元素数量(不包含本来就不存在的元素)。

ZREMRANGEBYRANK key start stop
ZREMRANGEBYRANK命令按照元素分数从小到大的顺序(即索引0表示最小的值)删除
处在指定排名范围内的所有元素,并返回删除的元素数量

按照分数范围删除元素
ZREMRANGEBYSCORE key min max
ZREMRANGEBYSCORE命令会删除指定分数范围内的所有元素,参数min和max的特性
和ZRANGEBYSCORE命令中的一样。返回值是删除的元素数量

ZRANK key member
ZREVRANK key member
ZRANK命令会按照元素分数从小到大的顺序获得指定的元素的排名(从0开始,即分数最
小的元素排名为0)。

实践:
1.实现按点击量排序
每次用户访问一篇文章时,博客程序就通过“ZINCRBY posts:page.view 1文章
ID”更新访问量。

Redis入门指南笔记相关推荐

  1. 《Redis入门指南(第2版)》一第2章 准备

    本节书摘来异步社区<Redis入门指南(第2版)>一书中的第2章,作者: 李子骅 责编: 杨海玲,更多章节内容可以访问云栖社区"异步社区"公众号查看. 第2章 准备 R ...

  2. 《Redis入门指南(第2版)》一3.2 字符串类型

    本节书摘来异步社区<Redis入门指南(第2版)>一书中的第3章,第3.2节,作者: 李子骅 责编: 杨海玲,更多章节内容可以访问云栖社区"异步社区"公众号查看. 3. ...

  3. Redis 入门指南 pdf

    2019独角兽企业重金招聘Python工程师标准>>> Redis入门指南 https://yunpan.cn/cxqL7KVWgrTVb  访问密码 77ea 转载于:https: ...

  4. Redis入门指南 第1章 简介 Redis的几项特性

    Redis入门指南 第1章 简介 Redis的几项特性 之前在做爬虫相关的demo时接触到了Redis,它基于键值对的存储系统吸引了我.它的操作十分方便,而且性能也高.趁着假期,系统地自学一下Redi ...

  5. Redis入门指南之三(入门)

    本节主要介绍Redis的5种数据类型,同时使用Python API来操作Redis,其中python版本为3.5, redis版本为4.0.2. redis-py 的API的使用可以分类为: (1)连 ...

  6. Ctex入门指南笔记 -列表、表格、公式与图片

    Ctex入门指南笔记 列表.表格.公式与图片 觉得有用的话,欢迎一起讨论相互学习~ 本文为学习笔记,原版视频请移步: https://www.bilibili.com/video/BV1ua4y1p7 ...

  7. Pr零基础入门指南笔记一——项目、序列、预设

    1.学习地址 [干货]PR零基础入门指南第二集:新建项目和序列以及预设,基础但非常重要,PR萌新必学!_哔哩哔哩_bilibili 2.视频剪辑 3.项目 项目管理文件夹  主项目文件夹 日期+项目名 ...

  8. Pr零基础入门指南笔记三-------------视频效果与转场

    目录 精剪第一步--视频效果与转场 1.三大面板 2.位置 3.效果库 4.常用视频效果 [干货]PR零基础入门指南第四集:PR常用的效果和转场,视频防抖.宽银幕效果.设置默认效果等_哔哩哔哩_bil ...

  9. 《Redis入门指南》第2版 读书笔记

    读第二遍了,感觉和几年前读时的收获不一样了. 送上门来当树洞的 独自承担一切 Redis以简洁为美 Redis通信协议是Redis客户端与Redis之间交流的语言,通信协议规定了命令和返回值的格式. ...

  10. redis笔记-常用命令篇(采用与《redis入门指南》)

    基本知识: 1.redis称为数据库,内存数据库 2.NoSql类型,以字典结构存储数据 1.准备好服务器,准备好客户端和服务器[下载的windows免安装版] 2.各种数据类型的处理: 通用类型: ...

最新文章

  1. 关于PHPExcel导出Excel时身份证,数字会导出为科学计数的处理方法
  2. 11)PHP,单选框和复选框的post提交方式处理
  3. python线性加权模型_局部加权之线性回归(1) - Python实现
  4. 忽略异常_忽略已检查的异常,所有出色的开发人员都在这样做–基于600,000个Java项目...
  5. freewheel现场宣讲笔试回忆篇
  6. adb shell 直接修改Settigns中设置项
  7. python路径及运行方式相关说明
  8. 什么是网关软件?国内有好的资源网关软件吗?
  9. MFC窗口之间传递数据(结构体)
  10. spring动态代理(重要至极)
  11. 2021年美赛准备大全
  12. 土法炼钢:怎么实现一个简单的B+Tree In-Disk
  13. Java-Java基础—(6)面向对象高级
  14. python3实现二叉树的简单遍历(DLR 、LDR、LRD)
  15. IIS6.0+Tomcat整合(java,C++等教程免费下载)
  16. 最差的算法工程师能差到什么程度呢?
  17. Tomcat 面试题
  18. 每天8小时自学java_MessageResources
  19. QUTOJ 飘飘和小石(水)
  20. Python从C盘到D盘

热门文章

  1. mrp手机qq2008下载-MRP格式的手机QQ2008软件介绍及如何正确安装MRPQQ2008挂Q版
  2. 【硬件】PIC32单片机烧写器以及线序说明
  3. MULTISIM下载安装
  4. 网络规划设计师教程pdf版下载
  5. python爬取新浪博客_Python爬取韩寒所有新浪博客
  6. 基于大数据技术的全国高速公路通行数据 动态监测平台建设
  7. 北京无人驾驶路测进入“主驾无人”阶段
  8. 星外系统更换短信接口
  9. SkeyeARS 超高清8K视频录像检索、 回放、控制解决方案
  10. android 屏保程序,Android下屏保程序的开发