Redis是一个开源的、高性能的、基于键值对的缓存与存储系统,能够提供多种不同的键值数据类型来适应不同场景下的缓存和存储需求。

   Redis中所有的数据都存储在内存中,因此读写速度非常快,相比基于数据库的磁盘读写具有非常明显的优势,但是,由于Redis是存储在内存中的,存储数据的大小会受到内存的限制,而且如果服务器宕机的话数据将会丢失,当然,Redis也提供了持久化的机制来保证数据的恢复。

Redis中提供了多重的键值类型,到目前为止,Redis支持的键值类型如下:

  • 字符串类型 string
  • 散列类型 hash
  • 列表类型 list
  • 集合类型 set
  • 有序集合类型 sorted sort

字符串类型

   字符串类型是Redis中最基本的类型,能够存储任何形式的字符串,包括二进制数据,一个字符串类型允许存储的数据最大容量为512M。
字符串类型数据使用非常简单,使用set和get命令可以对一个key进行赋值和取值操作。假设有一个name=“lczd”的数据,在Redis中可以这样存储:

赋值:
127.0.0.1:6379> set name lczd
OK
取值:
127.0.0.1:6379> get name
"lczd"

   当键不存在时会返回空结果。redis可以存储任何形式的字符串,包括整数形式,redis提供了incr命令来递增当前的键值。
如:

127.0.0.1:6379> incr num
(integer) 1

如果键值不是整数时会提示错误。

还可以同时获得或者设置多个键值,如:

127.0.0.1:6379> mset name lczd age 18
OK
127.0.0.1:6379> mget name age
1) "lczd"
2) "18"

使用场景:

适合使用简单的string类型的key-value缓存场景。

hash类型

   Redis是采用字典结构以键值对形式存储数据结构的,hash也是一种字典结构,存储了字段(field)和字段的映射,但是字段值只能是字符串,不能是其他类型。
散列类型适合存储对象,例如,一条商品的评价可能会存在多个回复。那么,就可以用评价的id作为key,回复id作为field,回复对象作为hash的value。
hahs类型的赋值和取值操作:

hset key field value;
hget key fiel;

同时设置多个值可以用:hmset命令。

127.0.0.1:6379> hset shoes price 300
(integer) 1
127.0.0.1:6379> hset shoes colour blue
(integer) 1
127.0.0.1:6379> hget shoes price
"300"
127.0.0.1:6379> hgetAll shoes
1) "price"
2) "300"
3) "colour"
4) "blue"

使用场景:

适合存储结构化的信息,如对象类型的信息。

列表类型

   列表类型可以存储一个有序的字符串列表,常用的操作是向列表的两端添加元素或者获得列表的某一个片段。
   列表类型内部使用的是双向列表实现的,对列表两端添加元素的时间复杂度为O(1)。获取越接近头部或者尾部的n条记录就越快。但是使用链表的缺点是通过索引访问元素比较慢。使用方式如下:

向列表两端添加元素和获取元素:

127.0.0.1:6379> lpush number 1
(integer) 1
127.0.0.1:6379> lpush number 2
(integer) 2
127.0.0.1:6379> rpush number 3
(integer) 3
127.0.0.1:6379> rpush number 4
(integer) 4
127.0.0.1:6379> lrange number 0 2
1) "2"
2) "1"
3) "3"

从列表删除一个元素,比如去掉左边的第一个元素:

127.0.0.1:6379> lpop number
"2"
127.0.0.1:6379> lrange number 0 2
1) "1"
2) "3"
3) "4"

使用场景:

   根据列表类型的特点,还可以用来实现任务队列,比如让生产者将任务使用lpush命令加入到某个键中,另一边让消费者不断的使用prop命令从该键中取出值即可。还可以在需要展示某些列表数据的场景下使用。

集合类型

   集合类型中的每一个元素都是不同的,且集合没有顺序,集合类型的常用操作是向集合添加或者删除元素、判断某个元素是否存在等。

增加删除元素:

127.0.0.1:6379> sadd dress blue
(integer) 1
127.0.0.1:6379> sadd dress blue  white red
(integer) 2

因为blue已经存在了,所以返回的是2

获取所有元素:

127.0.0.1:6379> smembers dress
1) "white"
2) "red"
3) "blue"

删除元素:

127.0.0.1:6379> srem dress blue
(integer) 1

使用场景:

比如说某些去重的场景,如一个用户只能抽奖一次的这种场景。

有序集合类型

   有序集合类型与集合类型的区别就是有序了,在集合类型的基础上有序集合类型为集合中的每一个元素都关联了一个分数,我们既可以使用集合类型的相关操作,还能够获得分数最高或者最低的前n个元素。
增加元素:

127.0.0.1:6379> zadd EnglishScore 90 jack 88 tom 99 lczd
(integer) 3

zadd命令用来向有序集合中添加一个元素和该元素的分数。

获得排名在某个范围内的元素列表:

127.0.0.1:6379> zrange EnglishScore 0 1
1) "tom"
2) "jack"

   zrange命令会按照元素分数从小到大顺序返回指定范围内的元素,索引都是从0开始,负数代表从后往前查找。

使用场景:

