Redis系列二:Redis支持的数据类型和使用方法(一)
一、String类型
String类型是二进制安全的,使用String类型缓存一些静态文件,如图片、CSS,可以提高网站的运行速度
1)常用命令
127.0.0.1:6379> set booka "Redis" OK 127.0.0.1:6379> setnx booka "test" (integer) 0 127.0.0.1:6379> get booka "Redis" 127.0.0.1:6379> getset bookb "php" (nil) 127.0.0.1:6379> getset booka "php" "Redis" 127.0.0.1:6379> get booka "php" 127.0.0.1:6379>
set booka "Redis" : 设置key为booka,值为Redis
setnx booka "test":setnx命令,如果booka不存在,则设置key为booka,值为test的string类型的值;如果booka存在则返回0
get booka:获取key为booka的值
getset bookb "php":getset命令,先获取key为bookb的key值,如果没有则返回nil,如果有则将key为bookb的value设置为php
127.0.0.1:6379> mset test1 "hello" test2 "hello2" test3 "hello3" OK 127.0.0.1:6379> get test3 "hello3" 127.0.0.1:6379> get test2 "hello2" 127.0.0.1:6379> get test3 "hello3" 127.0.0.1:6379> mget test1 test2 test3 1) "hello" 2) "hello2" 3) "hello3" 127.0.0.1:6379>
mset 命令:一次设置多个key值,成功返回ok,表示所有值都设置了;失败返回0,表示没有值被设置
mget命令:一次获取多个key值,如果对应的key不存在则返回nil
127.0.0.1:6379> mget test1 test2 test3 1) "hello" 2) "hello2" 3) "hello3" 127.0.0.1:6379> msetnx test3 "msetnx" test4 "hello4" (integer) 0 127.0.0.1:6379> mget test1 test2 test3 test4 1) "hello" 2) "hello2" 3) "hello3" 4) (nil) 127.0.0.1:6379> msetnx test5 "msetnx" test4 "hello4" (integer) 1 127.0.0.1:6379> mget test4 test5 1) "hello4" 2) "msetnx" 127.0.0.1:6379>
msetnx命令:一次设置多个key值,如果key有存在的,返回0;否则返回1
127.0.0.1:6379> set int_key 1 OK 127.0.0.1:6379> get int_key "1" 127.0.0.1:6379> incr int_key (integer) 2 127.0.0.1:6379> get int_key "2" 127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379> get test1 "hello" 127.0.0.1:6379> 127.0.0.1:6379> incr test1 (error) ERR value is not an integer or out of range 127.0.0.1:6379>
incr 命令对key值加1,并返回新值;如果incr不是一个int的value则会返回错误;incr一个不存在的key,则设置key的value为1
decr命令和incr命令想法,对key减一
127.0.0.1:6379> get int_key "2" 127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379> incrby int_key 2 (integer) 4 127.0.0.1:6379> get int_key "4" 127.0.0.1:6379>
incrby 命令,对key值追加一个指定的整数,key不存在时设置key,并认为原来的value为0
decrby命令和incrby相反
二、List类型
list类型指的是key对应的value是一个双向链表结构,所以list类型提供链表支持的所有操作。
127.0.0.1:6379> lpush list_key list_value #向key对应的list头部添加一个字符串 (integer) 1 127.0.0.1:6379> lpush list_key list_value_center #向key对应的list尾部添加一个字符串 (integer) 2 127.0.0.1:6379> 127.0.0.1:6379> llen list_key #返回key对应的list的长度,如果key不存在返回0,如果key对应的类型不是list返回错误 (integer) 2 127.0.0.1:6379> lpop list_key #从list头部删除并返回删除元素 "list_value_center" 127.0.0.1:6379> lpop list_key "list_value" 127.0.0.1:6379> lpop list_key (nil) 127.0.0.1:6379> llen list_key (integer) 0 127.0.0.1:6379> lpush list_key list_value1 (integer) 1 127.0.0.1:6379> lpush list_key list_value2 (integer) 2 127.0.0.1:6379> lpush list_key list_value3 (integer) 3 127.0.0.1:6379> lpush list_key list_value4 (integer) 4 127.0.0.1:6379> lrange list_key 1 2 #返回key为list_key指定区间(1,2)的元素,下标从0开始,负值表示从列表的尾部开始计算,-1表示倒数第一个元素,key不存在返回空列表 1) "list_value3" 2) "list_value2" 127.0.0.1:6379> ltrim list_key 2 3 #截取key为list_key指定区间(2,3)的元素 OK 127.0.0.1:6379> lrange list_key 0 5 1) "list_value2" 2) "list_value1" 127.0.0.1:6379> lset list_key 2 hello #设置key为list_key指定下标2的value为hello (error) ERR index out of range 127.0.0.1:6379> lset list_key 1 hello OK 127.0.0.1:6379> lrange list_key 0 5 1) "list_value2" 2) "hello" 127.0.0.1:6379>
另外列表还有下面几个命令
rpop key:从list尾部删除并返回删除的元素
blpop key1 ... keyn timeout:从左到右扫描 key1 ... keyn ,返回对第一个非空的list进行lpop操作并返回,如果所有的list都是空或者不存在,阻塞timeout秒,timeout为0表示
一直阻塞。阻塞时,如果有其他的客户端对 key1 ... keyn 中任意一个key进行push操作,阻塞解除并返回。如果超时则返回nil
brpop key1 ... keyn timeout:功能与blpop类似,blpop从头部删除,brpop从尾部删除
三、set类型
set类型是一种无序集合。set数据类型可以快速查找元素是否存在,用于记录一些不能重复的数据。如网站用户名不能重复。
127.0.0.1:6379> sadd set_key 1 #添加一个string元素到key为set_key对应的集合中 (integer) 1 127.0.0.1:6379> scard set_key #返回set元素的个数,如果set为空或者key不存在则返回0 (integer) 1 127.0.0.1:6379> sadd set_key 2 (integer) 1 127.0.0.1:6379> scard set_key (integer) 2 127.0.0.1:6379> sismember set_key 3 #判断3是否存在于无序集合set_key中,存在返回1,不存在或者key对应的set集合不存在则返回0 (integer) 0 127.0.0.1:6379> sismember set_key 1 (integer) 1 127.0.0.1:6379> smembers set_key #返回key对应set的所有元素,结果是无序的 1) "1" 2) "2" 127.0.0.1:6379> sadd set_key 3 (integer) 1 127.0.0.1:6379> smembers set_key 1) "1" 2) "2" 3) "3" 127.0.0.1:6379> srem set_key 2 #从set_key对应的集合中移除2这个元素,如果2不存在或者set_key不存在则返回0 (integer) 1 127.0.0.1:6379> smembers set_key 1) "1" 2) "3" 127.0.0.1:6379>
其他命令
spop key:删除并返回key对应的集合中随机一个元素
srandmember key:随机取集合中的一个元素,但不删除元素
smove srckey dstkey member:从scrkey对应的集合中移除member并添加到dstkey对应的集合中
sinter key1 key2 ... key3:返回所有给定key的交集
sinterstore dstkey key1 key2 ... key3:同sinter,并将交集存到dstkey对应的集合中
sunion key1 key2 ... key3:返回所有给定key的并集
sunionstore dstkey key1 key2 ... key3:同sunion,并把并集保存到dstkey 对应的集合中
sdiff key1 key2 ... key3:返回所有给定key的差集
sdiffstore dstkey key1 key2 ... key3:同sdiff ,并把并集保存到dstkey 对应的集合中
Redis系列二:Redis支持的数据类型和使用方法(一)
A PHPer and a Linuxer