Redis 基础数据结构

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 系列文章基于Redis2.8版本1:Redis学习资料收集2:Redis基础数据结构3:Redis实现分布式锁2.1 String2.1.1 小知识Redis 的字符串是动态字符串,是可以修改的字符串,内部结构实现上类似于Java的ArrayList,需要注意的是字符串最大长度为 512M。

系列文章基于Redis2.8版本
1:Redis学习资料收集
2:Redis基础数据结构
3:Redis实现分布式锁

2.1 String

2.1.1 小知识

Redis 的字符串是动态字符串,是可以修改的字符串,内部结构实现上类似于Java的ArrayList,
需要注意的是字符串最大长度为 512M。

2.1.2 SET GET 赋值,取值
SET key value [EX seconds] [PX milliseconds] [NX|XX]

如果KEY已存在,就覆盖旧值

[EX seconds] 设置键的过期时间  秒 
SET key value EX second == SETEX key second value

[PX milliseconds] 设置键的过期时间 毫秒
SET key value PX millisecond == PSETX key millisecond value

NX  只有在键不存在的时候,才对键进行设置
SET key value NX == SETNX key value

XX 只在键已存在的时候,才对键进行设置

GET key 

返回key所关联的字符串值
2.1.3 MSET MGET 批量操作

同时设置一个或多个key-value

MSET key1 value1 key2 value2 key value3

MGET key1 key2 key3
2.1.4 自增 自减
INCR key 将key存储的数字增1
INCRBY key increment  将key存储的数字增increment
INCRBYFLOAT key increment  将key存储的数字增加浮点数increment
DECR key  将key存储的数字减1
DECRBY key decrement 将key存储的数字减decrement
2.1.5 value字符处理
SETRANGE key offset value  用value参数覆盖给定key 从偏移量offset开始

STRLEN key  返回key所存储的字符串值得长度

GETRANGE key start end  返回key字符串中的子串  -1表示最后个字符

APPEND key value  将value追加到原来的value的末尾
2.1.6 操作
赋值,取值
> set name liuawei
OK
> get name
"liuawei"
> set name liuawei2 NX
(nil)
> get name
"liuawei"
> set exkey exvalue EX 6
OK
> get exkey
"exvalue"
> get exkey
(nil)

自增,自减
> set key 18
OK
> set age 18
OK
> incr age
(integer) 19
> incrby age 5
>(integer) 24
> decr age
(integer) 23
> decrby age 5
(integer) 18
> incrbyfloat age 1.5
19.5

批量操作
> mset key1 value1 key2 value2 key3 value3
OK
> mget key1 key2 key3
1) "value1"
2) "value2"
3) "value3"


value字符串操作

> set str 'hello world'
OK
> setrange str 6 redis
11
> get str
"hello redis"
> strlen str
(integer) 11
> append str 'v2.0'
15
> get str
>"hello redisv2.0"
> getrange str 0 -1
"hello redisv2.0"
> getrange str 0 5
"hello "
> getrange str -4 -1
"v2.0"

2.2 List列表操作

2.2.1 增加,取出元素
LPUSH key value [value...]
将一个或多个值value插入到列表key的头部

LPUSHX key value
将值value插入到列表表头,当且仅当key存在并且是一个列表

LPOP key
移除并返回列表key的头元素

RPUSH kye value [value...]
将一个或多个值value插入到列表key的尾部

RPUSHX
将值value插入到列表key的表尾,当且仅当key存在并且是一个列表

RPOP
移除并返回列表key的微元素
2.2.2 value操作
LSET key index value
将列表key下标为index的元素值设置为value

LTRIM key start stop
让列表保留制定区间内的元素,不在指定区间的元素被删除

LREM key count value
根据参数count的值,移出列表中与参数value相等的元素

LRANGE key start stop
返回列表元素中指定区间内的元素

LLEN key
返回列表key的长度

LINSERT key BEFORE|AFTER pivot value
将值 value插入到列表key当中,位于值pivot之前或之后。

LINDEX key index
返回列表key中,下标为index的
2.2.3 阻塞
BLPOP key [key ...] timeout
列表阻塞式的弹出

BRPOP key [key ...] timeout
BRPOP 是列表的阻塞式(blocking)弹出原语。

2.2.4 特性
RPOPLPUSH source destination

BRPOPLPUSH source destination timeout
2.2.5 操作
右边进左边出:队列
右边进右边出:栈

增加,取出元素:
> lpush list value1
(integer) 3
> del list
(integer) 0
> lpush list value1 value2
(integer) 2
> rpush list value3 value4
(integer) 4
> lrange list 0 -1
1) "value2"
2) "value1"
3) "value3"
4) "value4"

value操作

2.3 hash

2.3.1 设值取值
HSET key field value
将Hash表key中的field的值设置value。

HMSET key field value [field value ...]
同时将多个field-value(域-值)对设置到哈希表key中

HGET key field
返回哈希表 key 中给定域 field 的值。

HGETALL key
返回哈希表 key 中,所有的域和值。

HVALS key
返回哈希表key中所有域的值。

