redis——string类型的设计与实现

Redisstring类型可以保存任何数据,包括图片、视频,是用二进制形式存储的

Redis String无前缀,对于不存在的key都会创建指定的key

命令

效果

备注

set key value

设置对应的keyvalue

 set name lzj

get key

获取对应keyvalue

 get name

setnx key value

如果key已经存在,则不执行并返回0

set if not exists

setex key time value

设置键值对并且设置有效期,单位为s

 setex name 10 lzj

setrange index str

从指定下标开始替换字符(6则从第七个字符开始替换)

剩余的字符串不会被删除

 setrange name 0 L

把首字母大写

mset key1 value1 key2 value2

一次设置多个key的值10×,会覆盖已经存在的key

mset name lzj sex man

mget key1 key2

一次获取多个key的值

 mget name sex

getset

设置key的值,返回key的旧值

 gettest name

getrange key start end

获取子字符串

 getrange name 0 2

incr key

key的值做加加操作,并返回新的值

可以通过负数来实现减法

 incr age

incrby

添加指定的值 

 incrb key 2

decr decrby

 

 

append key value

给指定key的字符串追加value,返回新字符串值的长度

 append name zzzz

strlen key

取指定keyvalue值的长度

 strlen name

 

 



redis中string的实现

redis自己构建了一种名为简单动态字符串(SDS , simple dunamic string)的抽象类型
将其作为redis的默认字符串表示
例: 客户端设置字符串时
set name lzj
键值对的键是一个字符串对象,底层是保存着字符串"name"的SDS
键值对的值也是SDS,保存着"lzj"

SDS的定义

每个sds.h/sdshdr结构表示一个SDS值:
struct sdshdr {
  //记录buf数组已保存字符的个数
  int len;
  //标识buf数组中剩余的空间
  int free;
  //保存字符串的字节数组
  char buf[];
}


SDS遵循C字符串以空字符结尾的惯例,保存空字符('\0')的1字节空间不包含在len里面

SDS的空间分配规则:
1.如果SDS修改后len小于1MB,则free变为修改后的len长度
即原来len==5,修改后len==10,则修改后 SDS = len(10) + free(10) + 1

2.如果SDS修改后len>=1MB,则每次扩展1MB












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值