Redis数据结构详解(一)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 原文:Redis数据结构详解(一)前言 Redis和Memcached最大的区别,Redis 除啦支持数据持久化之外,还支持更多的数据类型而不仅仅是简单key-value结构的数据记录。Redis还支持对这些数据类型做更多的服务端操作,从而也能减少网路的IO次数与数据体积,这里也比Memcached要方便与高效,只针对这一点啊,想喷的左上角群喷。
原文: Redis数据结构详解(一)

前言

Redis和Memcached最大的区别,Redis 除啦支持数据持久化之外,还支持更多的数据类型而不仅仅是简单key-value结构的数据记录。Redis还支持对这些数据类型做更多的服务端操作,从而也能减少网路的IO次数与数据体积,这里也比Memcached要方便与高效,只针对这一点啊,想喷的左上角群喷。上篇吹牛逼20分钟教你做memcached大神

Redis主要支持的数据类型有5种:String ,Hash ,List ,Set ,和 Sorted Set。

下面我针对Redis支持的这几种数据类型做详细操作展示,供大家理解记忆。

Redis数据类型String

string类型在redis中是最常见的类型,value存储最大数据量为512M,可以存放json数据,图像数据等等。

下面跟着敲Redis命令操作String类型数据的代码吧。

redis数据写命令Set,相当于数据插入

redis 127.0.0.1:6379> set name zlh   --返回值: ok,说明插入成功。如果当前name存在值则覆盖替换原有的value值。

redis数据读命令Get,获取数据

redis 127.0.0.1:6379> get name   --返回值: "zlh" ,如果当前key没有value值,则返回null

redis数据追加命令Append,追加数据

redis 127.0.0.1:6379> append name ' is my friend'   --返回值:"zlh is my friend"  ,如果当前key的value有值则附加到原有string后面,如果没有则写入。

redis数据删除

redis 127.0.0.1:6379>del name

redis数据读写操作命令GetSet,获取原有value值的同时写入新的value值

1、redis 127.0.0.1:6379>getset name zlh   --返回值:"zlh is my friend",这里返回的是原有name的value值,同时又给name的value设置新值zlh。此时name的值真实值为zlh

2、redis 127.0.0.1:6379>get name  --返回值:zlh ,因为上面getset给name的value设置值为zlh。

redis数据加法计算命令incr,incrby,数据加法运算,incr为+1内置运算,incrby为+n自设n运算

1、redis 127.0.0.1:6379>incr name   ---返回值:“数据不是整型或数据超出64位有符号整形数据范围” ,由于原有name的value为"zlh",所以不能转换为整型,故报异常。

2、redis 127.0.0.1:6379>incr age   ----返回值:1,由于不存在age的key与value值,但是默认age为key值为0进行+1运算。

3、redis 127.0.0.1:6379>incr age   ---返回值:2,由于上一行代码给age赋值为1,这里incr命令进行+1运算,故返回值为2。

4、redis 127.0.0.1:6379>incrby age 10   ---返回值:12 ,因为原有age是2,这里+10故为12。

redis数据减法计算命令decr,decrby, 数据减法运算,decr为-1内置运算,decrby为减n自设n运算

1、redis 127.0.0.1:6379>decr name   --返回值:“数据不是整型或数据超出64位有符号整形数据范围” ,由于原有name的value为"zlh",所以不能转换为整型,故报异常。

2、redis 127.0.0.1:6379>decr age  --返回自:11,因为原有age的value值为12,这里decr是自减1的意思,故为11。

3、redis 127.0.0.1:6379>decrby age 10   --返回值:1,因为原有age为11,这里-10,故为1。

redis获取string长度的命令strlen

redis 127.0.0.1:6379>strlen name   --返回值:3,因为name的value值为zlh,故长度为3,如果该key或者value不存在,则返回0。

redis设置value值并设置过期时间命令setex(单位秒)

redis 127.0.0.1:6379>setex sex 20 male   ---返回值:ok,设置key为sex的value值为male,缓存的过期时间为20s。

redis 127.0.0.1:6379>ddl sex   ---返回值: 剩余过期时间,0为已过期,-1为永不过期。

redis 127.0.0.1:6379>get sex   ---返回值:male,说明此时为没有过期,当已经过期此处返回数据为null。

redis赋值判断原值是否存在,存在不赋值,返回0;不存在才赋值,返回1;命令setnx

redis 127.0.0.1:6379>setnx name Tom  ---返回值:0,因为name的原有value为zlh,存在值则不赋值。

redis 127.0.0.1:6379>gete name  ---返回值:zlh,因为有值,故上面赋值为tom失败,返回0。

redis 127.0.0.1:6379>setnx phone 18501733702   ---返回值:1,赋值成功,因为原来不存在phone的key与value。

redis 127.0.0.1:6379>get phone   ---返回值:18501733702,说明上面的setnx赋值成功。

redis字符串替换赋值,从指定位置开始替换,命令setrange

redis 127.0.0.1:6379>setrange phone 9 123   --返回值:12,12为字符串长度,11位号码变成了12位。因为从第9位开始替换,替换到原有字符串的最后一位还没有替换完毕,所以在最后面添加啦一位设置为3。

redis 127.0.0.1:6379>get phone   ---返回值为:185017337123.

redis 127.0.0.1:6379>set phone  1    ---这里为了下面说下setrange的其他特性,把电话设置为1.

redis 127.0.0.1:6379>setrange phone 3 aaa   ---返回值为:6,因为原有phone的value值为1,不到三位,用0*00替换2位,所以要添加2为才能替换第三位后面的值为aaa。

