前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis-1.Redis数据结构

Redis-1.Redis数据结构

作者头像
悠扬前奏
发布2019-05-30 20:25:01
6510
发布2019-05-30 20:25:01
举报

1.Redis中的数据结构

Redis中有五种数据结构:

结构类型

结构存储的值

结构的读写能力

STRING

可以是字符串,整数,浮点数

对整个字符串或者字符串中的一部分执行操作;对整数和浮点数执行自增减操作。

LIST

链表,每个节点都包含了一个STRING

从链表两端推入或者弹出元素;根据偏移量对链表进行裁剪(trim);读取单个或多个元素;根据值查找或者移除元素

SET

包含STRING的无需收集器(unordered collection),并且被包含的每个STRING都是唯一的

添加,获取,移除单个元素;检查一个元素是否存在;计算交集、并集、差集;从集合里面随机获取元素

HASH

包含键值对的无序散列表

添加、获取、移除单个键值对;获取所有键值对

ZSET

字符串成员(member)与浮点数分值(score)之间的有序映射,元属的排列顺序由分值大小决定

添加、获取、删除单个元素;根据分值范围(range)或者成员来获取元素

2. 字符串

Redis是一个字节组成的序列,可以存储三种类型的值:

  • 字符串(byte string)
  • 整数(和系统长整型范围相同)
  • 浮点数(IEEE 754标准浮点数,double)

常用命令:

命令

用例——描述

GET

get key ——获取键的值

SET

set key value——设置键的值

DEL

del key——删除键的值

例子:

代码语言:javascript
复制
pengjunzhe: ~$redis-cli
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> get hello
(nil)

自增自减命令 自增自减命令只能作用于整数,如果对不存在的键或者保存了空串的键执行自增/自减操作,那么会将这个键的值当作0处理,如果对无法解释为整数或者浮点数的字符串值性自增/自减操作,把额会返回一个错误。

命令

用例和描述

INCR

INCR key——将键存储的值加1

DECR

DECR key——将键存储的值减1

INCRBY

INCRBY key amount——将键存储的值加上整数amount

DECRBY

DECRBY key amount——将键存储的值减去整数amount

INCRBYFLOAT

INCRBYFLOAT key amount——将键存储的值加上浮点数amount

例子(python):

代码语言:javascript
复制
import redis
conn = redis.Redis()
conn.get('key')
conn.incr('key')
1
conn .incr('key', 15)
16
conn.decr('key',5)
11
conn.set('key', '13')
True
conn.incr('key')
14

子串和二进制位命令

命令

用例和描述

APPEND

APPEND key value——将value追加到给定键当前存储值的末尾

GETRANGE

GETRANGE key start end——获取一个由偏移量start至偏移量end范围内所有字符组成的子串,包括start和end

SETRANGE

SETRANGE key offset value——将start偏移量开始的子串设置为给定制

GETBIT

GETBIT key offset——将字符串看作是二进制位串(bit string)并返回串中偏移量为offset的二进制位的值

SETBIT

SETBIT key offset value——将字节串看作是二进制串,并将位串中偏移量为offset的值设置为value

BITCOUNT

BITCOUNT key [start end]——统计二进制位串中值为1的二进制位的数量,如果给定了可选的start偏移量和end偏移量,那么只对偏移量指定范围内的二进制位进行统计

BITOP

BITOP operation dest-key key-name对一个或多个二进制串值性包括并(AND),或(OR),异或(XOR),非(NOT)在内的任何一个位运算操作。并将计算出来的结果保存在dest-key键里面

例子:

代码语言:javascript
复制
conn = redis.Redis()
conn.append("new-string-key", "hello ")
6
conn.append("new-string-key", "world!")
12
conn.substr("new-string-key", 3, 7)
b'lo wo'
conn.setrange("new-string-key", 0, "H")
12
conn.get("new-string-key")
b'Hello world!'
conn.setrange('new-string-key', 11, ' how re you?')
23
conn.get('new-string-key')
b'Hello world how re you?'
conn.setbit('another-key', 2, 1)
0
conn.setbit('another-key', 7, 1)
0
conn.get('another-key')
b'!'

