Redis学习笔记之Redis字符串String(五)
特点【转】
字符串类型最大的特点就是单key单value。
string是redis最基本的类型,而且string类型是二进制安全的。
redis的string可以包含任何数据。比如jpg图片或者序列化的对象。从内部实现来看其实string可以看作byte数组,最大上限是1G字节
下面是string类型的定义:
struct sdshdr {
long len;
long free;
char buf[];
};
buf是个char数组用于存贮实际的字符串内容。其实char和c#中的byte是等价的,都是一个字节
len是buf数组的长度,free是数组中剩余可用字节数。
由此可以理解为什么string类型是二进制安全的了。因为它本质上就是个byte数组。当然可以包含任何数据了。
另外string类型可以被部分命令按int处理.比如incr等命令,
redis的其他类型像list,set,sorted set ,hash它们包含的元素与都只能是string类型。
如果只用string类型,redis就可以被看作加上持久化特性的memcached.当然redis对string类型的操作比memcached多很多啊。
常用api
set key:
【格式】set key value
【作用】设置key和value,如果存在可以覆盖
例如:
$: set k1 v1
get key
【格式】get key
【作用】获取某个key的value
例如:
$: set k1 v1
$: get k1 #返回v1
del key
【格式】del key
【作用】删除某个key
例如:
$: set k1 v1
$: del k1
append key value
【格式】append key value
【作用】对value追加内容
例如:
$:set k2 v2
$:append k2 v2
$:get k2 #返回的value=v2v2
strlen key
【格式】strlen key
【作用】获取key对应value的长度
例如:
$: set k2 v2 v2
$: strlen k2 # 4
incr key
【格式】incr key
【作用】对数字类型的value+1操作,如果不是数字类型的报错
例如:
$: set num 1
$: incr num
$: get num # 返回2
decr key
【格式】decr key
【作用】对数字类型的value-1操作,如果不是数字类型的报错
例如:
$: set num 10
$: decr num
$: get num # 返回9
incrby key n
【格式】incrby key n
【作用】对数字类型的value+n操作,如果不是数字类型的报错
例如:
$: set num 1
$: incr num 11
$: get num # 返回12
decrby key m
【格式】decrby key m
【作用】对数字类型的value-m操作,如果不是数字类型的报错
例如:
$: set num 100
$: decr num 45
$: get num # 返回55
getrange key begin end
【格式】getrange key begin end
【作用】截取范围内的字符串[begin,end]
例如:
$:set k2 v2v2
$:getrange k2 1 2 #则返回2v
setrange key index newvalue
【格式】setrange key index newvalue
【作用】从index处用newvalue覆盖旧的value
例如:
$:set k2 v2v2
$:set k2 1 xx
$:get k2 #返回vxx2
setex key time value
【格式】setex key time value
【作用】设置key并且设置过期时间,单位为秒
例如:
$: setex k3 100 v3
$: ttl k3 # 使用ttl key来查看剩余过期时间
setnx key value
【格式】setnx key value
【作用】如果key不存在,设置成功,否则设置失败
例如:
$:del k3
$:setnx k3 v3_new #设置成功
$:setnx k3 vvv3 #设置失败
mget key1 key2 key3 ...
【格式】mget key1 key2 key3
【作用】如果key不存在,设置成功,否则设置失败
例如:
$: set k1 v1
$: set k2 v2
$: set k3 v3
$: mget k1 k2 k3 k4 #key不存在直接返回(nil)
mset key1 value1 key2 value2 ...
【格式】mset key1 value1 key2 value2 ...
【作用】同set key存在则覆盖
例如:
$: mset k1 v11 k2 v22 k3 v33 #可以对上面mget的例子进行优化
$: mget k1 k2 k3 k4 #查看了k1,k2,k3,k4的值
msetnx key1 value1 key2 value2 key3 value3 ...
【格式】msetnx key1 value1 key2 value2 key3 value3 ...
【作用】同setnx,只有key都不存在才成功
例如:
$: del k1
$: del k2
$: del k3
$: del k4
$: msetnx k1 kk1 k2 kk2 k3 kk3 # 成功
$: msetnx k3 vv3 k4 vv4 #失败,k3已经存在了,
$: get k4 # 返回 (nil)
全部API