Redis五大数据类型
Redis-Key
1.查看当前数据库的key
keys * #返回当前数据库下的所有key
2.设置key
set key value
3.获取key的value
get key #返回value
4.设置key的过期时间
expire key seconds
expire key 10s #设置10s后过期
5.查看key的剩余时间
ttl key #返回剩余时间
6.查看key是否存在
exists key
7.查看key的类型
type key
String(字符串)
1.追加(append)
set key val_0
append key val_1 #追加字符串,如果当前key不存在,则相当于set key
#返回 val_0+val_1
2.获取字符串长度(strlen)
strlen key #返回value的长度
3.value自增自减(incr、decr、incrby、decrby)
incr key #val自增1
decr key #val自减1
#步长增减
incrby key step #val自增step
decrby key step #val自减step
#note
自增自减操作只有value为数字型的字符串时才可以,否则会报错!!
127.0.0.1:6379> set key tyh
OK
127.0.0.1:6379> get key
"tyh"
127.0.0.1:6379> inrc key
(error) ERR unknown command `inrc`, with args beginning with: `key`,
127.0.0.1:6379> incr key
(error) ERR value is not an integer or out of range
4.截取字符串(getrange)
getrange key start end
#示例
127.0.0.1:6379> set age 1234567
OK
127.0.0.1:6379> get age
"1234567"
127.0.0.1:6379> getrange age 0 3 #截取value[0,3]的值
"1234"
127.0.0.1:6379> getrange age 0 -1 #截取整个长度
"1234567"
5.替换指定位置开始的字符串(setrange)
setrange key offset value #offset偏移量
###############################################################
#示例1
127.0.0.1:6379> setrange age 1 xxx #从索引1开始替换
(integer) 7
127.0.0.1:6379> get age
"1xxx567"
#示例2
127.0.0.1:6379> get test
"abcdefg"
127.0.0.1:6379> setrange test c xxx
(error) ERR value is not an integer or out of range
127.0.0.1:6379> setrange test 2 xxx #从索引2开始替换
(integer) 7
127.0.0.1:6379> get set
(nil)
127.0.0.1:6379> get test
"abxxxfg"
#################################################################
6.条件型设置(setex,setnx)
#setex (set with expire) #用于设置过期时间
#setnx (set if not exist) #key不存在就设置
#示例1
127.0.0.1:6379> setex name 20 tyh #设置name 20s后过期
OK
127.0.0.1:6379> get name
"tyh"
127.0.0.1:6379> ttl name
(integer) 12
127.0.0.1:6379> ttl name
(integer) 8
127.0.0.1:6379> ttl name
(integer) 6
127.0.0.1:6379> ttl name
(integer) 4
127.0.0.1:6379> ttl name
(integer) 2
127.0.0.1:6379> ttl name
(integer) 1
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> get name
(nil)
#示例2
127.0.0.1:6379> set key1 2
OK
127.0.0.1:6379> setnx key1 2 #如果key1不存在,就设置key1为2,若存在返回0
(integer) 0
127.0.0.1:6379> setnx key2 2 #若不存在,则设置成功,并返回1
(integer) 1
7.批量操作(mset、mget、msetnx)
mset
mget
msetnx #原子性操作,都成功或都失败
#示例1
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 #批量设置多个值
OK
127.0.0.1:6379> keys *
1) "k2"
2) "k3"
3) "k1"
127.0.0.1:6379> mget k1 k2 k3 #批量获取多个值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> msetnx k1 v1 k4 v4 #批量设置多个值,若有一个key已经存在,则设置失败
(integer) 0
127.0.0.1:6379> get k4
(nil)
8.对象设置(巧妙)
#示例1
127.0.0.1:6379> set user:1:name zhangsan
OK
127.0.0.1:6379> keys *
1) "user:1:name"
#示例2
127.0.0.1:6379> mset archer:1:name coo archer:1:age 12
OK
127.0.0.1:6379> keys *
1) "archer:1:name"
2) "archer:1:age"
9.先get再set
getset
#示例1
127.0.0.1:6379> getset name tyh #先查询再设置,若key不存在,则返回nil,再设置
(nil)
127.0.0.1:6379> get name
"tyh"
127.0.0.1:6379> getset name tyh02 #如果key存在,则返回当前值,再设置;
"tyh"
127.0.0.1:6379> get name
"tyh02"
List
List可以实现堆栈,队列等数据结构
1.列表头部添加value(lpush)
#列表添加元素顺序和栈相似
LPUSH 列表名 value [element] #可以一次放入多个元素
#示例1
127.0.0.1:6379> lpush list1 1
(integer) 1
127.0.0.1:6379> lpush list1 2
(integer) 2
127.0.0.1:6379> lpush list1 3
(integer) 3
127.0.0.1:6379> keys *
1) "list1"
2.获取列表指定范围的值(lrange)
lrange 列表name start end
#示例1
127.0.0.1:6379> lrange list1 0 2 #返回索引[0,2]的值,可以看出存储方式和栈类似FILO
1) "3"
2) "2"
3) "1"
#示例2
127.0.0.1:6379> lrange list1 0 -1 #返回列表中所有元素
1) "3"
2) "2"
3) "1"
3.列表尾部添加元素(rpush)
rpush 列表name value
#示例1
127.0.0.1:6379> rpush list1 4 #将4插入列表尾部
(integer) 4
127.0.0.1:6379> lrange list1 0 -1
1) "3"
2) "2"
3) "1"
4) "4"
4.移除列表元素(lpop、rpop)
lpop 列表name [count] #移除列表头部元素 count默认为1
rpop 列表name [count] #移除列表尾部元素
#示例1
127.0.0.1:6379> lrange list1 0 -1
1) "3"
2) "2"
3) "1"
4) "4"
127.0.0.1:6379> lpop list1 #移除列表头部第一个元素
"3"
127.0.0.1:6379> rpop list1 #移除列表尾部第一个元素
"4"
#示例2
127.0.0.1:6379> lrange list1 0 -1
1) "2"
2) "1"
127.0.0.1:6379> lpop list1 2 #移除列表头部前两个元素
1) "2"
2) "1"
127.0.0.1:6379> lrange list1 0 -1
(empty array)
5.根据索引获取列表中的值(lindex)
lindex 列表name 索引 #索引是从0开始的
#示例1
127.0.0.1:6379> lrange list1 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> lindex list1 0 #获取索引为0的元素
"3"
127.0.0.1:6379> lindex list1 1 #获取索引为1的元素
"2"
6.获取列表长度(llen)
llen 列表name
#示例1
127.0.0.1:6379> lrange list1 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> llen list1 #获取列表长度
(integer) 3
7.根据value删除列表中指定元素(lrem)
lrem key count element #count:次数 element:value的值
#示例1
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> lrem list 1 5 #删除一个5
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "4"
2) "3"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> lrem list 2 3 #删除两个3
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "4"
2) "2"
3) "1"
8.裁剪列表(ltrim)
ltrim key start stop #裁剪索引在[start,stop]的列表
#示例1
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> ltrim list 0 2 #裁剪索引在[0,2]的列表
OK
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
9.移除列表最后一个元素并添加到另一个列表头部(rpoplpush)
rpoplpush source destination #source源列表,destination目标列表
#示例1
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> rpoplpush list list1 #将list中最后一个元素放入list1中
"1"
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
127.0.0.1:6379> lrange list1 0 -1
1) "1"
#示例2
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
127.0.0.1:6379> rpoplpush list list #将list尾部数据放入list头部
"2"
127.0.0.1:6379> lrange list 0 -1
1) "2"
2) "5"
3) "4"
4) "3"
10.列表指定索引更新(lset)
lset key index element
#示例
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> lset list 0 x #将下标为0的列表元素修改为x
OK
127.0.0.1:6379> lrange list 0 -1
1) "x"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> lset list 5 x #下标不存在则报错
(error) ERR index out of range
11.元素插入(linsert)
linsert key before|after pivot element #pivot:目标(列表中的某个元素)
#示例
127.0.0.1:6379> lrange list 0 -1
1) "bye"
2) "good"
127.0.0.1:6379> linsert list before good hehe #在good前插入hehe
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "bye"
2) "hehe"
3) "good"
127.0.0.1:6379> linsert list after hehe dayou #在hehe后插入dayou
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "bye"
2) "hehe"
3) "dayou"
4) "good"
小结
List是通过链表实现的,在头部或尾部更新、插入最快!
Set
1.增(sadd)
1. set中添加元素
sadd key member [member...] #set中添加元素(支持多个)
#示例
127.0.0.1:6379> sadd myset tyh01 tyh02 #在myset里添加两个元素
(integer) 2
127.0.0.1:6379> sadd myset tyh01 #重复元素无法添加,返回0
(integer) 0
127.0.0.1:6379> smembers myset #查询myset中的元素
1) "tyh02"
2) "tyh01"
###########################################################################
2.删(srem、spop)
1.删除指定的元素
srem key member [member..] #删除指定的元素
#示例
127.0.0.1:6379> smembers myset
1) "tyh02"
2) "tyh01"
127.0.0.1:6379> srem myset tyh01 #删除指定的元素,成功返回1
(integer) 1
127.0.0.1:6379> srem myset tyh03 #删除不存在的元素,返回0
(integer) 0
###########################################################################
2.随机删除元素
spop key [count] #随机删除元素,count默认为1
#示例
127.0.0.1:6379> SMEMBERS myset
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> SPOP myset
"3"
127.0.0.1:6379> spop myset
"2"
###########################################################################
3.
3.改
4.查(smembers、sismember、scard、srandmember)
1.查寻set中存在的元素
smembers key #查询set中存在的元素
#示例
127.0.0.1:6379> smembers myset #查询myset中的元素
1) "tyh02"
2) "tyh01"
###########################################################################
2.判断元素是否在set中
sismember key member #判断member是否在set中
#示例
127.0.0.1:6379> SMEMBERS myset
1) "tyh02"
2) "tyh01"
127.0.0.1:6379> sismember myset tyh01 #member存在返回1
(integer) 1
127.0.0.1:6379> sismember myset tyh03 #member不存在返回0
(integer) 0
###########################################################################
3.获取元素个数
scard key #获取set中元素个数
#示例
127.0.0.1:6379> SMEMBERS myset
1) "tyh02"
2) "tyh01"
127.0.0.1:6379> scard myset #获取元素个数
(integer) 2
###########################################################################
4.随机获取元素
srandmember key [count] #count 默认为1
#示例
127.0.0.1:6379> sadd myset 1 2 3 4 5
(integer) 5
127.0.0.1:6379> SRANDMEMBER myset #随机返回一个元素
"5"
127.0.0.1:6379> SRANDMEMBER myset
"4"
127.0.0.1:6379> SRANDMEMBER myset
"3"
127.0.0.1:6379> SRANDMEMBER myset
"2"
127.0.0.1:6379> SRANDMEMBER myset
"4"
127.0.0.1:6379> SRANDMEMBER myset 2 #随机返回两个元素
1) "5"
2) "2"
127.0.0.1:6379> SRANDMEMBER myset 2
1) "2"
2) "4"
5.移动(smove)
1.将set1中的元素移动到set2中
smove source destination member #将source中的元素移动到的destination
#示例
127.0.0.1:6379> SMEMBERS myset
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SMEMBERS myset02
1) "4"
2) "5"
3) "6"
127.0.0.1:6379> SMOVE myset myset02 1 #将myset中的1移动到了myset02
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "2"
2) "3"
127.0.0.1:6379> SMEMBERS myset02
1) "1"
2) "4"
3) "5"
4) "6"
6.集合操作(sdiff、sinter、sunion)
常用于共同关注!
1.差集
sdiff key [key...] #求集合间的差集
#示例
127.0.0.1:6379> SMEMBERS set1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SMEMBERS set2
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> SDIFF set1 set2 #求set1和set2之间的差集
1) "1"
################################################################################
2.交集
sinter key [key..] #求集合间的交集
#示例
127.0.0.1:6379> SMEMBERS set1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SMEMBERS set2
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> SINTER set1 set2 #求set1和set2之间的交集
1) "2"
2) "3"
################################################################################
3.并集
sunion key [key..] #求集合间并集
#示例
127.0.0.1:6379> SMEMBERS set1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SMEMBERS set2
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> sunion set1 set2 #求set1和set2之间的并集
1) "1"
2) "2"
3) "3"
4) "4"
Hash
Hash本质是key-map,操作和string相似
1.设置hash的值(hset)
hset key field value [field value ...] #field:字段名 value:字段值
#示例
127.0.0.1:6379> hset myhash name tyh age 18 #设置myhash中name为tyh,age为18
(integer) 2
127.0.0.1:6379> hget myhash name
"tyh"
2.获取hash中字段的值(hget、hgetall)
hget key filed [filed..] #获取key中field的值
hgetall key #获取key中所有field的值
#示例1
127.0.0.1:6379> hset myhash name tyh age 18
(integer) 2
127.0.0.1:6379> hget myhash name #获取myhash中name的值
"tyh"
#示例2
127.0.0.1:6379> hgetall myhash #获取myhash中所有值,以k-v呈现
1) "name"
2) "tyh"
3) "age"
4) "18"
3.删除hash中指定的字段(hdel)
hdel key field [field..] #删除指定的值
#示例
127.0.0.1:6379> hgetall myhash
1) "name"
2) "tyh"
3) "age"
4) "18"
127.0.0.1:6379> hdel myhash name #删除myhash中name字段
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "age"
2) "18"
4.获取hash中k-v的个数(hlen)
hlen key #返回k-v的个数
#示例
127.0.0.1:6379> hgetall myhash
1) "age"
2) "18"
3) "name2"
4) "ttyh"
127.0.0.1:6379> hlen myhash #返回myhash中k-v的个数
(integer) 2
5.获取hash中所有的字段 、所有值(hkeys、hvals)
hkeys key #获取hash中所有字段
#示例
127.0.0.1:6379> hgetall myhash
1) "age"
2) "18"
3) "name2"
4) "ttyh"
127.0.0.1:6379> hkeys myhash #获取myhash所有字段
1) "age"
2) "name2"
#############################################################
hvals key #获取hash中所有值
#示例
127.0.0.1:6379> hkeys myhash #获取myhash中所有字段
1) "age"
2) "name2"
127.0.0.1:6379> HVALS myhash #获取myhash中所有值
1) "18"
2) "ttyh"
6.判断hash中字段是否存在(hexists)
hexists key field #判断字段是否存在
#示例
127.0.0.1:6379> hgetall myhash
1) "age"
2) "18"
3) "name2"
4) "ttyh"
127.0.0.1:6379> HEXISTS myhash name #判断myhash中name字段是否存在,不存在返回0
(integer) 0
127.0.0.1:6379> HEXISTS myhash age #存在返回1
(integer) 1
7.字段自增自减(hincrby)
hincrby key field increment #increment:步长
#示例
127.0.0.1:6379> hget myshash test1
"3"
127.0.0.1:6379> HINCRBY myshash test1 2 #test1字段值自增2
(integer) 5
127.0.0.1:6379> hget myshash test1
"5"
127.0.0.1:6379> HINCRBY myshash test1 -2 #test1字段值自增-2
(integer) 3
127.0.0.1:6379> hget myshash test1
"3"
8.条件字段设置(hsetnx)
hsetnx key field value #若字段不存在则设置成功,若字段存在则设置失败
#示例
127.0.0.1:6379> hgetall myhash
1) "name1"
2) "tyh"
127.0.0.1:6379> hsetnx myhash name2 haha #设置name2为 haha,name2不存在,设置成功返回1
(integer) 1
127.0.0.1:6379> hsetnx myhash name1 hehe #name1存在,设置失败返回0
(integer) 0
Zset(有序集合)
1.添加成员(zadd)
zadd key [NX|XX] [GT|LT] [CH] [INCR] score member
#optinons
NX:只添加新成员,不更新已存在的老成员
XX:不添加新成员,只更新已存在的老成员
LT:更新新的分值比当前分值小的成员,不存在则新增
GT:更新新的分值比当前分值大的成员,不存在则新增
CH:返回变更成员数量,包括(老成员数值变更+新成员增加),默认情况ZADD返回值只计算新添加成员的数量
INCR:与zincrby功能相同
#note
GT,LT,NX 三者互斥
#示例1
127.0.0.1:6379> zadd myzset 500 tyh 1000 dy 1500 wql #增加3个成员
(integer) 3
127.0.0.1:6379> zadd myzset 500 tyh 1000 dy 1600 wql #默认情况下,返回值只计算新添加成员
(integer) 0
127.0.0.1:6379> zadd myzset ch 500 tyh 1000 dy 1700 wql #带上CH后,老成员的更新被算上
(integer) 1
#示例2
127.0.0.1:6379> zadd myzset 500 tyh 1000 dy 1500 wql
(integer) 3
127.0.0.1:6379> zrange myzset 0 -1 withscores #返回所有成员(含score)默认升序
1) "tyh"
2) "500"
3) "dy"
4) "1000"
5) "wql"
6) "1500"
127.0.0.1:6379> zadd myzset nx 800 tyh 1000 dy 1500 wql 2000000 zhengshuang
(integer) 1
127.0.0.1:6379> zrange myzset 0 -1 withscores #sadd加nx参数,只增加新成员未更新老成员
1) "tyh"
2) "500"
3) "dy"
4) "1000"
5) "wql"
6) "1500"
7) "zhengshuang"
8) "2000000"
2.获取范围内成员(zrange)默认升序
zrange key min max [byscore|bylex] [rev] [limit offset count] [withscores]
#返回索引[min,max]之间的成员 默认升序
#options
min:最小值
max:最大值
rev:降序返回
byscore:等价于srangebyscore, min和max由下表变成score的范围
bylex:等价于srangebylex,min和max变成member字段匹配,前提score相同
limit offset count: 限制返回数据的偏移量及个数
#note
bylex时,min和max要带上"[",并且不能和withscores一起使用
#示例1
127.0.0.1:6379> zadd myzset 500 tyh 1000 dy 100 wql
(integer) 3
127.0.0.1:6379> zrange myzset 0 -1 #升序返回所有成员
1) "wql"
2) "tyh"
3) "dy"
127.0.0.1:6379> zrange myzset 0 -1 withscores #升序返回所有成员,含score
1) "wql"
2) "100"
3) "tyh"
4) "500"
5) "dy"
6) "1000"
127.0.0.1:6379> zrange myzset 0 -1 rev withscores #降序返回所有成员,含score
1) "dy"
2) "1000"
3) "tyh"
4) "500"
5) "wql"
6) "100"
#示例2 --byscore
127.0.0.1:6379> zadd myzset 500 tyh 1000 dy 100 wql
(integer) 3
127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "wql"
2) "100"
3) "tyh"
4) "500"
5) "dy"
6) "1000"
127.0.0.1:6379> zrange myzset 0 -1 rev withscores byscore #返回score在[0,-1]的成员
(empty array)
127.0.0.1:6379> zrange myzset (100 500 byscore withscores #返回score在(100,500]的成员
1) "tyh"
2) "500"
#示例3 ---bylex
127.0.0.1:6379> zadd myzset 0 tyh 0 dy 0 wql #bylex匹配,前提score相同
(integer) 3
127.0.0.1:6379> zrange myzset 0 -1
1) "dy"
2) "tyh"
3) "wql"
127.0.0.1:6379> zrange myzset [a [z bylex #匹配[a-,z-]
1) "dy"
2) "tyh"
3) "wql"
127.0.0.1:6379> zrange myzset [a [w bylex #匹配[a-,w-]
1) "dy"
2) "tyh"
127.0.0.1:6379> zrange myzset [a [wz bylex #匹配[a-,wz-]
1) "dy"
2) "tyh"
3) "wql"
127.0.0.1:6379> zadd myzset 0 wsdw
(integer) 1
127.0.0.1:6379> zrange myzset [a [wz bylex
1) "dy"
2) "tyh"
3) "wql"
4) "wsdw"
3.移除集合成员(zrem)
zrem key member [member..] #移除集合成员
#示例
127.0.0.1:6379> zadd myzset 100 tyh 200 dy 300 wql
(integer) 3
127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "tyh"
2) "100"
3) "dy"
4) "200"
5) "wql"
6) "300"
127.0.0.1:6379> zrem myzset tyh #移除集合中的tyh
(integer) 1
127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "dy"
2) "200"
3) "wql"
4) "300"
4.获取集合长度(zcard)
zcard key #获取集合成员个数
#示例
127.0.0.1:6379> zadd myzset 100 tyh 200 dy 300 wql
(integer) 3
127.0.0.1:6379> zcard myzset #获取集合成员个数
(integer) 3
5.获取区间成员个数(zcount)
zcount key min max #获取区间成员个数
#示例
127.0.0.1:6379> zadd myzset 100 tyh 200 dy 300 wql
(integer) 3
127.0.0.1:6379> zcount myzset 100 300 #获取score[100,300]的成员个数
(integer) 3
127.0.0.1:6379> zcount myzset (100 300 #获取score(100,300]的成员个数
(integer) 2
更多内容详见官方文档