Redis五大数据类型常用命令

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

更多内容详见官方文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值