美文网首页
redis的5种数据结构和基本操作

redis的5种数据结构和基本操作

作者: powerjiajun | 来源:发表于2019-09-16 22:02 被阅读0次

1.字符串(string)

字符串的value结构
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)

哈希的value结构图

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结构和双端入队出队示意图

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

其余操作可参考这张命令表:


redis list基本操作命令

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十分适合用来做排行榜。


如图,多个学生按score排序
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】Redis中5种基础数据结构以及相应的命令行和Py

    本文主要介绍了Redis中5种基本的数据结构,以及相应的数据操作命令。 Redis基本数据结构 Redis是键值对...

  • Redis

    安装使用 服务 开启 和 关闭 key 操作 Redis 数据类型 string(字符串) 基本命令: 数据结构 ...

  • Redis菜鸟小结(二)

    基本的Redis key的操作都已经熟悉了之后,便可以开始针对Redis提供的各种可操作的数据结构进行学习和了解。...

  • redis缓存重要特性单线程模型

    redis和memcache的区别 redis拥有更多的数据结构支持更多的数据操作。redis操作是在服务端进行。...

  • Redis 源码分析——定时任务原理

    本文主要是基于 redis 6.2 源码进行分析定时事件的数据结构和常见操作。 数据结构 在 redis 中通过 ...

  • redis基础

    redis概念下载安装命令操作数据结构持久化操作使用Java客户端操作redis Redis 概念: redis是...

  • Redis基本数据结构和操作

    1. redis存储结构: redis有0-15个db空间,每个db空间内存key-value redis的db ...

  • NoSQL:一文搞定Redis高级特性与性能调优

    本文从 Redis 基本特性入手,通过讲述 Redis 的数据结构和主要命令对 Redis 的基本能力进行直观介绍...

  • 《Redis实战》

    首部分对Redis进行了介绍,说明了Redis的基本使用方法、它拥有的5种数据结构以及操作这5种数据结构的命令,并...

  • 《Redis实战》下载

    首部分对Redis进行了介绍,说明了Redis的基本使用方法、它拥有的5种数据结构以及操作这5种数据结构的命令,并...

网友评论

      本文标题:redis的5种数据结构和基本操作

      本文链接:https://www.haomeiwen.com/subject/jfcojctx.html