Strings类型及操作
String是最简单的类型,一个key对应一个Value,String类型是二进制安全的。Redis的String可以包含任何数据,比如jpg图片或者序列化的对象。
Set
设置Key对应的值为string类型的value.
例如:我们添加一个name=lijie的键值对:
127.0.0.1:6379> set name toto
OK
//获取name的值:
127.0.0.1:6379> get name
"toto"
//再次重新设置name的值:
127.0.0.1:6379> set name totobrother
OK
127.0.0.1:6379> get name
"totobrother"
setnx
设置key对应的值为string类型的value,如果key已经存在,返回0,nx是not exist的意思。
也就是说,使用setnx来设置的时候,如果已经设置过了,返回0,取到的值是原来的值,没有设置过返回1。
127.0.0.1:6379> get name
"totobrother"
127.0.0.1:6379> setnx name totobrother
(integer) 0
127.0.0.1:6379> get name
"totobrother"
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> setnx age2 20
(integer) 1
127.0.0.1:6379> setnx age2 40
(integer) 0
127.0.0.1:6379> get age2
"20"
Setex
设置key对应的值为string类型的value,并指定此键值对应的有效期。
例如:我们添加一个haircolor=red的键值对,并指定有效期为10秒。
[toto@localhost bin]$ ./redis-cli 启动服务端
127.0.0.1:6379> setex haircolor 10 red 通过setex设置指定时间内的key value值有效
OK
127.0.0.1:6379> get haircolor 10秒内的时候有效
"red"
127.0.0.1:6379> get haircolor 10秒后无效了,10秒钟以后这个键会消失,可以重新对其设置。
(nil)
127.0.0.1:6379> setex当不指定时间的时候,表示永久有效。
Setrange
设置指定key的value值的字符串。
例如:我们希望将lijie的126邮箱替换为gmail邮箱。
127.0.0.1:6379> set name lijie@126.com 设置name的值
OK
127.0.0.1:6379> get name 获得name的值
"lijie@126.com"
127.0.0.1:6379> setrange name 6 gmail.com 这里的6表示字符所在的下标,表示从第几个下标开始替换。
(integer) 15 返回的是字符串的长度。
127.0.0.1:6379> get name 获得指定key的对应的值。
"lijie@gmail.com"
127.0.0.1:6379>
mset (批量设置)
一次设置多个key的值成功返回OK表示所有的值都设置了,失败返回0表示没有任何值被设置。
127.0.0.1:6379> mset key1 lijie1 key2 lijie2 批量设置key1和key2
OK
127.0.0.1:6379> get key1
"lijie1"
127.0.0.1:6379> get key2
"lijie2"
127.0.0.1:6379>
msetnx
一次设置多个key的值,成功返回OK表示所有的值设置了。失败返回0表示没有任何值被设置,但是不会覆盖已经存在的key.
127.0.0.1:6379> get key2
"lijie2"
如果一个已经设置过,那么都设置不成功。如果有一个设置成功了,都设置不成功了
127.0.0.1:6379> msetnx key4 lampbrother.net key5 lijie@lampbrother key2 toto
(integer) 0
只有都没有设置过的,才可以进行设置。
127.0.0.1:6379> msetnx key4 lampbrother.net key5 lijie@lampbrother
(integer) 1
127.0.0.1:6379> get key4
"lampbrother.net"
127.0.0.1:6379> get key5
"lijie@lampbrother"
127.0.0.1:6379>
get
获取key对应的string值,如果key不存在返回nil
getset :获取旧值,并设置新值。
设置key的值,并返回key的旧值。
127.0.0.1:6379> getset key6 30
(nil)
127.0.0.1:6379> get key6
"30"
127.0.0.1:6379>
getrange
获取key的value值的子字符串。
127.0.0.1:6379> get key5
"lijie@lampbrother"
127.0.0.1:6379> getrange key5 3 10
"ie@lampb"
127.0.0.1:6379>
mget (批量获取)
一次获取多个key的值,如果对应key不存在,则对应返回nil.
127.0.0.1:6379> mget key1 key2 key3 key4 key5 key6
1) "lijie1"
2) "lijie2"
3) (nil)
4) "lampbrother.net"
5) "lijie@lampbrother"
6) "30"
127.0.0.1:6379>
incr
对key的值做加加操作,并返回新的值。
incrby
同incr类似,加指定值,key不存在时候会设置key,并认为原来的value是0.
127.0.0.1:6379> decr key6
(integer) -1
127.0.0.1:6379> decr key6
(integer) -2
127.0.0.1:6379> incr key6
(integer) -1
127.0.0.1:6379> incr key6
(integer) 0
127.0.0.1:6379> incrby key6 +5
(integer) 5
127.0.0.1:6379> incrby key +5
(integer) 5
127.0.0.1:6379> incrby key6 +5
(integer) 10
127.0.0.1:6379> get key6
"10"
127.0.0.1:6379>
decr
对key的值做减减操作
decrby
同decr类似,减指定值。
127.0.0.1:6379>decr key6
(integer)37
127.0.0.1:6379>decr key6
(integer)36
127.0.0.1:6379>decrby key6 -3
(integer)33
append
给指定key的字符串追加value,返回新字符串值的长度。
append name@li-jie.me
127.0.0.1:6379> get name
"totobrother"
127.0.0.1:6379> append name @li-jie.me
(integer) 21
127.0.0.1:6379> get name
"totobrother@li-jie.me"
127.0.0.1:6379>
strlen(查看字符串的长度)
取指定key的value值的长度。
127.0.0.1:6379> get name
"totobrother@li-jie.me"
127.0.0.1:6379> strlen name
(integer) 21
127.0.0.1:6379>
hashes类型
hashes类型及操作
Redis hash是一个string类型的field和value的映射表。它的添加、删除操作都是0(1)(平均)。hash特别适合用于存储对象。相较于将对象的每个字段存成当个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。
hset(设置hash表)
设置hash field为指定值,如果key不存在,则先创建。
hset hash表名 key值 value值
127.0.0.1:6379> hset myhash field1 hello
(integer) 1
127.0.0.1:6379> hset user:001 name lijie
(integer) 1
通过hget获得值,hget hash表 名称
127.0.0.1:6379> hget user:001 name
"lijie"
127.0.0.1:6379>
hsetnx
设置hash field为指定值,如果key不存在,则先创建。如果存在返回0.
127.0.0.1:6379> hsetnx user:002 name lamp
(integer) 1
127.0.0.1:6379> hget user:002 name
"lamp"
127.0.0.1:6379> hsetnx user:002 name lampbrother //如果已经存在,再设置时设置不成功
(integer) 0
127.0.0.1:6379> hget user:002 name
"lamp"
127.0.0.1:6379>
hmset
同时设置hash的多个field
hmget:获取全部指定的hash field
127.0.0.1:6379> hsetnx user:002 name lampbrother
(integer) 0
127.0.0.1:6379> hget user:002 name
"lamp"
127.0.0.1:6379> hmset user:003 name lijie age 20 sex 1
OK
127.0.0.1:6379> hget user:003 name
"lijie"
127.0.0.1:6379> hget user:003 age
"20"
127.0.0.1:6379> hget user:003 sex
"1"
127.0.0.1:6379> hmget user:003 name age sex
1) "lijie"
2) "20"
3) "1"
127.0.0.1:6379>
hincrby
指定的hash field加上给定值。对某一个键进行自增。
hexists
测试指定field是否存在。
127.0.0.1:6379> hexists user:003 name
(integer) 1 //如果指定字段存在,则返回1,否则返回0
hlen
返回指定hash的field数量。
127.0.0.1:6379> hlen myhash
(integer) 1
127.0.0.1:6379> hlen user:001
(integer) 1
127.0.0.1:6379> hlen user:003
(integer) 3
127.0.0.1:6379>
hdel
删除指定hash的field字段
hkeys:返回hash的所有field
127.0.0.1:6379> hkeys user:003
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379>
hvals:返回hash的所有value.
127.0.0.1:6379> hkeys user:003
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> hvals user:001
1) "lijie"
127.0.0.1:6379> hvals user:002
1) "lamp"
127.0.0.1:6379> hvals user:003
1) "lijie"
2) "20"
3) "1"
127.0.0.1:6379>
hgetall
获取某个hash中全部的field及value.