1 Redis数据结构介绍

Redis 是一个 key-value 的数据库,key 一般是 String 类型,不过 value 的类型多种多样。

  • 基本类型
    • String: hello world
    • Hash: {name: “Jack”, age: 21}
    • List: [A -> B -> C -> C]
    • Set: {A, B, C}
    • SortedSet: {A:1, B:2, C:3}
  • 特殊类型
    • GEO: {A:(120.3, 30.5)}
    • BitMap: 011011010100110101
    • HyperLog: 011011010100110101

2 Redis通用命令

帮助 help @generic

常用命令:

  • keys pattern: 查看符合模板的所有 key。不建议在生产环境设备上使用。
  • del key [key ...]
  • exists key [key ...]
  • expire key seconds: 给一个 key 设置有效期,到期后被删除
  • ttl key: 查看一个 key 的剩余有效期

3 String类型

String 类型,也就是字符串类型,是 Redis 中最简单的存储类型。其 value 是字符串,不过根据字符串的格式不同,又可以分为 3 类。

  • string: 普通字符串
  • int: 整数类型,可以做自增、自减操作
  • float: 浮点类型,可以做自增、自减操作

不管是哪种格式,底层都是字节数组形式存储,只不过编码方式不同。字符串类型的最大空间不超过 512m。

命令:

  • set: 添加或修改已经存在的一个 String 类型的键值对
  • get: 获取值
  • mset: 批量添加或修改
  • mget: 批量获取值
  • incr: 指定 key 自增
  • incrby: 指定 key 自增指定值
  • incrbyfloat: 指定 key 视为小数,自增指定值
  • setnx: set no exist
  • setex: set and expire

key 的结构:Redis 的 key 允许有多个单词形成层级结构,多个单词之间用 : 隔开。例如:项目名:业务名:类型:id

这个格式并非固定,也可以根据自己的需求来删除或添加词条。

例如,我们的项目名称叫 heima,有 user 和 product 两种不同类型的数据,我们可以这样定义 key:

  • user 相关的 key: heima:user:1
  • product 相关的 key: heima:product:1    

4 hash类型

Hash 类型,也叫散列,其 value 是一个无序字典,类似于 Java 中的 HashMap 结构。

String 结构是将对象序列化为 JSON 字符串后存储,当需要修改对象某个字段时很不方便。Hash 结构可以将对象中的每个字段独立存储,可以针对单个字段进行 CRUD。

Hash 类型的常见命令:

  • hset key field value: 添加或修改hash类型key的field值
  • hget key field: 获取一个 hash 类型 key 的field 值
  • hmget key field [field ...]: 获取多个字段值
  • hgetall key: 获取一个 hash 类型的 key 中的所有 field
  • hkeys key: 获取一个 hash 类型的 key 中的所有 field
  • hvals key: 获取一个 hash 类型的 key 中的所有 value
  • hincrby key field increment: 让一个 hash 类型 key 的字段自增并指定步长
  • hsetnx key field value: 如果 key 的 field 字段不存在,则设置该字段的值

5 list类型

Redis 中的 List 类型与 Java 中的 LinkedList 类似,可以看作是一个双向链表结构。既可以支持正向索引,也可以支持反向检索。

特征业余 LinkedList 类似:

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般

List 常见命令:

  • lpush: 向列表左侧插入一个或多个元素
  • rpush: 向列表右侧插入一个或多个元素
  • lpop: 移除并返回列表左侧的第一个元素,没有返回 nil
  • rpop: 移除并返回列表右侧的第一个元素,没有返回 nil
  • lrange: 返回一段角标范围内的所有元素
  • blpop 和 brpop: 与 lpop 和 rpop 类似,只不过 b 表示 block,在没有元素时等待指定时间,而不是直接返回 nil

6 set类型

Redis 的 Set 类型与 Java 中的 HashSet 类型,可以看作是一个 value 为 null 的 HashMap。因为也是一个 hash 表,因此具备与 HashSet 类似的特征。

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集等功能

set 的常见命令:

  • sadd key member ...: 向 set 中添加元素
  • srem key member ...: 移除 set 中的指定元素
  • scard key: 获取 set 中元素数量
  • sismember key member: 判断一个元素是否存在于 set 中
  • smembers key: 获取 set 中的元素
  • sinter key1 key2 ...: 求多个集合的交集
  • sunion key1 key2 ...: 求多个集合的并集
  • sdiff key1 key2 ..: 求多个集合的差集

7 SortedSet类型

Redis 的 SortedSet 是一个可排序的 set 集合,与 java 中的 TreeSet 类似,但底层数据结构差别很大。SortedSet 中的每一个元素都带有一个 score 属性,可以基于 score 属性对元素排序,底层的实现是一个跳表(SkipList)加hash表。

SortedSet 具备以下特性:

  • 可排序
  • 元素不重复
  • 查询速度快

因为 SortedSet 的可排序特性,经常被用来实现排行榜这样的功能。

  • zadd key score member: 添加或修改元素
  • zrem key member: 删除元素
  • zscore key member: 查询分数
  • zrank key member: 查询排名
  • zcard key: 查询元素个数
  • zcount key min max: 统计 score 值在指定范围内的所有元素个数
  • zincrby key increment member: 自增
  • zrange key min max: 按 score 排序后,获取指定排名范围内的元素
  • zrangebyscore key min max: 按 score 排序后,获取 score 范围内的元素
  • zdiff / zinter / zunion

降序在 z 后加 rev

 

 

 

 

 

原文地址:http://www.cnblogs.com/dyl0/p/16919189.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性