`
alanland
  • 浏览: 642573 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Redis入门教程 - 数据类型

阅读更多

 

安装Redis之后大家肯定都试过 get set 命令了,也了解了最基本的数据类型字符串,下面让我们认识以下 Redis 中的其他成员吧。

 

  • 二进制安全(Binary-safe)的字符串(String

  • 二进制安全的字符串列表(List

  • 二进制安全的字符串集合(Set

  • 有序的集合(Sorted Set

 

1Redis Keys

这里的key指的是 Redis 键值对的key

Redis Key 是二进制安全的,也就是说你可以用任意二进制序列作为 key,从一个简单的字符串到一个jpg图片内容。空字符串也是有效的key值。


key个几个规则:

  1. 不要太长。这个大家都明白,越长越消耗内存,查找时的计算代价也越高。

  2. 不要太短。太短的key不容已阅读和理解,比如 user:100:password 写成 u:1000:p,会让人不明所以。因为key相对与value总是很小的,所以由此带来的一点点的空间节省并无太大优势。

  3. 遵循一种模式。比如“对象类型:id:字段名”,就行上面提到的 user:100:password,如果有多个单词,可以用一个点来代替空格:comment:1234:reply.to

 

2字符串

这个是 Redis 最简单的数据类型,如果还没有安装 Redis,那么到下面网页感受一下把:

 

http://redis.io/commands/get

ps: 本文的例子都是在线录入的。 直接在 Example 下面的文本框里输入命令,回车 。

 

redis> set alan

OK

redis> get

"alan"

redis> set 暗号 "还记得 大名湖畔的 唉冬瓜吗 "

OK

redis> get 暗号

"还记得 大名湖畔的 唉冬瓜吗 "

redis>

 

这里我直接用中文作为 key,没有一点问题。

前面提到 key 可以是任意二进制字符串,那么值也同样,你可以保存一副图片(值大小不能超过512M)。

 

虽然字符串是基本类型,也可以进行一些有趣的操作:

redis> set qty 256

OK

redis> get qty

"256"

redis> incr qty

(integer) 257

redis> get qty

"257"

redis> incrby qty 100

(integer) 357

redis> get qty

"357"

redis>

 

incr 命令把字符串解析成整型,然后+1,再保存为字符串。类似的命令还有 incrby, decr, decrby

如果字符串值不能解析成整数,incr命令会报错,如 ERR value is not an integer or out of range

redis> set name alan

OK

redis> incr name

ERR value is not an integer or out of range

redis>

 

incr 叫做 atomic increment,其 atomic (原子)特性的意义:如果两个客户端同时发送 incr 命令,客户端会同时读到 “10”,对它们+1,最终的结果一定为12,要更多了解可以去官网查看相关资料。

 

3列表(list

首先讲一下list的理论背景,list这个词很多时候都被不恰当的使用,比如 python list,她们实际上是数组。一般意义上讲,list 就是有序元素的集合。而使用 数组 实现,和使用 linked list 实现的list在属性上有所不同。

 

Redis list 是使用 Linked List 实现的,其优点是在 list 的两端添加元素其时间复杂度是常数级的。也就是说你在‘10个元素的list头部添加新元素,和在一亿个元素的list头部添加消耗的时间相同;而使用数组实现list的优势在于索引速度非常快。

 

 

Redis使用 Linked List 实现的原因是:对于一个数据库系统来说,能快速在很大的列表上添加元素至关重要。

 

3.1第一步

添加新元素的命令是 lpush rpush,分别在左边(头部)和右边(尾部)添加一个元素。lrange接受三个参数,列表的key,范围的开始,范围的结束,返回一个列表的片段。

redis> lpush message "你好,很高兴认识你"

(integer) 1

redis> lpush message "我也很高兴认识你,我是 alan"

(integer) 2

redis> lpush message "我的名字是 bruce "

(integer) 3

redis> lrange message 0 2

1) "我的名字是 bruce "

2) "我也很高兴认识你,我是 alan"

3) "你好,很高兴认识你"

redis>

 

由上面例子里,我们每次都在列表头部添加一个元素。

 

lrange也可已接受负数来表示范围, -1 是最后一个元素,-2 是倒数第二个元素。

redis> lrange message -1 -1

1) "你好,很高兴认识你"

redis> lrange message -1 2

1) "你好,很高兴认识你"

redis> lrange message -2 2

1) "我也很高兴认识你,我是 alan"

2) "你好,很高兴认识你"

redis>

 

由上例,list可以应用到聊天系统;可以用在评级系统里,比如 reddit.com;用在博客引擎中,每篇日志都是一个list,然后向里面放入评论;等等。

 

3.2List中放入ID,而不是数据

上例中,我们直接将数据对象(消息的内容)放入了 list,由于对象可能多次被引用,通常我们不那样做,而是存放IDlist中。

 

上面聊天的例子,我们用新的方式来存储:

redis> incr next.message.id

(integer) 1

redis> set message:1:sender alan

OK

redis> set message:1:content "hello, something else"

OK

redis> lpush messages 1

(integer) 1

redis> incr next.message.id

(integer) 2

redis> set message:2:sender bruce

OK

redis> set message:2:content "something else else ..."

OK

redis> lpush messages 2

(integer) 2

 

这次,我们先通过 incr 生成一个唯一的ID,然后创建对象,并为对象赋值,最后把这个对象的 id 放入list中。

 

在命令参考里可以看到更多关于list的命令,Redis命令参考传送

 

4集合 Set

RedisSet 是无序的,元素是二进制安全的字符串。

 

  • sadd命令可以向集合中添加一个元素

  • scard命令获得集合中元素的个数

  • smembers命令获得集合中所有元素(无序)

  • srem 移除集合中的一个或者多个元素

redis> sadd myset 1

(integer) 1

redis> sadd myset 2

(integer) 1

redis> scard myset

(integer) 2

redis> sadd myset 3

(integer) 1

redis> scard myset

(integer) 3

redis> smembers myset

1) "1"

2) "2"

3) "3"

redis> srem myset 1

(integer) 1

redis> srem myset 2 3

(integer) 2

redis> smembers myset

(empty list or set)

redis>

 

  • sismenber 判断元组是否在集合中存在

redis> sadd myset 2

(integer) 1

redis> sismember myset 2

(integer) 1

redis> sismember myset 22

(integer) 0

 

如果元素存在返回1,不存在返回0

 

  • sinter 命令可与取两个集合的交集

redis> sadd set1 1

(integer) 1

redis> sadd set1 2

(integer) 1

redis> sadd set1 3

(integer) 1

redis> sadd set2 2

(integer) 1

redis> sadd set2 3

(integer) 1

redis> sadd set2 4

(integer) 1

redis> sinter set1 set2

1) "2"

2) "3"

redis>

 

5有序集合 Sorted Set / ZSet

关于有序集合的意义不多说,可以用 zadd 来创建一个有序集合,用 zrange 获取元素:

redis> zadd students 15 tom

(integer) 1

redis> zadd students 33 bill

(integer) 1

redis> zadd students 18 alis

(integer) 1

redis> zadd students 18 alan

(integer) 1

redis> zrange students 0 -1

1) "tom"

2) "alan"

3) "alis"

4) "bill"

 

ZSet 的每个元素都有一个评分,Redis通过这个评分排序。上面例子中 15 33 18 18 都是评分,如果评分相同那么会根据元素进行排序。上面 alan 排在了 alis 的前面。

 

  • 通过 zrevrange 进行反向排序

redis> zrevrange students 0 -1

1) "bill"

2) "alis"

3) "alan"

4) "tom"

 

  • 通过 zrangebyscore 来获取 ZSet 的片段,比如我们要获得评分在 18 - 30 之间的元素:

redis> zrangebyscore students 18 30

1) "alan"

2) "alis"

 

可以看到 评分为 18 的元素都包含进来了。

 

  • inf 代表正的极限, -inf 代表负的极限,可以用这个来获取大/小于某个评分的元素

redis> zrangebyscore students -inf 30

1) "tom"

2) "alan"

3) "alis"

 

  • 通过 zremrangebyscore 删除元素

redis> zremrangebyscore students -inf 30

(integer) 3

redis> zrange students 0 -1

1) "bill"

redis>

 

可以看到评分为 -inf 30 的元素都被删除了(共3个),最后只剩下了一个元素。

 

 

参考:http://redis.io/topics/data-types-intro

分享到:
评论

相关推荐

    REDIS 入门指南-清晰完整版带目录

    总结来说,“Redis入门指南-清晰完整版带目录”将涵盖Redis的基础知识、安装配置、数据类型、命令操作、持久化、高可用性以及实际应用场景等多个方面,帮助初学者快速掌握Redis,并能在项目中灵活运用。这份指南将是...

    redis-desktop-manager-Mac-2019.4.0.zip

    - **键值查看**:通过树形结构清晰地查看Redis中的键值对,包括字符串、列表、集合、哈希表和有序集合等多种数据类型。 - **数据操作**:添加、修改、删除键值,支持批量操作和事务处理。 - **搜索与过滤**:在大量...

    redis-desktop-manager-2020.4.0.0

    用户可以通过拖放操作来导入和导出数据,支持多种数据类型,如字符串、哈希、列表、集合和有序集合。此外,该工具还提供了实时的数据查看和编辑功能,方便开发者对Redis数据库进行调试和优化。 在使用场景上,Redis...

    Redis从入门到精通2024版 视频教程 下载 百度网盘链接4.zip

    Redis从入门到精通2024版 视频教程 下载 ├─第 01 章 开篇 │ 001.Redis 录制计划.mp4 │ 002.Redis 介绍.mp4 │ 003.Redis 安装.mp4 │ ├─第 02 章 基本数据类型 │ 01.在后台启动 Redis.mp4 │ 02....

    超强、超详细Redis入门教程

    ### Redis入门教程精要 #### 1. Redis 是什么? Redis 是一款开源的、使用 C 语言编写的、支持网络交互的 Key-Value 数据库。它既可以作为内存数据库使用,也可以实现持久化存储。Redis 的官网地址是 `redis.io`,...

    redis-2.2.5-win32-win64

    Redis 是一个高性能的键值数据库,它以键值对的形式存储数据,支持多种数据类型,如字符串、哈希、列表、集合和有序集合。在"redis-2.2.5-win32-win64"这个压缩包中,包含了 Redis 在 Windows 操作系统上的版本,既...

    Redis 入门指南.pdf

    本指南将帮助初学者理解 Redis 的基本概念、安装与配置、数据类型以及常用命令,从而快速入门 Redis。 1. **Redis 简介** - Redis 源自意大利程序员 Salvatore Sanfilippo,最初是为了提高网站性能而设计的。 - ...

    redis-desktop-manager-0.9.3.817.exe.zip

    - 数据浏览:直观地查看和编辑键值对,支持多种数据类型。 - 操作执行:提供命令行界面,允许用户直接输入Redis命令进行操作。 - 数据导入导出:可以将Redis数据导入导出为JSON、CSV等格式。 - 实时监控:显示服务器...

    Redis从入门到精通视频.rar

    20-redis-redis中关于字符串类型数据的操作命令1.avi 21-redis-redis中关于字符串类型数据的操作命令2.avi 22-redis-redis中关于列表类型数据的操作命令1.avi 23-redis-redis中关于列表类型数据的操作命令2.avi 24-...

    REDIS 入门指南pdf

    - **字符串(String)**:Redis 最基本的数据类型,可以存储字符串、数字等,支持自增、自减操作。 - **哈希(Hash)**:用于存储键值对的集合,适合表示对象。 - **列表(List)**:双向链表结构,支持两端插入...

    redis-windows版本.zip

    1. Redis支持五种基本数据类型:String(字符串)、List(列表)、Set(集合)、Hash(哈希表)和Sorted Set(有序集合)。每种数据类型都有其特定的使用场景和操作命令。 2. String是最基础的数据类型,你可以用`...

    redis入门教程.pdf

    ### Redis 入门教程知识点详解 #### 一、Redis 概述 - **定义**: - Redis(Remote Dictionary Server)是一种开源的、基于内存的日志型 Key-Value 数据库,支持多种数据类型如字符串(string)、链表(list)、...

    Redis教程-从入门到神坑

    在学习过程中,理解每个数据类型的特性和适用场景至关重要,同时掌握 Redis 的命令行操作,能够熟练使用其高级特性,如事务、发布订阅、持久化等,将有助于在实际项目中更好地利用 Redis 提升系统的性能和效率。...

    Redis入门指南(第2版)

    本书是一本Redis入门指导书籍,以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储...

    Redis从入门到精通2024版 视频教程 下载 百度网盘链接3.zip

    Redis从入门到精通2024版 视频教程 下载 ├─第 01 章 开篇 │ 001.Redis 录制计划.mp4 │ 002.Redis 介绍.mp4 │ 003.Redis 安装.mp4 │ ├─第 02 章 基本数据类型 │ 01.在后台启动 Redis.mp4 │ 02....

    分布式缓存REDIS学习笔记

    04-Redis数据类型 - Redis教程 05-Redis命令 - Redis教程 06-Redis键 - Redis教程。。。 13-Redis发布订阅 - Redis教程 。。。 24-Redis Java连接操作 - Redis教程 。。。 27-redis-cluster研究和使用 。。。

    RedisDesktopManager-2019.1.zip

    支持各种数据类型,如字符串、哈希、列表、集合和有序集合的管理。 2. **搜索与过滤**:提供搜索功能,可以快速定位到特定的键或值,同时支持正则表达式过滤,便于在大量数据中查找目标。 3. **数据导出与导入**:...

    Redis入门指南(第2版)电子书

    《Redis入门指南(第2版)》是一本Redis的入门指导书籍,以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史与特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、...

    Redis从入门到精通2024版 视频教程 下载 百度网盘链接1.zip

    Redis从入门到精通2024版 视频教程 下载 ├─第 01 章 开篇 │ 001.Redis 录制计划.mp4 │ 002.Redis 介绍.mp4 │ 003.Redis 安装.mp4 │ ├─第 02 章 基本数据类型 │ 01.在后台启动 Redis.mp4 │ 02....

Global site tag (gtag.js) - Google Analytics