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. hdu 1289 Hat’s IEEE

    Problem - 1289 好题.其实就是模拟IEEE754的格式,不过要注意的是,这里用的32位是float,用double就不对了. 代码如下: #include <cstdio> ...

  2. 使用模块定义AngularJS组件

    一.模块创建/查找 module 当创建一个模块时,必须指定name和requires参数,即使你的模块并不存在依赖 var myApp=angular.module("exampleApp ...

  3. 深入Java线程管理(二):线程的生命周期

    Java线程的生命周期 一个线程的产生是从我们调用了start方法开始进入Runnable状态,即可以被调度运行状态,并没有真正开始运行,调度器可以将CPU分配给它,使线程进入Running状态,真正 ...

  4. Python--day68--Django ORM常用字段、不常用的字段、自定义字段

    ORM和数据库的对应关系: Django ORM 常用字段和参数 常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建 ...

  5. Python--day19--os模块

    os模块 os模块是与操作系统交互的一个接口 os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删 ...

  6. nginx 301 将不带www域名,重定向到www域名

    // nginx 官方推荐 server { listen 80; server_name example.org; return 301 http://www.example.org$request ...

  7. JDBC 时间处理

    Java中用类java.util.Date对日期/时间做了封装,此类提供了对年.月.日.时.分.秒.毫秒以及时区的控制方法,同时也提供一些工具方法,比如日期/时间的比较,前后判断等. java.uti ...

  8. Python--day46--mysql存储过程(不常用)(包含防sql注入)

    一.存储过程: 优点:只要传很少的数据到数据库就可以了  缺点:dba管理数据库的时候可能会对数据库进行了更改了那一坨sql语句. 二.创建存储过程: 1.简单 创建存储过程: Python中使用结果 ...

  9. Xshell + SVN使用

    切换目录 cd+想跳转到的目录下 文件浏览 ls ll (ll 信息全) svn更新 svn up 编辑 vi vi的命令 文件保存与退出: :q 在文件未作任何修改的情况下退出. :q! 强制退出, ...

  10. vue-learning:39 - router - vue-router的基本使用

    vue-router路由的基本使用 一张图阐述vue-router的基本使用步骤 // 0. 如果全局使用CDN引入:vue 引入在前,vue-router引入在后 // <script src ...