string
这是最简单Redis类型。如果你只用这种类型,Redis就像一个可以持久化的memcached服务器(注:memcache的数据仅保存在内存中,服务器重启后,数据将丢失)。
get key | 获取对应键的值 |
set key value | 设置对应键的值 |
del key | 删除对应键值 |
incr key | 指定键的值自增1,如果Key不存在,自增后get(key)=1 |
decr key | 指定键的值自减1,如果Key不存在,自减后get(key)=-1 |
setnx key value | key不存在时,才生效 |
set key value xx | key存在时,才生效 |
mset k1 v1 k2 v2…kn vn | 设置多个键值对 |
getset key newValue | 设置对应Key为newValue,同时返回旧的value |
append key value | 将value追加到旧的value |
strlen key | 返回字符串的长度(注意中文) |
incrbyfloat key 3.5 | key对应的值加3.5 |
getrange key start end | 获取字符串指定下标所有的值(下标从0开始) |
setrange key index value | 设定指定下标所对应的值 |
通常用SET command 和 GET command来设置和获取字符串值
> set mykey somevalue
OK
> get mykey
"somevalue"
当key存在时SET会失败,或相反的,当key不存在时它只会成功
> set mykey newval nx
(nil)
> set mykey newval xx
OK
虽然字符串是Redis的基本值类型,但你仍然能通过它完成一些有趣的操作。例如:原子递增:
> set counter 100
OK
> incr counter
(integer) 101
> incr counter
(integer) 102
> incrby counter 50
(integer) 152
INCR 命令将字符串值解析成整型,将其加一,最后将结果保存为新的字符串值,类似的命令有INCRBY, DECR 和 DECRBY。实际上他们在内部就是同一个命令,只是看上去有点儿不同。
INCR是原子操作意味着什么呢?就是说即使多个客户端对同一个key发出INCR命令,也决不会导致竞争的情况。例如如下情况永远不可能发生:『客户端1和客户端2同时读出“10”,他们俩都对其加到11,然后将新值设置为11』。最终的值一定是12,read-increment-set操作完成时,其他客户端不会在同一时间执行任何命令。
对字符串,另一个的令人感兴趣的操作是GETSET命令,行如其名:他为key设置新值并且返回原值。这有什么用处呢?例如:你的系统每当有新用户访问时就用INCR命令操作一个Redis key。你希望每小时对这个信息收集一次。你就可以GETSET这个key并给其赋值0并读取原值。
为减少等待时间,也可以一次存储或获取多个key对应的值,使用MSET和MGET命令:
> mset a 10 b 20 c 30
OK
> mget a b c
1) "10"
2) "20"
3) "30"
MGET 命令返回由值组成的数组。
为减少等待时间,也可以一次存储或获取多个key对应的值,使用MSET和MGET命令:值可以是任何种类的字符串(包括二进制数据),例如你可以在一个键下保存一副jpeg图片。值的长度不能超过512 MB。
修改或查询键空间
使用EXISTS命令返回1或0标识给定key的值是否存在
使用DEL命令可以删除key对应的值,DEL命令返回1或0标识值是被删除(值存在)或者没被删除(key对应的值不存在)。
> set mykey hello
OK
> exists mykey
(integer) 1
> del mykey
(integer) 1
> exists mykey
(integer) 0
TYPE命令可以返回key对应的值的存储类型:
> set mykey x
OK
> type mykey
string
> del mykey
(integer) 1
> type mykey
none
Redis超时:数据在限定时间内存活
TTL命令用来查看key对应的值剩余存活时间。
在介绍复杂类型前我们先介绍一个与值类型无关的Redis特性:超时。你可以对key设置一个超时时间,当这个时间到达后会被删除。精度可以使用毫秒或秒。
> set key some-value
OK
> expire key 5
(integer) 1
> get key (immediately)
"some-value"
> get key (after some time)
(nil)
上面的例子使用了EXPIRE来设置超时时间(也可以再次调用这个命令来改变超时时间,使用PERSIST命令去除超时时间 )。我们也可以在创建值的时候设置超时时间:
> set key 100 ex 10
OK
> ttl key
(integer) 9
应用场景:String是最常用的一种数据类型,普通的key/ value 存储都可以归为此类.即可以完全实现目前 Memcached 的功能,并且效率更高。还可以享受Redis的定时持久化,操作日志及 Replication等功能。除了提供与 Memcached 一样的get、set、incr、decr 等操作外,Redis还提供了下面一些操作:
获取字符串长度
往字符串append内容
设置和获取字符串的某一段内容
设置及获取字符串的某一位(bit)
批量设置一系列字符串的内容