redis是一个内存中的key-value型数据库。
也就是说,该数据库中的每条记录,都是由一个key和一个value构成的,其中value有五种类型:字符串(strings)
,散列(hashes)
,列表(list)
,集合(set)
,有序集合(sorted set)
。
不知道各位小伙伴有没有听过memcache这种技术,这种技术也是内存中的key-value型数据库。
与redis的唯一区别就是,memcache的value没有类型之分,而这也是memcache被redis取代的直接原因。
正是因为redis的value类型有这么多种,并且每种类型的value都有不同的处理方法,可以让一些计算发生在服务端,从而减轻客户端的压力。
那么这篇文章我们就来介绍一下redis中五种value类型的基本操作方法。
不过在介绍value的类型之前,需要介绍一下本文的测试工具——redis cli
。
redis cli就是redis中的命令行工具
根据上一篇文章的介绍配置好环境后,在命令行中输入redis-cli
即可进入redis的命令行界面,如下图所示:
所谓“授人以鱼不如授人以渔”,本文在介绍不同的value及其常用方法前,先介绍一个无往不利的命令——help。
就像linux系统中的man
命令,help也提供了各种命令的讲解。
通过这个命令就可以自行查看各种类型的api,以后遇到问题就可以自行解决啦。
在正式介绍不同的value类型之前,先来介绍一个redis中key上的两个属性——type
与encoding
。
这两个属性用来标记value的类型。
其中,type就是我们接下来要介绍的五种类型,而encoding则是更细致的区分value,在string类型的value中就会看到encoding的不同。
这种类型的value的type就会被标记成string,但是encoding会明确的反应value的数据类型,看下面这段命令:
> set k1 1
OK
> type k1
string
> object encoding k1
"int"
> set k2 hello
OK
> type k2
string
> object encoding k2
"embstr"
同样都是string类型的value,encoding却一个是int
,一个是embstr
。
通过上面这段命令我们可以看出,虽然同为string类型的value,具体的类型也会有不同,下面我们就来介绍同为string类型的不同的三种value。
对于一个字符串类型的数据,我们预期能有什么操作呢?
set/get
这两个操作很简单,就是简单的赋值与获取操作。
> SET k1 hello
OK
> GET k1
"hello"
mset/mget
用法与上面的两个命令相同,但是可以同时设置多个key的值,并且是个原子操作,也就是说,如果一个设置失败了,那么整个命令都不会成功。
append
这个命令也是顾名思义,在某个string后面追加一些字符
> append k1 world
(integer) 10
> get k1
"helloworld"
setrange/getrange
这两个操作看上去就不是那么直观了,这个时候就可以利用help
命令来查看这个命令的用法。
> help setrange
SETRANGE key offset value
summary: Overwrite part of a string at key starting at the specified offset
since: 2.2.0
group: string
根据帮助文档,我们就知道,这两个命令是从指定的位置开始重写字符串。
那么我们就能推断出,用法大致如下:
> setrange k1 5 " redis"
(integer) 11
> get k1
"hello redis"
strlen
这个命令也很简单啦,就是得到字符串的长度嘛!
> set k1 "hello world"
OK
> strlen k1
(integer) 11
没错,在redis中,数值类型的value也归类在字符串类型中,并且可以对这种类型的数据进行数值运算。
incr、incrby
这两个操作是我们对数值类型的数据经常进行的操作。
其中,incr
是把数值增一,而incrby
可以指定增加的数值
用法如下:
> set k1 0
OK
> incr k1
(integer) 1
> get k1
"1"
> i