3. 列表(list)简介

Redis的一个列表可以有序的存储多个字符串。 列表命令:

命令

行为

LPUSH

将给定的值推入列表的左端

RPUSH

将给定的值推入列表的右端

LPOP

从列表的左侧弹出一个元素,并范围被弹出的值

RPOP

从列表的右侧弹出一个元素,并范围被弹出的值

LRANGE

获取列表在给定范围上的所有值

LINDEX

获取列表在给定位置上的单个元素

LTRIM

对列表进行修剪,只保留start偏移量到 end偏移量范围内的元素,其中偏移量为start和end的元素会被保留

例子:

代码语言:javascript
复制
127.0.0.1:6379> rpush list-key item
(integer) 1
127.0.0.1:6379> rpush list-key item2
(integer) 2
127.0.0.1:6379> rpush list-key item
(integer) 3
127.0.0.1:6379> lrange list-key 0 -1
1) "item"
2) "item2"
3) "item"
127.0.0.1:6379> lindex list-key 1
"item2"
127.0.0.1:6379> lpop list-key
"item"
127.0.0.1:6379> lrange list-key 0 -1
1) "item2"
2) "item"

阻塞式的在列表单出命令以及在列表之间移动元素的命令

|命令|描述| |BLPOP|blpop key-name timeout:在从第一个非空列表中单出位于最左端的元素,或者在timeout秒内阻塞并等待可弹出的元素出现| |BRPOP|brpop key-name timeout:在从第一个非空列表中单出位于最右端的元素,或者在timeout秒内阻塞并等待可弹出的元素出现| |RPOPLPUSH|rpoplpush source-key dest-key:从source-key列表中弹出最右端的元素,然后吧这个元素推入dest-key列表的最左端,并向用户返回这个元素| |BRPOPLPUSH|brpoplpush source-key dest-key timeout:从source-key列表中弹出最右端的元素,然后将这个元素推入dest-key列表的最左端,并向用户返回这个元素;如果使用source-key为空,那么在timeout秒之内阻塞并等待可弹出的元素出现|

4. 集合简介

集合也可以存储多个字符串,但是集合通过使用散列表来保证存储的字符串是个不相同的。

集合常用命令:

命令

行为

SADD

sadd key-name item:将一个或多个元素添加到集合中,并返回添加元素中原本不存在于集合里面的元素数量

SREM

srem key-name item:从集合里面移除一个或多个元素,并返回被移除的元素的数量

SISMEMBER

sismember key-name item:检查元素item是否存在于集合中

SMEMBERS

获取集合的包含的所有元素

SRANDMEMBER

srandmember key-name [count]:从集合里面随机随机返回一个或者多个元素,当count为正数时,命令返回的随机元素不会重复,当count为负数时,命令返回的随机元素可能会出现重复

SPOP

spop key-name:随机的移除集合中的元素,并返回被移除的元素

SMOVE

SMOVE source-key dest-key item:如果集合source-key包函元素item,则从集合source-key中移除元素item,并将元素item添加到集合dest-key中,如果item被成功移除,那么返回1,否则返回0

例子:

代码语言:javascript
复制
127.0.0.1:6379> sadd set-key item
(integer) 1
127.0.0.1:6379> sadd set-key item1
(integer) 1
127.0.0.1:6379> sadd set-key item2
(integer) 1
127.0.0.1:6379> sadd set-key item
(integer) 0
127.0.0.1:6379> smembers set-key
1) "item"
2) "item1"
3) "item2"
127.0.0.1:6379> sismember set-key item3
(integer) 0
127.0.0.1:6379> srem set-key item2
(integer) 1
127.0.0.1:6379> srem set-key item2
(integer) 0
127.0.0.1:6379> smembers set-key
1) "item"
2) "item3"

