Redis学习笔记【04】 - 字符串

一、简介

字符串类型是redis最基础的数据结构。首先键都是字符串类型,而其它几种数据结构类型都是在字符串类型基础上构建的,所以字符串类型能为其他四种数据结构的学习奠定基础。

字符串类型的值实际可以是字符串(简单的字符串、复杂的字符串(例如:JSON、XML))、数字(整数、浮点数)、甚至是二进制(图片、音频、视频),但值最大不能超过512MB。

二、命令

1、常用命令

1)设置值

set key value [ex seconds] [px milliseconds] [nx|xx]

下面操作设置键hello,返回结果为OK则代表设置成功:

127.0.0.1:6379> set hello npsee
OK

set命令有几个选项:

  • ex seconds:为键设置秒级过期时间。
  • px milliseconds:为键设置毫秒级过期时间。
  • nx:键必须不存在,才可以设置成功,用于更新。
  • xx:与nx相反,键必须存在,才可以设置成功,用于更新。

除了set选项,redis还提供了setex和setnx两个命令,其作用和ex和nx选项是一样的:

setex key seconds value
setnx key value

例:

2)获取值

get key

如果要获取的键不存在,则返回nil(空)。

3)批量设置值

mset key value [key value ...]

如:

127.0.0.1:6379> mset a 1 b 2 c 3 d 4
OK

4)批量获取值

mget key [key ...]

如:

127.0.0.1:6379> mget a b c d e
1) "1"
2) "2"
3) "3"
4) "4"
5) (nil)

如果有些键不存在,那么它的值为nil,结果是按照传入键的顺序返回

5)计数

incr key

incr命令用于对值做自增操作,返回的结果分为有一种情况:

  • 值不是整数,返回错误。
  • 值是整数,返回自增后的结果。
  • 键不存在,按照值为0自增,返回结果为1。

如:

127.0.0.1:6379> exists key
(integer) 0
127.0.0.1:6379> incr key
(integer) 1
127.0.0.1:6379> incr key
(integer) 2
127.0.0.1:6379> set hello nosee
OK
127.0.0.1:6379> incr hello
(error) ERR value is not an integer or out of range

除了incr命令,redis提供了decr(自减)、incrby(自增指定数字)、decrby(自减指定数字)、incrbyfloat(自增浮点数)。

2、不常用命令

1)追加值

append key value

append可以向字符串尾部追加值,如:

127.0.0.1:6379> get hello
"nosee"
127.0.0.1:6379> append hello 123
(integer) 8
127.0.0.1:6379> get hello
"nosee123"

2)字符串长度

strlen key

如:

127.0.0.1:6379> get hello
"nosee123"
127.0.0.1:6379> strlen hello
(integer) 8

下面操作返回结果6,因为每个中文占用3个字节:

127.0.0.1:6379> set hello '不见'
OK
127.0.0.1:6379> strlen hello
(integer) 6

3)设置并返回原值

getset key value

getset和set一样会设置值,但不同的是,它同时会返回键原来的值,如:

127.0.0.1:6379> getset test no
(nil)
127.0.0.1:6379> getset test see
"no"

4)设置指定位置的字符

setrange key offeset value

下面操作将值由pest变成best:

127.0.0.1:6379> set hello pest
OK
127.0.0.1:6379> setrange hello 0 b
(integer) 4
127.0.0.1:6379> get hello
"best"

5)获取部份字符串

getrange key start end

偏移量从0开始计算,如:

127.0.0.1:6379> get hello
"best"
127.0.0.1:6379> getrange hello 1 2
"es"
3、字符串类型命令时间复杂度
命令时间复杂度
set key valueO(1)
get keyO(1)
del key [key …]O(k),k是键的个数
mset key value [key value …]O(k),k是键的个数
mget key [key …]O(k),k是键的个数
incr keyO(1)
decr keyO(1)
incrby key incrementO(1)
decrby key decrementO(1)
incrbyfloat key incrementO(1)
append key valueO(1)
strlen keyO(1)
setrange key offset valueO(1)
getrange key start endO(n),n是字符串长度,由于获取字符串非常快,所以如果字符串不是很长,可以视同为O(1)

三、内部编码

字符串类型的内部编码有三种类型:

  • int:8个字节的长整形。
  • embstr:小于等于39个字节的字符串。
  • raw:大于39个字节的字符串。

redis会根据当前值的类型和决定使用哪种内部编码实现。

127.0.0.1:6379> set hello 4562
OK
127.0.0.1:6379> object encoding hello
"int"
127.0.0.1:6379> set hello 'hi, noseee!'
OK
127.0.0.1:6379> object encoding hello
"embstr"
127.0.0.1:6379> set hello 'hi, noseee! my name is calvin chan. what is you name?'
OK
127.0.0.1:6379> object encoding hello
"raw"
127.0.0.1:6379> strlen hello
(integer) 53

参考:

《Redis开发与运维》 付磊 & 张益军

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值