比如说各种热门的排序场景,微博前10,播放榜单前100等等。

   Redis还可以实现“发布/订阅”模式,订阅者可以订阅一个或者若干个平道(channel),发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都会收到消息。
如:
publish channel message,这样消息就发出去了。订阅频道命令 subscribe channel

127.0.0.1:6379> publish channel1.1 hello
(integer) 0
127.0.0.1:6379> subscribe channel1.1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel1.1"
3) (integer) 1

执行subscribe命令后客户端会处于订阅状态,此时客户端无法使用除subscribe 、unsubscribe、pusbscribe、 punsubscribe以外的命令。

   本文列举了Redis的五种数据类型以及最基本的使用命令,结合各个数据类型的特点,列举了一些经常使用的场景。想要了解更多的命令可以查询这个网站:http://redisdoc.com/

Redis系列之----Redis的数据类型及使用场景的更多相关文章

  1. Redis系列(二):Redis的数据类型及命令操作

    原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...

  2. Redis系列(一):Redis的简介与安装

    原文链接(转载请注明出处):Redis系列(一):Redis的简介与安装 什么是 Redis Redis 是一个使用ANSI C 编写的开源.支持网络协议.基于内存.可选持久性的键值对数据库,它是一个 ...

  3. Redis系列一 Redis安装

    Redis系列一    Redis安装 1.安装所使用的操作系统为Ubuntu16.04 Redis版本为3.2.9 软件一般下载存放目录为/opt,以下命令操作目录均为/opt root@ubunt ...

  4. Redis系列(二)—— 数据类型及其使用

    Redis数据类型及其使用 参考:http://www.cnblogs.com/jackluo/p/3173436.html Redis支持五种数据类型:string(字符串),hash(哈希),li ...

  5. redis系列:redis介绍与安装

    前言 这个redis系列的文章将会记录博主学习redis的过程.基本上现在的互联网公司都会用到redis,所以学习这门技术于你于我都是有帮助的. 博主在写这个系列是用的是目前最新版本4.0.10,虚拟 ...

  6. 【Redis 系列】redis 学习十六,redis 字典(map) 及其核心编码结构

    redis 是使用 C 语言编写的,但是 C 语言是没有字典这个数据结构的,因此 C 语言自己使用结构体来自定义一个字典结构 typedef struct redisDb src\server.h 中 ...

  7. 深入剖析Redis系列: Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  8. Redis系列之----Redis的两种持久化机制(RDB和AOF)

    Redis的两种持久化机制(RDB和AOF) 什么是持久化    Redis的数据是存储在内存中的,内存中的数据随着服务器的重启或者宕机便会不复存在,在生产环境,服务器宕机更是屡见不鲜,所以,我们希望 ...

  9. Redis系列三 Redis数据类型

    一 .Redis的五大数据类型 1.String(字符串) string是redis最基本的数据类型,可以理解成与 Memached一模一样的数据类型,一个key对应一个value. string 类 ...

随机推荐

  1. Activiti5----流程监听器与任务监听器

    首先创建流程监听器和任务监听器的实体类,个人比较喜欢使用Delegate Expression方式,其他两种方式也可以 流程监听器 package org.mpc.final_activiti; im ...

  2. keras 保存模型和加载模型

    import numpy as npnp.random.seed(1337) # for reproducibility from keras.models import Sequentialfrom ...

  3. SpringBoot2集成Activiti6

    Activiti是领先的轻量级的,以Java为中心的开源BPMN(Business Process Modeling Notation)引擎,实现了真正的流程自动化.下面介绍如何在SpringBoot ...

  4. C# 配置文件存储 各种序列化算法性能比较

    本文比较多个方式进行配置文件的存储,对比各个不同算法的读写性能. 在应用软件启动的时候,需要读取配置文件,但是启动的性能很重要,所以需要有一个很快的读取配置文件的方法. 如果你不想看过程,那么请看拖动 ...

  5. H3C 二层ACL与用户自定义ACL

  6. 2018-2-13-win10-uwp-隐藏实时可视化

    title author date CreateTime categories win10 uwp 隐藏实时可视化 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 ...

  7. linux预备知识

    我们正在接近去看一些实际的模块代码. 但是首先, 我们需要看一些需要出现在你的模块 源码文件中的东西. 内核是一个独特的环境, 它将它的要求强加于要和它接口的代码上. 大部分内核代码包含了许多数量的头 ...

  8. zoj 4124 "Median" (思维?假的图论?)

    传送门 来源:2019 年“浪潮杯”第十届山东省 ACM 省赛 题意: 对于一个包含n个数的(n为奇数)序列val[ ],排序后的 val[ (n+1) / 2 ] 定义为 median: 有 n 个 ...

  9. linux 让出处理器

    如我们已见到的, 忙等待强加了一个重负载给系统总体; 我们乐意找出一个更好的技术. 想到的第一个改变是明确地释放 CPU 当我们对其不感兴趣时. 这是通过调用调度函数而 实现地, 在 <linu ...

  10. linux 阻塞 open 作为对 EBUSY 的替代

    当设备不可存取, 返回一个错误常常是最合理的方法, 但是有些情况用户可能更愿意等待 设备. 例如, 如果一个数据通讯通道既用于规律地预期地传送报告(使用 crontab), 也用于根据 用户的需要偶尔 ...