Redis系列之----Redis的数据类型及使用场景
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的数据类型及使用场景的更多相关文章
- Redis系列(二):Redis的数据类型及命令操作
原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...
- Redis系列(一):Redis的简介与安装
原文链接(转载请注明出处):Redis系列(一):Redis的简介与安装 什么是 Redis Redis 是一个使用ANSI C 编写的开源.支持网络协议.基于内存.可选持久性的键值对数据库,它是一个 ...
- Redis系列一 Redis安装
Redis系列一 Redis安装 1.安装所使用的操作系统为Ubuntu16.04 Redis版本为3.2.9 软件一般下载存放目录为/opt,以下命令操作目录均为/opt root@ubunt ...
- Redis系列(二)—— 数据类型及其使用
Redis数据类型及其使用 参考:http://www.cnblogs.com/jackluo/p/3173436.html Redis支持五种数据类型:string(字符串),hash(哈希),li ...
- redis系列:redis介绍与安装
前言 这个redis系列的文章将会记录博主学习redis的过程.基本上现在的互联网公司都会用到redis,所以学习这门技术于你于我都是有帮助的. 博主在写这个系列是用的是目前最新版本4.0.10,虚拟 ...
- 【Redis 系列】redis 学习十六,redis 字典(map) 及其核心编码结构
redis 是使用 C 语言编写的,但是 C 语言是没有字典这个数据结构的,因此 C 语言自己使用结构体来自定义一个字典结构 typedef struct redisDb src\server.h 中 ...
- 深入剖析Redis系列: Redis集群模式搭建与原理详解
前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...
- Redis系列之----Redis的两种持久化机制(RDB和AOF)
Redis的两种持久化机制(RDB和AOF) 什么是持久化 Redis的数据是存储在内存中的,内存中的数据随着服务器的重启或者宕机便会不复存在,在生产环境,服务器宕机更是屡见不鲜,所以,我们希望 ...
- Redis系列三 Redis数据类型
一 .Redis的五大数据类型 1.String(字符串) string是redis最基本的数据类型,可以理解成与 Memached一模一样的数据类型,一个key对应一个value. string 类 ...
随机推荐
- 数据存储在哪里? Java是值传递还是引用传递?
寄存器 : 最快的存储区,位于处理器中,寄存器会按需求自行分配空间,java不能控制寄存器,所以在程序中感觉不到它的存在 栈(stack) : 位于RAM(内存)中,速度仅次于寄存器,存储对象的引用( ...
- Python--day21--复习
序列化模块总结: jison格式化输出: Serialize obj to a JSON formatted str.(字符串表示的json对象) Skipkeys:默认值是False,如果dict的 ...
- H3C LMI协议标准
- js利用select标签生成简易计算功能
html中使用select option作为运算符的承接容器,输入值,选择不同运算符,计算结果. 文章地址 https://www.cnblogs.com/sandraryan/ <!DOCTY ...
- Vue 组件中的data数据
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- tf.train.string_input_producer()
处理从文件中读数据 官方说明 简单使用 示例中读取的是csv文件,如果要读tfrecord的文件,需要换成 tf.TFRecordReader import tensorflow as tf file ...
- vue element UI el-table 表格调整行高的处理方法
这是我在工作项目中遇到的问题,我想将标记处下方的表格高度调低一点,也就是想实现下面的这个效果: 代码调整如下: 说明: 缩小:行高到一定程度之后便不能缩小. 好像最小35px.各位可以试一下. 升高: ...
- 备战省赛组队训练赛第五场(UPC)
中石油比赛链接 CF题目链接 E:博客 G:李继朋 博客 H:苗学林 贺振原 J:博客 苗学林 机房白给队全方位题解:A B E G I J
- 两种方法,轻松上手ConfigMap!
属性配置文件在任何应用程序中都非常重要.它们不仅可以让应用程序具备灵活性,还能够根据文件中配置的值产生不同的功能.实际上,在staging.开发.测试.UAT或生产环境中,我们都使用属性配置文件来驱动 ...
- CodeForces 375D Tree and Queries
传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...