Redis的常用命令

Redis的常用命令

连接redis

redis-cli.exe  -h  127.0.0.1  -p  6379

选择第1个数据库(redis共有16个数据库,默认选择第0个数据库)

select 1

清除当前数据库

flushdb

清除所有数据库

flushall

取出所有的key

keys *

设置过期时间(单位秒)

expire name 60

查看剩余时间

当 key 不存在时,返回-2,当key存在但没有设置剩余生存时间时,返回 -1

ttl name

查看是否存在某个key 返回0表示不存在,1存在

exists name

删除

del name

查看类型

type name

String

存值

set name xiaoming

取值

get name

只有在key不存在时才设置key的值,如果已经存在,则不设置。

setnx key value

设置key的过期时间(秒)以及它的值

setex name 30 xiaoming

截取字符串

用于获取存储在指定key中字符串的子字符串,字符串的截取范围由start(从0开始) 和 end 两个偏移量决定

getrange key start end

getset命令用于设置指定key的值,并返回key的旧值,当key不存在时,返回nil

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dH9dpN8v-1612085959838)(file://C:/Users/29804/AppData/Roaming/Typora/typora-user-images/image-20210124170920018.png?lastModify=1611479357)]

获取字符串长度

strlen key

删除key

del key

追加字符串

如果key存在,则追加字符串,如果key不存在,则相当于set

append key 追加的字符串
自增/自减(i++/i–)

incr命令将key中存储的数字值加1。如果key不存在,那么key的值会先被初始化为0,然后在执行incr操作

incr key

incrby命令将key中存储的数字加上指定的增量值

incrby  key  增量值

decr命令将key中存储的数字减1

decr key

decrby命令将key中存储的数字减去指定的值

decrby key 减值

应用场景

  1. string通常用于保存单个字符串或json字符串数据

  2. 因string是二进制安全的,所以你完全可以把一个图片文件的内容作为字符串来存储

  3. 计数器(常规计数:点赞数、粉丝数,关注,取消关注等)

  4. incr等指令本身具有原子操作的特性,所有我们完全可以利用redis的incr、incrby、decr、decrby等指令来实现原子计数的效果。假如在某种场景下3个客户端同时读取了mynum的值(为2),然后对其同时进行了加1的操作,那么mynum的值最后一定5。不少网站利用了redis的这个特性来实现业务上的统计计数需求。

List

127.0.0.1:6379> lpush list one two threew  #创建一个List集合并从头部插入三条数据
(integer) 3
127.0.0.1:6379> lrange list 0 1            #获取坐标为0和1的两个元素
1) "threew"
2) "two"
127.0.0.1:6379> rpush list right           #从尾部插入一个元素
(integer) 4
127.0.0.1:6379> lrange list 0 -1           #获取list集合中的所有元素
1) "threew"
2) "two"
3) "one"
4) "right"
#########################################################################################################
127.0.0.1:6379> lrange list 0 -1           #获取list集合中的所有元素
1) "threew"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> lpop list				   #从左边删除一个元素
"threew"
127.0.0.1:6379> rpop list                  #从右边删除一个元素
"right"
127.0.0.1:6379> lrange list 0 -1		   
1) "two"
2) "one"

#########################################################################################################
127.0.0.1:6379> lrange list 0 -1		   
1) "two"
2) "one"
127.0.0.1:6379> lindex list 0			   #通过下标获取元素
"two"
127.0.0.1:6379> lindex list 1			   
"one"

##########################################################################################################
127.0.0.1:6379> lrange list 0 -1		   
1) "threew"
2) "two"
3) "one"
127.0.0.1:6379> llen list				   #获取List集合的长度
(integer) 3

##########################################################################################################
127.0.0.1:6379> lpush list threew  
(integer) 4
127.0.0.1:6379> lrange list 0 -1		
1) "threew"
2) "threew"
3) "two"
4) "one"
127.0.0.1:6379> lrem list 1 one            #移除List中指定个数的one
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "threew"
2) "threew"
3) "two"
127.0.0.1:6379> lrem list 2 threew         #移除List中指定个数的threew
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "two"
127.0.0.1:6379>

##########################################################################################################
127.0.0.1:6379> lpush list hello1 hello2 hello3 hello4
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "hello4"
2) "hello3"
3) "hello2"
4) "hello1"
127.0.0.1:6379> ltrim list 1 2			   	#根据下标截取list中的值,这个list被改变了,只剩下截取的元素了
OK
127.0.0.1:6379> lrange list 0 -1
1) "hello3"
2) "hello2"


###########################################################################################################
127.0.0.1:6379> lpush mylist hello hello1 hello2 hello3
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "hello3"
2) "hello2"
3) "hello1"
4) "hello"
127.0.0.1:6379> rpoplpush mylist myorherlist #移除列表最后一个元素,将它移动到另外一个集合
"hello"
127.0.0.1:6379> lrange mylist 0 -1   #查看原来的列表
1) "hello3"
2) "hello2"
3) "hello1"
127.0.0.1:6379> lrange myorherlist 0 -1     #查看目标列表
1) "hello"