redis 127.0.0.1:6379>get phone  ---返回值:1\*00\*00aaa。理解下上面的操作就知道这里为什么是这样的返回值了。

redis截取字符串,从下标为n开始截取到n或n+1,类似c#中的substring,命令getrange

redis 127.0.0.1:6379>set phone 18501733701    ----方便下面操作

redis 127.0.0.1:6379>getrange phone  1 5   ---返回值:85017,因为getrange是从下标为1开始截取截取到下标为5,这里包含下标为5的值。

redis 127.0.0.1:6379>getrange phone  0 0  ---返回值:1,从下标为0开始截取,截取到下标为0,包含下标为0。故返回值为1。

redis 127.0.0.1:6379>getrange phone 10 13   --返回值为:1,此号码下标直到10的11位号码,从10开始截取,截到第13位,后2位不存在忽略,只返回第10位。故返回干净的1。

redis批量操作修改及读取string数据,命令mget,批量读取,命令mset,批量赋值,命令msetnx,带事务性的赋值,发现有一个key已经存在,所有事务回归,不做赋值处理操作

redis 127.0.0.1:6379>mset name zlh age 30   ---返回值:ok,这里设置了 key为name和age的value分别为zlh,30

redis 127.0.0.1:6379>mget name zlh      ---返回值:1>zlh  2>30 。

redis 127.0.0.1:6379>msetnx name Jim address China ---返回值为:0,没有做任何修改,因为key为那么已存在。

redis 127.0.0.1:6379>mget name address   ---返回值:1>zlh  2>null

redis 127.0.0.1:6379>msetnx address China,hobbies sports  --返回值为:1,插入成功

redis 127.0.0.1:6379>mget address hobbies   ---返回值:1>China   2>sports

说说windows环境安装与下载

1、上面是扯淡的标题。

2、其它几种数据类型,明晚再写。

3、这里太晚啦,我不写啦,要不死求啦,安装与下载,及redis从入门到精通我会一点点整理上来,希望您能加入左上角的群,我们一起做沟通交流,晚安。 

目录
相关文章
|
3月前
|
存储 缓存 NoSQL
【📕分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
本文解析 Redisson 如何通过 Redis 实现分布式信号量(RSemaphore)与倒数闩(RCountDownLatch),利用 Lua 脚本与原子操作保障分布式环境下的同步控制,帮助开发者更好地理解其原理与应用。
253 6
|
2月前
|
消息中间件 缓存 NoSQL
Redis各类数据结构详细介绍及其在Go语言Gin框架下实践应用
这只是利用Go语言和Gin框架与Redis交互最基础部分展示;根据具体业务需求可能需要更复杂查询、事务处理或订阅发布功能实现更多高级特性应用场景。
275 86
|
4月前
|
存储 缓存 NoSQL
Redis核心数据结构与分布式锁实现详解
Redis 是高性能键值数据库,支持多种数据结构,如字符串、列表、集合、哈希、有序集合等,广泛用于缓存、消息队列和实时数据处理。本文详解其核心数据结构及分布式锁实现,帮助开发者提升系统性能与并发控制能力。
|
2月前
|
存储 消息中间件 NoSQL
Redis数据结构:别小看这5把“瑞士军刀”,用好了性能飙升!
Redis提供5种基础数据结构及多种高级结构,如String、Hash、List、Set、ZSet,底层通过SDS、跳表等实现高效操作。灵活运用可解决缓存、计数、消息队列、排行榜等问题,结合Bitmap、HyperLogLog、GEO更可应对签到、UV统计、地理位置等场景,是高性能应用的核心利器。
|
2月前
|
存储 缓存 NoSQL
Redis基础命令与数据结构概览
Redis是一个功能强大的键值存储系统,提供了丰富的数据结构以及相应的操作命令来满足现代应用程序对于高速读写和灵活数据处理的需求。通过掌握这些基础命令,开发者能够高效地对Redis进行操作,实现数据存储和管理的高性能方案。
115 12
|
2月前
|
存储 消息中间件 NoSQL
【Redis】常用数据结构之List篇:从常用命令到典型使用场景
本文将系统探讨 Redis List 的核心特性、完整命令体系、底层存储实现以及典型实践场景,为读者构建从理论到应用的完整认知框架,助力开发者在实际业务中高效运用这一数据结构解决问题。
|
2月前
|
存储 缓存 NoSQL
【Redis】 常用数据结构之String篇:从SET/GET到INCR的超全教程
无论是需要快速缓存用户信息,还是实现高并发场景下的精准计数,深入理解String的特性与最佳实践,都是提升Redis使用效率的关键。接下来,让我们从基础命令开始,逐步揭开String数据结构的神秘面纱。
|
6月前
|
存储 NoSQL 算法
Redis设计与实现——数据结构与对象
Redis 是一个高性能的键值存储系统,其数据结构设计精妙且高效。主要包括以下几种核心数据结构:SDS、链表、字典、跳跃表、整数集合、压缩列表。此外,Redis 对象通过类型和编码方式动态转换,优化内存使用,并支持引用计数、共享对象和淘汰策略(如 LRU/LFU)。这些特性共同确保 Redis 在性能与灵活性之间的平衡。
|
存储 消息中间件 NoSQL
Redis 数据结构与对象
【10月更文挑战第15天】在实际应用中,需要根据具体的业务需求和数据特点来选择合适的数据结构,并合理地设计数据模型,以充分发挥 Redis 的优势。
244 64
|
存储 NoSQL 算法
「Redis」数据结构与对象
Redis数据结构与对象介绍
148 0

热门文章

最新文章

下一篇
oss云网关配置