组合和处理多个集合的Redis命令

命令

描述

SDIFF

sdiff key-name [key-name ...]:返回存在于一个集合,但是不存在于其他集合中的元素(差集运算)

SDIFFSTORE

sdiffstore dest-key key-name [key-name ... ]:将存在于一个集合但是并不存在于其他集合中的元素存储到dest-key中

SINTER

sinter key-name [key-name ... ]:返回同时存在于所有集合的元素(交集运算)

SINTERSTORE

sinterstore dest-key key-name [ key-name ... ]:将那些同时存在于所有集合的元素存储到dest-key里面

SUNION

sunion key-name [key-name ... ]:返回那些存在于至少一个集合的元素(并集运算)

SUNIONSTORE

sunionsotre dest-key keyname [key-name ... ]将那些至少存在于一个集合的元素存储到dest-key键里面

例子:

代码语言:javascript
复制
conn.sadd('skey', 'a', 'b', 'c', 'd')
4
conn.sadd('skey2', 'c', 'd', 'e', 'f')
4
conn.sdiff('skey', 'skey2')
{b'b', b'a'}
conn.sinter('skey', 'skey2')
{b'd', b'c'}
conn.sunion('skey', 'skey2')
{b'f', b'b', b'c', b'a', b'd', b'e'}

5.散列简介

散列存储多个键值对。散列存储的值可以是字符串或数字值,可以对散列存储的数执行自增自减操作。

散列常用命令

命令

行为

HSET

在散列里面关联起给定的键值对

HGET

获取指定散列键的值

HGETALL

获取散列包含的所有键值对

HDEL

如果给定的键存在于散列,移除这个键

HLEN

HLEN key-name:返回散列包含的键值对数量

HMGET

HMGET key-name key [key ...]:从散列中获取一个或者多个键的值

HMSET

HMSET key value [key value ...]:为散列里面一个或者多个键设置值

例子:

代码语言:javascript
复制
127.0.0.1:6379> hset hash-set sub-key1 value1
(integer) 1
127.0.0.1:6379> hset hash-set sub-key2 value2
(integer) 1
127.0.0.1:6379> hset hash-set sub-key1 value
(integer) 0
127.0.0.1:6379> hgetall hash-set
1) "sub-key1"
2) "value"
3) "sub-key2"
4) "value2"
127.0.0.1:6379> hdel hash-set sub-key2
(integer) 1
127.0.0.1:6379> hdel hash-set sub-key2
(integer) 0
127.0.0.1:6379> hgetall hash-set
1) "sub-key1"
2) "value"
127.0.0.1:6379> hlen hash-set
(integer) 1

命令

描述

HEXISTS

HEXISTS key-name key:检查给定键是否存在于散列中

HKEYS

HKEYS key-name:获取散列包含的所有键

HVALS

HVALS key-name:获取散列包含的所有值

HINCRBY

HINCRBY key-name key increment:将键key存储的值加上整数increment

HINCRBYFLOAT

HINCRBYFLOAT key-name key increment:将键key存储的值加上浮点数increment

Redis散列高级特性

命令

描述

HEXISTS

HEXISTS key-name key:检查给定键是否存在于散列中

HKEYS

HKEYS key-name:获取散列包含的所有键

HVALS

HVALS key-name:获取散列包含的所有值

HINCRBY

HINCRBY key-name key increment:将键key存储的值加上整数increment

HINCRBYFLOAT

HINCRBYFLOAT key-name key increment:将键key存储的值加上浮点数increment

例子:

代码语言:javascript
复制
conn.hmset('hash-key2', {'short':'hello', 'long': 1000 * '1'})
True
conn.exists('hash-key2')
True
conn.hexists('hash-key2', 'num')
False
conn.hincrby('hash-key2', 'num')
1
conn.hexists('hash-key2', 'num')
True

6.有序集合简介