HKEYS key
返回哈希表key中的所有域。
2.3.2 其他操作
HDEL key field [field ...]
删除哈希表key中的一个或多个指定域,不存在的域将被忽略。

HEXISTS key field
查看哈希表key中,给定域 field 是否存在。

HLEN key
返回哈希表 key 中域的数量。

2.4 set集合

2.4.1 添加 移除,遍历 基础操作
SADD key member [member ...]
将一个或多个member元素加入到集合key当中,已经存在于集合的member元素将被忽略。

SPOP key
移除并返回集合中的一个随机元素。

SREM key member [member ...]
移除集合key中的一个和多个元素

SMEMBERS key
返回集合 key 中的所有成员。

SCARD key
返回集合 key 的基数(集合中元素的数量)。

SISMEMBER key member
判断 member 元素是否集合 key 的成员。

2.4.2 集合操作

SDIFF key [ksy1...]
返回集合key的差集

SDIFFSTORE destination key [key ...]
返回集合key的差集并将结果保留在destinatio集合

SINTER key [key ...]
返回集合key的交集

SINTERSTORE destination key [key ...]
返回集合key的交集并将结果赋给destination

SMOVE source destination member
将member元素从source集合移动到destination集合

SRANDMEMBER key [count]
返回集合key里面的一个随机数

SUNION key [key ...]
返回结合key的全集

SUNIONSTORE destination key [key ...]
返回结合key的全集并将结果赋给destination

2.5 zset集合

2.5.1 添加 移除,遍历 基础操作
ZADD key score member [[score member] [score member] ...]
将一个或多个 member元素及其score值加入到有序集key当中。


ZCARD key
返回有序集 key的基数。

ZCOUNT key min max
返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
26天前
|
存储 消息中间件 NoSQL
Redis数据结构:List类型全面解析
Redis数据结构——List类型全面解析:存储多个有序的字符串,列表中每个字符串成为元素 Eelement,最多可以存储 2^32-1 个元素。可对列表两端插入(push)和弹出(pop)、获取指定范围的元素列表等,常见命令。 底层数据结构:3.2版本之前,底层采用**压缩链表ZipList**和**双向链表LinkedList**;3.2版本之后,底层数据结构为**快速链表QuickList** 列表是一种比较灵活的数据结构,可以充当栈、队列、阻塞队列,在实际开发中有很多应用场景。
|
1月前
|
存储 消息中间件 NoSQL
Redis 数据结构与对象
【10月更文挑战第15天】在实际应用中,需要根据具体的业务需求和数据特点来选择合适的数据结构,并合理地设计数据模型,以充分发挥 Redis 的优势。
55 8
|
1月前
|
存储 NoSQL Java
介绍下Redis 的基础数据结构
本文介绍了Redis的基础数据结构,包括动态字符串(SDS)、链表和字典。SDS是Redis自实现的动态字符串,避免了C语言字符串的不足;链表实现了双向链表,提供了高效的操作;字典则类似于Java的HashMap,采用数组加链表的方式存储数据,并支持渐进式rehash,确保高并发下的性能。
介绍下Redis 的基础数据结构
|
1月前
|
消息中间件 存储 缓存
redis支持的数据结构
redis支持的数据结构
32 2
|
26天前
|
存储 NoSQL 关系型数据库
Redis的ZSet底层数据结构,ZSet类型全面解析
Redis的ZSet底层数据结构,ZSet类型全面解析;应用场景、底层结构、常用命令;压缩列表ZipList、跳表SkipList;B+树与跳表对比,MySQL为什么使用B+树;ZSet为什么用跳表,而不是B+树、红黑树、二叉树
|
26天前
|
存储 NoSQL Redis
Redis常见面试题:ZSet底层数据结构,SDS、压缩列表ZipList、跳表SkipList
String类型底层数据结构,List类型全面解析,ZSet底层数据结构;简单动态字符串SDS、压缩列表ZipList、哈希表、跳表SkipList、整数数组IntSet
|
2月前
|
存储 JSON NoSQL
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
这篇文章是关于Redis基本数据结构的学习笔记,包括了String、Hash、Set、List和SortedSet的介绍和常用命令。文章解释了每种数据结构的特点和使用场景,并通过命令示例演示了如何在Redis中操作这些数据结构。此外,还提供了一些练习示例,帮助读者更好地理解和应用这些数据结构。
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
|
1月前
|
NoSQL Redis C++
Redis的实现五:二叉堆的数据结构和TTL、c,c++的实现
这篇文章详细探讨了二叉堆的数据结构及其在C和C++中的实现,特别强调了二叉堆在Redis中实现TTL(生存时间)功能的重要性,并通过代码示例展示了如何在Redis中使用二叉堆来管理键的过期时间。
41 0
|
3月前
|
存储 监控 NoSQL
redis数据结构-HyperLogLog
redis数据结构-HyperLogLog
44 1
|
3月前
|
存储 NoSQL 数据处理
redis数据结构-Bitmaps
redis数据结构-Bitmaps
35 0
下一篇
无影云桌面