那么咱们string类应该怎么操作呢,string类型有个 Set
他是设置key对应的值为string类型的value,
如果大家学过memcached的话,对这个方法一定不模式,对某个键的某一个值,
例如:我们添加一个name=lijie的键值对儿,
这首先是什么进入客户端吧,用set方面对咱们的name设置一个值,焦作lijie,
redis 127.0.01:6379> set name lijie
OK
# netstat -tupl | grep 6379 好发现启动了~
大家看到了吗,这个时候6379是不是有端口占用啊,是不是咱们的redis-server这个进程占用着,
说明他已经启动成功,这个时候咱们在进入客户端,进入客户端我们说过上一节课我也给大家讲过,
用咱们的redis-cli吧,这个时候就进入到了咱们的redis客户端,
大家看一下redis客户端呢,进入来以后比较奇怪,
redis 127.0.01:6379>
他首先是一个redis 然后呢,是本机的ip地址,然后冒号对应端口, 最后尖括号,
set name lijie 回车
OK
大家可以看到,这里提示一个OK,代表设置name键,值为lijie,设置成功,
好,那怎么来获取name呢,有set咱们是不是就应该有get啊,大家想也可以想到,
get name 回车
“lijie”
获取到的就是咱们刚才set的name的值吧,set就是对咱们的key,进行一个对应的value,
相对比较简单一些, 这是string类型的set方法,那我在设置name呢,
set name lampbrother
OK
我这个时候再
get name
"lampbrother"
值是不是会覆盖,对把,说明这个name是同一个name,
说明咱们在redis里面同一个键只允许有一个,
一个key对应一个value,Redis的string可以包含任何的数据类型,
我设置了一次name为lijie,然后我又设置了一次把name设置为lampbrother,
如果咱们不想让他覆盖怎么办,咱们用一个方法叫做,setnx
设置key对应的值为string类型的value,如果key已经存在,则返回0,
nx是not exist的意思,
他代表什么意思,如果不存在则插入,则设置吧,如果这个键已经存在呢,不更新吧,
咱们刚才是不是覆盖更新啦,
setnx name lijie
(integer) 0
大家可以看到这里返回一个整型0,并且呢,这个设置不成功,
咱们这个时候再来
get name
"lampbrother"
是不是还是lampbrother没有更改成lijie吧,
所以说咱们的sernx呢会判断咱们的name键是否存在,如果存在则返回一个0,并且,
不设置不更新,如果不存在呢,则设置一个新值,
setnx age 20
(integer) 1
大家可以看到我age键是不是没有设置过啊,这个时候呢,咱们setnx age就会返回为1
这个时候再,
get age
"20"
是不是20返回一个额20
setnx age 40
(integer) 0
是不是返回为0啊,因为我刚才设置过age啦,咱们再来get一下
get age
"20"
是不是还是20啊,没有更新吧,这就是咱们的setnx,
nx记住代表的是not exist什么意思呢,不存在,
首先咱们可以用一个方法叫做setrange
setrange name 6 gmail.com
(integer) 15
6代表下标,
"lijie@gmail.com"第一个字符为0,从第六个字符开始替换,
替换成咱们的gmail.com,可以吧,替换完以后他会给你返回一个字符串的长度,
前面为六个后面为9个总共加起来是15个字符,这里回个你返回一个15个字符,
get mane
"lijie@gmail.com"
然后再get的时候,大家会看到,是不是替换成功啦,
set email lijie@lampbrother.net
OK
还有一个方法是hsetnx跟咱们的setnx方法大同小异,
只不过他是对咱们的哈希表来进行设置把,
hsetnx myhash field "Hello"
(integer) 1
第一次设置的时候返回一个1代表返回成功,
咱们还记得setnx吧,如果你第二次设置的时候,同一个键是不是返回0,
代表设置不成功吧,同样的咱们的hsetnx也一样的,
hsetnx myhash field "Hello"
(integer) 0
hsetnx user:002 name lamp
(integer) 1
hget user:002 name
"lamp"
hsetnx user:002 name lampbrother
(integer) 0
返回为0代表此时咱们设置不成功,这个时候咱们再来get一下,
hget user:002 name
“lamp”
看设置成功了没有,没有设置成功吧,还是咱们刚才的lamp吧,
说明咱们的hsetnx跟咱们的setnx是一样的,
set是不是有mset啊,
那么hset也有hmset,也是批量设置,
hmset myhash field1 "Hello" field2 world
OK
hmset user:003 name lijie age 20 sex 1
OK
这个时候呢,咱们看到返回一个OK,代表咱们对user:003这个哈希表,
里面对谁,对咱们的name,对咱们的age,对咱们的sex均设置成功,
hget user:003 name
"lijie"
hget user:003 age
"20"
hget user:003 sex
"1"
说明批量设置成功,
接下来看下还有什么hget这不用说了吧,获取咱们哈希表里面的某一个字段,
hmget呢是获取里面的所有键吧,
hmget user:003 name age sex
1) "lijie"
2) "20"
3) "1"
大家看这样子是不是批量返回啊,这是咱们的hmget
那么还有咱们的hincrby跟咱们的incrby是一个意思,
对咱们的某一个键进行自增,
hincrby user:003 age 5
(integer) 25
hget user:003 age
"25"
我再获取一下是不是返回25,最终返回25,跟咱们的incr是相似的,
这是咱们的hincrby
那么咱们的哈希里面还有一个方法焦作hexists,
测试制定的field是否存在,
代表你这个哈希表里面的字段是否存在,
hexists user:003 age
(integer) 1
age一定是存在的吧,看返回一个1,
hexists user:001 sex
(integer) 0
user:001里面是没有sex的,来看一下是不是返回一个0
这是是来判断咱们哈希表里面的某一个字段,是否存在的方法,