字符串类型是Redis最基础的数据结构。首先键都是字符串类型,而且 其他几种数据结构都是在字符串类型基础上构建的,所以字符串类型能为其 他四种数据结构的学习奠定基础。
设置值
set key value [ex seconds] [px milliseconds] [nx|xx]
下面操作设置键为hello,值为world的键值对,返回结果为OK代表设置 成功:
127.0.0.1:6379> set hello world
OK
set命令有几个选项:
·ex seconds:为键设置秒级过期时间。
·px milliseconds:为键设置毫秒级过期时间。
·nx:键必须不存在,才可以设置成功,用于添加。
·xx:与nx相反,键必须存在,才可以设置成功,用于更新。
除了set选项,Redis还提供了setex和setnx(它们的作用和ex和nx选项是一样的。):
setex key seconds value
setnx key value
当前键hello不存在:
127.0.0.1:6379> exists hello
(integer) 0
设置键为hello,值为world的键值对:
127.0.0.1:6379> set hello world
OK
因为键hello已存在,所以setnx失败,返回结果为0:
127.0.0.1:6379> setnx hello redis
(integer) 0
因为键hello已存在,所以set xx成功,返回结果为OK:
127.0.0.1:6379> set hello jedis xx
OK
获取值
get key
下面操作获取键hello的值:
127.0.0.1:6379> get hello
"world"
如果要获取的键不存在,则返回nil(空):
127.0.0.1:6379> get not_exist_key
(nil)
批量设置值
mset key value [key value …]
下面操作通过mset命令一次性设置4个键值对:
127.0.0.1:6379> mset a 1 b 2 c 3 d 4
OK
批量获取值
mget key [key …]
下面操作批量获取了键a、b、c、d的值:
127.0.0.1:6379> mget a b c d
1) "1"
2) "2"
3) "3"
4) "4"
如果有些键不存在,那么它的值为nil(空),结果是按照传入键的顺序返回:
127.0.0.1:6379> mget a b c f
1) "1"
2) "2"
3) "3"
4) (nil)
批量操作命令可以有效提高开发效率,假如没有mget这样的命令,要执 行n次get命令需要按照图片方式来执行,具体耗时如下: n次get时间 = n次网络时间 + n次命令时间
使用mget命令后,要执行n次get命令操作只需要按照图2-9的方式来完 成,
具体耗时如下:n次get时间 = 1次网络时间 + n次命令时间
1000次get和1次get对比表
计数
incr key
incr命令用于对值做自增操作,返回结果分为三种情况:
·值不是整数,返回错误。
·值是整数,返回自增后的结果。
·键不存在,按照值为0自增,返回结果为1。
例如对一个不存在的键执行incr操作后,返回结果是1:
127.0.0.1:6379> exists key
(integer) 0
127.0.0.1:6379> incr key
(integer) 1
再次对键执行incr命令,返回结果是2:
127.0.0.1:6379> incr key
(integer) 2
如果值不是整数,那么会返回错误:
127.0.0.1:6379> set hello world
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(自增浮点数):
decr key
incrby key increment
decrby key decrement
incrbyfloat key increment
很多存储系统和编程语言内部使用CAS机制实现计数功能,会有一定的 CPU开销,但在Redis中完全不存在这个问题,因为Redis是单线程架构,任 何命令到了Redis服务端都要顺序执行。
追加值
append key value append
可以向字符串尾部追加值,例如:
127.0.0.1:6379> get key
"redis"
127.0.0.1:6379> append key world
(integer) 10
127.0.0.1:6379> get key
"redisworld"
字符串长度
strlen key
例如,当前值为redisworld,所以返回值为10:
127.0.0.1:6379> get key "redisworld"
127.0.0.1:6379> strlen key (integer)
10
下面操作返回结果为6,因为每个中文占用3个字节:
127.0.0.1:6379> set hello "世界"
OK
127.0.0.1:6379> strlen hello (integer)
6
设置并返回原值
getset key value
getset和set一样会设置值,但是不同的是,它同时会返回键原来的值, 例如:
127.0.0.1:6379> getset hello world
(nil)
127.0.0.1:6379> getset hello redis
"world"
设置指定位置的字符
setrange key offeset value
下面操作将值由pest变为了best:
127.0.0.1:6379> set redis pest
OK
127.0.0.1:6379> setrange redis 0 b
(integer) 4
127.0.0.1:6379> get redis
"best"
获取部分字符串
getrange key start end start和end分别是开始和结束的偏移量,偏移量从0开始计算,例如下面 操作获取了值best的前两个字符。
127.0.0.1:6379> getrange redis 0 1
"be"