redis的5种数据结构和基本操作
1.字符串(string)

1.1设置值
set key value [ex seconds] [px milliseconds] [nx|xx]
例如:
127.0.0.1:6379> set hello world
OK
1.2获取值
127.0.0.1:6379> get hello
"world"
字符串类型的内部编码有3种:
- int:8个字节的长整型。
- embstr:小于等于39个字节的字符串。
- raw:大于39个字节的字符串。
Redis会根据当前值的类型和长度决定使用哪种内部编码实现。
2.哈希(hash)

hash由多个field构成,适合存储拥有多个属性的对象。
2.1 设置值
hset key field value
例如添加一个名字为tom的用户,user为key,name为field
127.0.0.1:6379> hset user name tom
(integer) 1
再为这个hash添加一个名为age的field
127.0.0.1:6379> hset user age 13
(integer) 1
2.2 获取值
hget key field
例如获取用户的名字
127.0.0.1:6379> hget user name
"tom"
获取用户的年龄
127.0.0.1:6379> hget user age
13
3.list

list是一个类似数组的有序线性结构,允许存储重复元素。
3.1添加操作
- 从右边添加元素
rpush key value [value ...]
从右边向左插入三个元素a、b、c示例:
127.0.0. 1:6379> rpush listkey c b a
(integer) 3
此时名为listkey的list存储的元素如下:
127.0.0.1:6379> lrange listkey 0 -1
1) "c"
2) "b"
3) "a"
- 从左边添加元素
lpush key value [value ...]
从左向右添加元素示例:
127.0.0. 1:6379> lpush listkey c b a
(integer) 3
3.2查找元素
- 获取指定索引下标元素
lindex key index
- 获取列表长度
127.0.0.1:6379> llen listkey
(integer) 4
3.3删除元素
- 将列表最左侧的一个元素弹出
lpop listkey
- 将列表最右侧的一个元素弹出
rpop listkey
其余操作可参考这张命令表:

4.集合(set)
set可以用来保存多个字符串元素,无序,不允许重复。
4.1添加元素
sadd key element [element ...]
127.0.0.1:6379> sadd myset a b c
(integer) 3
127.0.0.1:6379> sadd myset a b
(integer) 0
4.2 删除元素
srem key element [element ...]
返回删除元素个数
127.0.0.1:6379> srem myset a b
(integer) 2
127.0.0.1:6379> srem myset hello
(integer) 0
4.3 计算元素个数
scard的时间复杂度为O(1),它不会遍历集合所有元素,而是直接用
Redis内部的变量,例如:
127.0.0.1:6379> scard myset
(integer) 1
4.4 判断元素是否在集合中
sismember key element
如果给定元素element在集合内返回1,反之返回0,例如:
127.0.0.1:6379> sismember myset c
(integer) 1
4.5 从集合随机弹出元素
spop key
spop操作可以从集合中随机弹出一个元素,例如下面代码是一次spop
后,集合元素变为"d b a":
127.0.0.1:6379> spop myset
"c"
127.0.0.1:6379> smembers myset
1) "d"
2) "b"
3) "a"
srandmember和spop都是随机从集合选出元素,两者不同的是spop命令
执行后,元素会从集合中删除,而srandmember不会。
4.6 获取所有元素
smembers key
127.0.0.1:6379> smembers myset
1) "d"
2) "b"
3) "a"
smembers和lrange、hgetall都属于比较重的命令,如果元素过多存在阻
塞Redis的可能性,建议使用sscan来完成。

5.有序集合(zset)
有序集合在set上增加了排序的特性,依然不允许重复元素。
有序集合排序靠的不是索引下标,而是每个元素的分数(score)。zset十分适合用来做排行榜。

