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. lrj word

    www.tup.tsinghua.edu.cn/upload/books/yz/055687-01.doc bing搜索UVa437 搜到这个word版本的电子书第9章

  2. 用复制方式创建表 Create Table tbname as select * from user.tab where ...

    用复制方式创建表 Create Table tbname as select * from user.tab where ...

  3. 2018-8-10-win10-uwp-后台获取资源

    title author date CreateTime categories win10 uwp 后台获取资源 lindexi 2018-08-10 19:17:19 +0800 2018-2-13 ...

  4. 2018-8-10-WPF-可获得焦点属性

    title author date CreateTime categories WPF 可获得焦点属性 lindexi 2018-08-10 19:16:53 +0800 2018-05-15 15: ...

  5. 解决从旧格式的 csproj 迁移到新格式的 csproj 格式 AssemblyInfo 文件值重复问题

    现在很多小伙伴开始使用了 dotnet core 项目,但是如果是从以前的 dotnet framework 的项目修改为 dotnet core 项目格式,会发现编译的时候出现了 AssemblyI ...

  6. H3C 聚合链路负载分担原理

  7. linux 选择 ioctl 命令

    在为 ioctl 编写代码之前, 你需要选择对应命令的数字. 许多程序员的第一个本能的反 应是选择一组小数从0或1 开始, 并且从此开始向上. 但是, 有充分的理由不这样做. ioctl 命令数字应当 ...

  8. Loj3033 JOISC 2019 Day2两个天线

    Loj3033 JOISC 2019 Day2两个天线 下午唯一听懂的题目但,但还是比较模糊.写一篇题解来加深一下印象. 题目大意:给定\(n\)根天线,第\(i\)跟天线的高度为\(h_i\),切它 ...

  9. dotnet 启动 JIT 多核心编译提升启动性能

    用2分钟提升十分之一的启动性能,通过在桌面程序启动 JIT 多核心编译提升启动性能 在 dotnet 可以通过让 JIT 进行多核心编译提升软件的启动性能,在默认托管的 ASP.NET 程序是开启的, ...

  10. Linux普通用户执行特定的命令配置

    最近处理了一个二级CASE,驻场运维的初级工程师安装软件的时候执行了yum update,导致用户生产系统的glibc也升级了,使得用户的生产调度软件无法使用.研究了两三天,最靠谱的做法如下: Ste ...