有序集合也用来存储键值对,但是键值对的键被称为成员(member),每个成员的都是各不相同的;有序集合的值被称为分值(score),分值必须为浮点数。 有序集合时候Rediscover中唯一一个既可以根据成员访问元素,也可以根据分值以及分值的排列顺序访问的元素的结构。

有序集合常见方法:

命令

行为

ZADD

ZADD key-name score member [score meter ...]:将带有给定分值的成员添加到有序集合里面

ZREM

ZREM key-name member [member ...]:从有序集合中移除给定的成员,并返回被移除的成员的数量

ZCARD

ZCARD key-name:返回有序集合包含的成员的数量

ZINCRBY

ZINCRBY key-name increment member:将member成员的分值加上increment

ZCOUNT

ZCOUNT key-name min max:返回分值介于min和ma之间的成员数量

ZRANK

ZRANK key-name member:返回成员member在有序集合中的排名

ZSCORE

ZSCORE key-name member:返回成员member的分值

ZRANGE

ZRANGE key-name start stop [WITHSCORES]:格局有序集合中排名在start和stop之间的成员,如果给定了withscore选项,那么分值也一起返回

例子:

代码语言:javascript
复制
127.0.0.1:6379> zadd zset-key 728 member1
(integer) 1
127.0.0.1:6379> zadd zset-key 982 member0
(integer) 1
127.0.0.1:6379> zadd zset-key 982 member0
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1
1) "member1"
2) "member0"
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member1"
2) "728"
3) "member0"
4) "982"
127.0.0.1:6379> zrangebyscore zset-key 0 800
1) "member1"
127.0.0.1:6379> zrangebyscore zset-key 0 800 withscores
1) "member1"
2) "728"
127.0.0.1:6379> zrem zset-key member1
(integer) 1
127.0.0.1:6379> zrem zset-key member1
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member0"
2) "982"

有序集合中的其他命令

命令

描述

ZREVRANK

ZREVRANK key-name member:返回有序集合中成员member的排名,成员按照分值由由大到小排列

ZREVRANGE

ZREVRANGE key-name start stop:返回有序集合中给定排名范围内的成员,成员按照分值从大到小排列

ZRANGEBYSCORE

ZRANGEBYSCORE key max min :获取有序元素在给定分值范围内的所有元素

ZREVRANGEBYSCORE

ZREVRANGEBYSCORE key max min :获取有序元素在给定分值范围内的所有元素,并按照分值从大到小来排列

ZREMRANGEBYRANK

ZREMRANGEBYRANK key-name start stop:移除有序集合中排名介于start和stop之间的所有成员

ZREMRANGEBYSCORE

ZREMRANGEBYSCORE key-name min max:移除有序集合中分值介于min和max之间的所有成员

ZINTERSTORE

ZINTERSTORE dest-key key-count key [key ...] [WEIGHT weight] [weight ...] [AGGREGATE SUM|MIN|MAX]:对于给定的有序集合执行类似集合的交集运算

ZUNIONSTORE

ZUNIONSTORE dest-key key-count key [key ...] [WRIGHT weight] [weight ...] [AGGREGATE SUM|MIN|MAX]:对于给定的有序集合执行类似集合的并集运算

例子:

代码语言:javascript
复制
conn.zadd('zset-1', 'a', 1, 'b', 2, 'c', 3)
3
conn.zadd('zset-2', 'b', 4, 'c', 1, 'd', 0)
3
conn.zinterstore('zset-i', ['zset-1', 'zset-2'])
2
conn.zrange('zset-i', 0, -1, withscores=True)
[(b'c', 4.0), (b'b', 6.0)]
conn.zunionstore('zset-u', ['zset-1', 'zset-2'], aggregate='min')
4
conn.zrange('zset-u', 0, -1, withscores=True)
[(b'd', 0.0), (b'a', 1.0), (b'c', 1.0), (b'b', 2.0)]
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.02.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Redis中的数据结构
  • 2. 字符串
  • 3. 列表(list)简介
  • 4. 集合简介
  • 5.散列简介
  • 6.有序集合简介
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档