Redis数据结构和内部编码--字符串

Redis数据结构和内部编码--字符串

一.概念

   字符串类型是redis的基础数据类型。首先,键都是字符串类型。字符串类型的值可以是字符串(简单字符串或者JSON/XML)、数值(整数和浮点数),二进制(图片,音频和视频),但是最大不能超过512MB。

二. 命令

2.1 设置值

(1)      set key value [ex seconds] [pxmillisecons] [nx|xx]

EX seconds –设置过期时间,单位秒

PX milliseconds --设置过期时间,单位毫秒

NX –仅当key不存在时设置成功。失败返回nil。用于添加。

XX –仅当key存在时设置成功。失败返回nil。用于更新

(2)   setnx key value key不存在时设置成功

(3)   setex key second value设置key,value,并指定多少秒后失效

2.2  批量设置值

     msetkey1 value1 key2 value2 …

 

2.3 获取值

get key  如果key存在,返回key对应的value。如果key不存在,返回nil

2.4 批量获取值

mget key1 key2  …   ,结果按照传入键的顺序返回。

 

2.5 计数

(1)incr key

Incr对值做自增操作。其返回值分三种情况:

a.      值不是整数。返回错误

b.      值是整数,返回自增后的结果

c.      值不存在,按照0自增,返回1.

(2)decr key

decr对值做自减操作。其返回值分三种情况:

a. 值不是整数。返回错误

b. 值是整数,返回自减后的结果

c. 值不存在,按照0自减,返回-1.

(3)incrby key num

incrby对值做自增指定数字操作。其返回值分三种情况:

a.  值不是整数。返回错误

b.      值是整数,返回自增指定数字后的结果

c.      值不存在,按照0自增指定数字.

(4)decrby key num

decrby对值做自减指定数字操作。其返回值分三种情况:

a. 值不是整数。返回错误

b. 值是整数,返回自减指定数字后的结果

c. 值不存在,按照0自减指定数字

3.2.1.1.2.6 追加值

append key value在字符串结尾追加指定内容

例如: set a aaa

append a aa

       get a,返回aaaaa.

2.6 返回指定key的值的长度

strlen key 返回指定key的value的字符串长度。

例如: set a aaa

       strlen key,返回3.

2.7 设置指定位置的字符

setrange keyoffset value

例如: set a test

     setrange a 0 b,返回best

    

2.8 获取部分字符串

getrange keystart end

start和end分别是开始和结束的偏移量。从0开始。

三.字符串类型命令时间复杂度

四. 内部编码

   字符串类型的内部编码有3种。Redis会根据当前值的类型和长度选择使用哪种类型编码实现。

(1)      int,8字节长整型

例如:set a 890

     object encoding a,返回int

(2)      embstr,不大于39字节的字符串

例如:set a hello

     object encoding a,返回embstr

(3)      raw,大于39字节的字符串

例如:set a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

object encoding a,返回raw

五. key命名规范

Redis的键名称需要进行设计,用于减少键的冲突,同时提高项目的可维护性。比较推荐的方式是:业务名:对象名:id.

例如mysql数据库名是usercenter,用户表是user,那么对应的键可以是usercenter:user:0001或者是usercenter:user:0001:name来表示,如果键太长可以缩写部分键名,从而减少键的长度避免内存浪费。

知识小贴士:作者尽心运营的知识星球社群【请点击:简道源码&&架构分析 加入】(可添加运营同学WX:wx454876882)持续拉新中...,定期的jdk与核心框架源码解析,主流行业解决方案与架构设计资料查阅与下载尽在其中。帮助行业新人和有志于技术的专业人士体系化的学习源码与系统架构,获取业界知名技术峰会和厂商对外公布的主流业务场景的解决方案。同时这个星球也是一个社群,大家可以在社群中结识有识之士,共同探讨,答疑解惑。希望可以通过这个星球帮助大家每日进步一点点,一年持续365天,共勉

本星球 聚焦于Java源码分析,架构解析。低代码,可扩展和高可用架构设计。帮助你更好地学编程,欢迎想进步的同学!仅精品案例的资料整理即物超所值。让我们大家一起每日进步一点点,你可以:

1. 阅读星球专属的编程知识和优质文章

2.JAVA知识从点和面,深度挖掘。通过点,形成面。提升自身的技术广度和深度。

3. 加入星球专属交流群,帮你找到学习伙伴、获取每日优质文章推送等

4.业界优秀案例资料学习及下载

5. 和伙伴们一起学习打卡,增加动力,共同进步

6.工作、学习和方法论。如何提升软实力,比如写文章、画架构图、技术产品的营销、社区的运营等等。

7.招聘、面试和晋升。如何提前准备面试,有什么套路?如何提升硬实力,少走弯路?

8.提供简历优化服务哟。本人常年招聘,也就面试了1000+程序员和架构师~~

9.解答你的疑问。

10.每日进步一点点(最重要的一点): 让自己与众不同,每天学习1-2小时源码和架构知识,365天后再回首,1年前的自己可能是个SB吧。用通勤的时间让自己成长,让优秀变成一种习惯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大道化简

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值