文档章节

Redis数据结构

秋风醉了
 秋风醉了
发布于 2016/03/31 13:48
字数 1035
阅读 292
收藏 5

Redis数据结构

Redis字符串——string

字符串命令

GET 获取存储在给定键中的值
SET 设置存储在给定键中的值
DEL 删除存储在给定键中的值(这个命令可以用于所有类型)

操作演示,

➜  redis redis-cli -p 7000
127.0.0.1:7000> set hello world
OK
127.0.0.1:7000> get hello
"world"
127.0.0.1:7000> del hello
(integer) 1
127.0.0.1:7000> get hello
(nil)
127.0.0.1:7000>

 

Redis列表——list

redis对链表(linked-list)结构的支持使得它在键值存储的世界中独树一帜。一个列表结构可以有序的存储多个字符串。

RPUSH 将给定值推入列表的右端
LRANGE 获取列表在给定范围上的所有值
LINDEX 获取列表在给定位置上的单个元素
LPOP 从列表的左端弹出一个值,并返回被弹出的值

操作演示,

127.0.0.1:7000> rpush my-list item1
(integer) 1
127.0.0.1:7000> rpush my-list item2
(integer) 2
127.0.0.1:7000> rpush my-list item3
(integer) 3
127.0.0.1:7000> get my-list
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:7000> lpop my-list
"item1"
127.0.0.1:7000> rpop my-list
"item3"
127.0.0.1:7000>

 

Redis集合——set

redis的集合和列表都可以存储多个字符串,列表可以存储多个相同的字符串,而集合则通过使用散列表来保证自己存储的每个字符串都是各不相同的(这些散列表只有键,但没有与键相关联的值),同时集合的元素都是无序的。如下操作示例,

//获取集合包含的所有元素
127.0.0.1:7000> smembers my-set
(empty list or set)
//集合添加元素
127.0.0.1:7000> sadd my-set item1
(integer) 1
127.0.0.1:7000> sadd my-set item2
(integer) 1
127.0.0.1:7000> sadd my-set item3
(integer) 1
127.0.0.1:7000> smembers my-set
1) "item1"
2) "item3"
3) "item2"
//查看集合是否包含某一个元素
127.0.0.1:7000> sismember my-set item1
(integer) 1
127.0.0.1:7000> sismember my-set item2
(integer) 1
//集合删除元素
127.0.0.1:7000> srem my-set item1
(integer) 1
//获取集合的所有元素
127.0.0.1:7000> smembers my-set
1) "item3"
2) "item2"
127.0.0.1:7000>

 

Redis散列——hash

redis的散列可以存储多个键值对之间的映射。和字符串一样,散列存储的值即可以是字符串又可以是数字值,并且用户同样可以对散列存储的数字执行自增操作或自减操作。以下是操作演示,

127.0.0.1:7000> hset my-hash key1 value1
(integer) 1
127.0.0.1:7000> hset my-hash key2 value2
(integer) 1
127.0.0.1:7000> hgetall my-hash
1) "key1"
2) "value1"
3) "key2"
4) "value2"
127.0.0.1:7000> hdel my-hash key1
(integer) 1
127.0.0.1:7000> hgetall my-hash
1) "key2"
2) "value2"
127.0.0.1:7000> hget my-hash key2
"value2"
127.0.0.1:7000>

 

Redis有序集合——zset

有序集合和散列一样,都用于存储键值对:有序集合(sorted-set)的键被称为成员(member),每个成员都是各不相同的;而有序集合的值则称为分值(score),分值必须为浮点数。有序集合是Redis里面唯一一个既可以根据成员访问元素(这一点和散列一样),又可以根据分值以及分值的排列顺序来访问元素的结构。

redis 127.0.0.1:6379> ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN

如下演示操作,

127.0.0.1:7000> zadd my-zset 123 member1
(integer) 1
127.0.0.1:7000> zadd my-zset member1 123
(error) ERR value is not a valid float
127.0.0.1:7000> zadd my-zset 123 member0
(integer) 1
127.0.0.1:7000> zadd my-zset 124 member0
(integer) 0
127.0.0.1:7000> zrange my-zset 0 -1 withscores
1) "member1"
2) "123"
3) "member0"
4) "124"
127.0.0.1:7000> zrangebyscore my-zset 0 800 withscores
1) "member1"
2) "123"
3) "member0"
4) "124"
127.0.0.1:7000> zrem my-zset member1
(integer) 1
127.0.0.1:7000> zrem my-zset member1
(integer) 0
127.0.0.1:7000> zrange my-zset 0 -1 withscores
1) "member0"
2) "124"
127.0.0.1:7000>

zrange命令解析:

redis 127.0.0.1:6379> ZRANGE key start stop [WITHSCORES]

下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。

你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。

zrangebyscore命令解析:

redis 127.0.0.1:6379> ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

该命令将返回分数在min和max之间的所有成员,即满足表达式min <= score <= max的成员,其中返回的成员是按照其分数从低到高的顺序返回,如果成员具有相同的分数,则按成员的字典顺序返回。

========END========

© 著作权归作者所有

共有 人打赏支持
秋风醉了
粉丝 246
博文 543
码字总数 412294
作品 0
朝阳
程序员
私信 提问
你真的懂redis的数据结构了吗?

Redis有哪些数据结构? 字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。 很多人面试时都遇到过这种场景吧? 其实除了上面的几种常见数据结构,还需要加上数据结构HyperLogL...

编辑之路
02/14
0
0
redis基本概念和原理

Redis简介 REmote DIctionary Server(Redis) 是一个由SalvatoreSanfilippo写的key-value存储系统。 Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日...

huojiao2006
2017/05/03
0
0
带有详细注释的 Redis 3.0 代码 (github.com)

 Redis 3.0 源码注释 本项目是注释版的 Redis 3.0 源码, 原始代码来自: https://github.com/antirez/redis 。 这份注释是我在创作新版《Redis 设计与实现》期间, 为了了解 Redis 的内...

nothingfinal
2016/06/06
0
0
Redis-Dump

Redis-Dump 是一个将Redis数据导入/导出为json格式数据的小工具,目前还在Alpha版本,目前提供两个命令,将Redis数据层出成json的redis-dump命令,以及将json文件导入到redis中的redis-load命...

匿名
2012/01/09
4K
1
Redis不同数据类型的的数据结构实现

原文:Redis不同数据类型的的数据结构实现 我们知道Redis支持五种数据类型, 分别是字符串、哈希表(map)、列表(list)、集合(set)和有序集合,和Java的集合框架类似,不同数据类型的数据...

杰克.陈
2017/12/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 升级中的一些常见问题

升级的时候遇到了问题了吗? 如果你想尝试重新进行升级的话,你需要首先重新恢复老的备份。不要尝试再次对 Confluence 进行升级或者在升级失败后重新启动老的 Confluence。 在升级过程中的一...

honeymoose
今天
2
0
C++随笔(四)Nuget打包

首先把自己编译好的包全部准备到一个文件夹 像这样 接下来新建一个文本文档,后缀名叫.nuspec 填写内容 <?xml version="1.0"?><package xmlns="http://schemas.microsoft.com/packaging/201......

Pulsar-V
今天
2
0
再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
3
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0
分布式面试整理

并发和并行 并行是两个任务同时进行,而并发呢,则是一会做一个任务一会又切换做另一个任务。 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有...

群星纪元
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部