5.1添加元素
127.0.0.1:6379> zadd user:ranking 251 tom
(integer) 1
5.2 计算成员个数
127.0.0.1:6379> zcard user:ranking
(integer) 5
5.3 计算成员排名
zrank是从分数从低到高返回排名,zrevrank反之。例如下面操作中,tom
在zrank和zrevrank分别排名第5和第0(排名从0开始计算)。
127.0.0.1:6379> zrank user:ranking tom
(integer) 5
127.0.0.1:6379> zrevrank user:ranking tom
(integer) 0
5.3 删除成员
127.0.0.1:6379> zrem user:ranking mike
(integer) 1
5.4 返回指定分数范围的成员
zrangebyscore key min max [withscores] [limit offset count]
zrevrangebyscore key max min [withscores] [limit offset count]
其中zrangebyscore按照分数从低到高返回,zrevrangebyscore反之。例如
下面操作从低到高返回200到221分的成员,withscores选项会同时返回每个
成员的分数。[limit offset count]选项可以限制输出的起始位置和个数:
127.0.0.1:6379> zrangebyscore user:ranking 200 tinf withscores
1) "frank"
2) "200"
3) "tim"
4) "220"
127.0.0.1:6379> zrevrangebyscore user:ranking 221 200 withscores
1) "tim"
2) "220"
3) "frank"
4) "200"
redis的5种数据结构和基本操作的更多相关文章
- Redis 中 5 种数据结构的使用场景介绍
这篇文章主要介绍了Redis中5种数据结构的使用场景介绍,本文对Redis中的5种数据类型String.Hash.List.Set.Sorted Set做了讲解,需要的朋友可以参考下 一.redis ...
- Redis入门到高可用(四)—— Redis的五种数据结构的内部编码
Redis的五种数据结构的内部编码
- 详细介绍Redis的几种数据结构以及使用注意事项(转)
原文:详细介绍Redis的几种数据结构以及使用注意事项 1. Overview 1.1 资料 <The Little Redis Book>,最好的入门小册子,可以先于一切文档之前看,免费 ...
- Redis系列(二):Redis的5种数据结构及其常用命令
上一篇博客,我们讲解了什么是Redis以及在Windows和Linux环境下安装Redis的方法, 没看过的同学可以点击以下链接查看: Redis系列(一):Redis简介及环境安装. 本篇博客我们来 ...
- Redis中5种数据结构的使用场景介绍
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/108.html?1455861435 一.redis 数据结构使用场景 原 ...
- redis中5种数据结构的使用
一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...
- redis的5种数据结构的简介
5种数据结构 1.字符串 Redis 字符串是一个字节序列.在 Redis 中字符串是二进制安全的,这意味着它们没有任何特殊终端字符来确定长度,所以可以存储任何长度为 512 兆的字符串. 示例 12 ...
- Redis 的几种数据结构&五种数据类型对象
先看几种数据结构 通过分析底层的数据结构,学习如何根据场景选型和设计 1,简单动态字符串 redis使用的字符串SDS有别于C语言中的字符串 a, 结构 free字段为已分配但未使用的空间 len为已 ...
- Redis中5种数据结构的使用场景
一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...
随机推荐
- Deno会在短期内取代Node吗?
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://blog.bitsrc.io/what-is-deno-and-will-it-r ...
- Pyqt5_QMessageBox
QMessageBox header:会话窗标题 info:会话窗内容 #弹出5种不同类型的消息框 reply1=QMessageBox.information(self,"title&qu ...
- PHP SESSION 操作
Session的声明与使用 Session的设置不同于Cookie,必须先启动,在PHP中必须调用session_start().session_start()函数的语法格式如下: Bool sess ...
- Consul+upsync+Nginx实现动态负载均衡
上一篇文章 <C# HttpClient 使用 Consul 发现服务> 解决了内部服务之间的调用问题, 对外提供网关服务还没有解决, 最后我选择了 nginx-upsync-module ...
- [SD心灵鸡汤]000.每月一则 - 索引
[SD心灵鸡汤]001.每月一则 - 2015.05 [SD心灵鸡汤]002.每月一则 - 2015.06 [SD心灵鸡汤]003.每月一则 - 2015.07 [SD心灵鸡汤]004.每月一则 - ...
- pandas DataFrame 的横向纵向拼接组合
concat 与其说是连接,更准确的说是拼接.就是把两个表直接合在一起.于是有一个突出的问题,是横向拼接还是纵向拼接,所以concat 函数的关键参数是axis . 函数的具体参数是: concat( ...
- try catch finally return 轶事
最近阿里发布了java开发手册终极版,看到其中一条规约:[强制]不能在 finally 块中使用 return, finally 块中的 return 返回后方法结束执行,不会再执行 try 块中的 ...
- 认证(Authentication)和授权(Authorization)总结
身份认证是验证你的身份,一旦通过验证,即启用授权.你所拥有的身份可以进行哪些操作都是由授权规定.例如,任何银行客户都可以创建一个账户(如用户名),并使用该账户登录该银行的网上服务,但银行的授权政策必须 ...
- spring boot 整合 poi 导出excel
一. 第一种方式 1.首先从中央仓库中导入架包Poi3.14以及Poi-ooxml3.14. <dependency> <groupId>org.apache.poi</ ...
- 深入理解JS:var、let、const的异同
目录 序言 var 与 let 的区别 作用域 重复声明 绑定全局对象 变量提升与暂存死区 let 与 const 异同 参考 1.序言 var.let 和 const 都是 JavaScript 中 ...