###########################################################################################################

127.0.0.1:6379> lpush list value1   #向list集合中添加一个值
(integer) 1
127.0.0.1:6379> lrange list 0 0		#获取list集合下标0的元素
1) "value1"
127.0.0.1:6379> lset list 0 item	#设置list中下标为0的元素的值
OK
127.0.0.1:6379> lrange list 0 0		#获取list集合下标0的元素
1) "item"
127.0.0.1:6379> lset list 1 other   #如果不存在就会报错
(error) ERR index out of range

##########################################################################################################
127.0.0.1:6379> rpush mylist hello word   
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "word"
127.0.0.1:6379> linsert mylist before word other	#向mylist中中word元素的前面插入一个元素other
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "other"
3) "word"
127.0.0.1:6379> linsert mylist after word new		#向mylist中中word元素的后面插入一个元素new
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "other"
3) "word"
4) "new"

小结

  • 他实际上是一个链表,before Node after ,left,right都可以插入值
  • 如果key不存在,创建新的链表
  • 如果key存在,新增内容
  • 如果移除了所有值,空链表,也代表不存在!
  • 在两边插入或者改动值,效率最高!中间元素,相对来说效率相对来说效率会低一点

消息排队!消息队列(Lpush Rpop)栈(Lpush,Lpop)

Set

########################################################################################################
127.0.0.1:6379> sadd myset hello         #set集合中添加元素 不能添加重复的元素
(integer) 1
127.0.0.1:6379> sadd myset ruiyi yangkang   #set集合中添加多个元素
(integer) 2
127.0.0.1:6379> smembers myset			#查看指定set集合中的值
1) "hello"
2) "ruiyi"
3) "yangkang"
########################################################################################################
127.0.0.1:6379> sismember myset hello	#判断元素是否存在,如果存在返回1,如果不存在返回0
(integer) 1
127.0.0.1:6379> sismember myset word
(integer) 0
########################################################################################################
127.0.0.1:6379> scard myset		#获取set集合中的元素个数
(integer) 3
########################################################################################################
127.0.0.1:6379> srem myset hello #移除set中指定的元素
(integer) 1
127.0.0.1:6379> srem myset word	 #元素为空则移除失败
(integer) 0
########################################################################################################
127.0.0.1:6379> smembers myset
1) "hello2"
2) "hello"
3) "ruiyi"
4) "yangkang"
127.0.0.1:6379> srandmember myset	#随机抽出一个元素
"hello"
127.0.0.1:6379> srandmember myset   #随机抽出一个元素
"yangkang"
127.0.0.1:6379> srandmember myset 2 #随机抽出指定个数的元素
1) "hello"
2) "yangkang"
########################################################################################################
127.0.0.1:6379> smembers myset
1) "hello2"
2) "hello"
3) "ruiyi"
4) "yangkang"
127.0.0.1:6379> spop myset			#随机删除一个元素
"ruiyi"
127.0.0.1:6379> spop myset			#随机删除一个元素
"yangkang"
#########################################################################################################
127.0.0.1:6379> sadd myset hello set1 ruiyi 
(integer) 3
127.0.0.1:6379> sadd myset2 set2
(integer) 1
127.0.0.1:6379> smove myset myset2 ruiyi #将ruiyi从myset中移动到myset2中
(integer) 1
127.0.0.1:6379> smembers myset
1) "hello"
2) "set1"
127.0.0.1:6379> smembers myset2
1) "set2"
2) "ruiyi"
#########################################################################################################
127.0.0.1:6379> sadd key1 a b c
(integer) 3
127.0.0.1:6379> sadd key2 c d e
(integer) 3
127.0.0.1:6379> sdiff key1 key2 #差集
1) "a"
2) "b"
127.0.0.1:6379> sinter key1 key2 #交集  共同好友(可以这样实现)
1) "c"
127.0.0.1:6379> sunion key1 key2 #并集
1) "e"
2) "c"
3) "d"
4) "b"
5) "a"

微博,将A用户的所有好友放在一个set集合中,将他的粉丝也放在一个集合中

共同关注,共同爱好,共同好友,推荐好友!(六度分割理论)

Hase(哈希)

Map集合,key-map这个值是一个map集合!本质和String类型没有太大的区别

######################################################################################################
127.0.0.1:6379> hset myhash field1 ruiyi  	#set一个具体的key-value
(integer) 1
127.0.0.1:6379> hmset myhash field2 yangkang field3 xinxin  #set多个key-value
OK
127.0.0.1:6379> hmget myhash field1   #通过key获取value
1) "ruiyi"
127.0.0.1:6379> hmget myhash field1 field2	#通过多个key获取多个value
1) "ruiyi"
2) "yangkang"
127.0.0.1:6379> hgetall myhash  #获取所有的key和value
1) "field1"
2) "ruiyi"
3) "field2"
4) "yangkang"
5) "field3"
6) "xinxin"
######################################################################################################
127.0.0.1:6379> hgetall myhash	#获取所有的key和value
1) "field1"
2) "ruiyi"
3) "field2"
4) "yangkang"
5) "field3"
6) "xinxin"
127.0.0.1:6379> hdel myhash field1	#删除指定的key
(integer) 1
127.0.0.1:6379> hgetall myhash   #获取所有的key和value
1) "field2"
2) "yangkang"
3) "field3"
4) "xinxin"
########################################################################################################
127.0.0.1:6379> hmset myhash field1 ruiyi field2 yangkang field3 hello #批量set多个key-value
OK
127.0.0.1:6379> hgetall myhash	#获取指定hash的所有key-value
1) "field1"
2) "ruiyi"
3) "field2"
4) "yangkang"
5) "field3"
6) "hello"
127.0.0.1:6379> hlen myhash  #查看指定hash集合的长度
(integer) 3
########################################################################################################
127.0.0.1:6379> hexists myhash field1 #判断指定的hash集合中的key是否存在(存在返回1,不存在返回0)
(integer) 1
127.0.0.1:6379> hexists myhash field4 #判断指定的hash集合中的key是否存在(存在返回1,不存在返回0)
(integer) 0
########################################################################################################
127.0.0.1:6379> hkeys myhash #获取指定集合的所有的key
1) "field1"
2) "field2"
3) "field3"
127.0.0.1:6379> hvals myhash #获取指定集合的所有的value
1) "ruiyi"
2) "yangkang"
3) "hello"
########################################################################################################
127.0.0.1:6379> hmset myhash field4 5  #设置一个值为数值类型的key
OK
127.0.0.1:6379> hincrby myhash field4 1 #给指定的hash集合的指定key的value增加指定的值
(integer) 6
127.0.0.1:6379> hincrby myhash field4 -1  #给指定的hash集合的指定key的value增加指定的值
(integer) 5
127.0.0.1:6379> hsetnx myhash field5 hello #如果key不存在就设置一个值,如果key存在就设置失败
(integer) 1
127.0.0.1:6379> hsetnx myhash field5 word  #如果key不存在就设置一个值,如果key存在就设置失败
(integer) 0

hash存变更的数据如:user name age ,尤其是用户信息等经常变更的信息

Zset(有序集合)

在set的基础上,添加一个值,set k1 v1 zset k1 score1 1

127.0.0.1:6379> zadd myset 1 one   #向myset中添加一个值
(integer) 1 
127.0.0.1:6379> zadd myset 2 two 3 three   #向myset中添加多个值
(integer) 2
127.0.0.1:6379> zrange myset 0 -1	#获取myset中的值
1) "one"
2) "two"
3) "three"
######################################################################################################
127.0.0.1:6379> zadd salary 3000 ruiyi 20000 yangkang 5000 lisi  #添加三个用户信息
(integer) 3
127.0.0.1:6379> zrangebyscore salary -inf +inf  #查询score在负无穷大到正无穷大之间的用户进行从小到大排序
1) "ruiyi"
2) "lisi"
3) "yangkang"
127.0.0.1:6379> zrevrange salary 0 -1    #从大到小进行排序
1) "yangkang"
2) "lisi"
3) "ruiyi"
127.0.0.1:6379> zrangebyscore salary 0 10000   #查询score在0到10000之间的用户进行从小到大排序
1) "ruiyi"
2) "lisi"
127.0.0.1:6379> zrangebyscore salary -inf +inf withscores #查询score在0到10000之间的用户,以及score进行从小到大排序
1) "ruiyi"
2) "3000"
3) "lisi"
4) "5000"
5) "yangkang"
6) "20000"

##########################################################################################################
127.0.0.1:6379> zrange salary 0 -1   #查询指定集合内的所有元素
1) "ruiyi"
2) "lisi"
3) "yangkang"
127.0.0.1:6379> zrem salary lisi   #删除指定元素
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "ruiyi"
2) "yangkang"
##########################################################################################################
127.0.0.1:6379> zrange salary 0 -1 
1) "ruiyi"
2) "yangkang"
127.0.0.1:6379> zcard salary #获取指定集合中的个数
(integer) 2
#########################################################################################################
127.0.0.1:6379> zadd myset 1 hello 2 ruiyi 3 yangkang 
(integer) 3
127.0.0.1:6379> zcount myset 1 3 #获取指定区间的成员数量
(integer) 3
127.0.0.1:6379> zcount myset 1 2
(integer) 2
127.0.0.1:6379>  

案例思路:set排序 存储班级成绩表,工资表排序!

普通消息,1,重要消息2,带权重进行判断!

排行榜应用实现,取Top N测试

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值