Redis(二)操作命令

127.0.0.1值本机IP 6379指端口号

key

EXISTS:查询key值是否存在,返回值为一个Integer类型

1 如果key存在
0 如果key不存在

127.0.0.1:6379> set fff hello  #设置fff为"hello"
OK   #添加成功
127.0.0.1:6379> exists ff1 #查询key为ff1
(integer) 0#不存在
127.0.0.1:6379> EXISTS fff
(integer) 1#存在

EXPIRE:设置key的过期时间(秒),超过时间后,将会自动删除该key。

1 如果成功设置过期时间。
0 如果key不存在或者不能设置过期时间。

127.0.0.1:6379> get fff
"hello"
127.0.0.1:6379> EXPIRE fff 10  #设置过期时间为10秒
(integer) 1					 #设置成功
127.0.0.1:6379> get fff      #查看
"hello"
127.0.0.1:6379> get fff	#10秒过后查看
(nil)				#不存在
查找所有符合给定模式pattern(正则表达式)的 key 。

时间复杂度为O(N),N为数据库里面key的数量。
支持的正则表达模式:
h?llo 匹配 hello, hallo 和 hxllo
h*llo 匹配 hllo 和 heeeello
h[ae]llo 匹配 hello 和 hallo, 但是不匹配 hillo
h[^e]llo 匹配 hallo, hbllo, … 但是不匹配 hello
h[a-b]llo 匹配 hallo 和 hbllo
eg

127.0.0.1:6379> MSET one 1 two 2 three 3 four 4 
OK
127.0.0.1:6379> KEYS *o*
1) "one"
2) "two"
3) "four"
127.0.0.1:6379> KEYS o*
1) "one"
127.0.0.1:6379> KEYS *o
1) "two"
127.0.0.1:6379> KEYS *
1) "three"
2) "one"
3) "two"
4) "four"
ttl:查看还有多少秒过期

-1表示永不过期
-2表示已过期
其他数字表示还有多少秒过期

127.0.0.1:6379> EXPIRE one 11
(integer) 1
127.0.0.1:6379> ttl one
(integer) 6
127.0.0.1:6379> ttl one
(integer) 1
127.0.0.1:6379> ttl one
(integer) -2
127.0.0.1:6379> KEYS *
1) "three"
2) "two"
3) "four"
dbsize 查看当前keys的个数
127.0.0.1:6379> KEYS *
1) "three"
2) "two"
3) "four"
127.0.0.1:6379> dbsize
(integer) 3
type:查看key的类型
127.0.0.1:6379> SET key1 1
OK
127.0.0.1:6379> LPUSH key2 2
(integer) 1
127.0.0.1:6379> SADD key3 3
(integer) 1
127.0.0.1:6379> TYPE key1
string
127.0.0.1:6379> TYPE key2
list
127.0.0.1:6379> TYPE key3
set
FLUSHALL清空所有库中的数据(通杀)

注意:
1.不是当前库,而是所有库
2.这个操作永远不会出现失败

27.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> 
FLUSHDB:清空当前库中的所有数据

这个操作永远不会出现失败

127.0.0.1:6379> KEYS *
1) "key1"
2) "key2"
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> KEYS *
(empty list or set)

string

set:添加键值对;get:查询指定键对应的值
127.0.0.1:6379> set one 1
OK
127.0.0.1:6379> set two 2
OK
127.0.0.1:6379> get one
"1"
APPEND:追加一个值至key末上

返回append后字符串值(value)的长度
如果 key 已经存在,并且值为字符串,那么这个命令会把 value 追加到原来值(value)的结尾。
如果 key 不存在,那么它将首先创建一个空字符串的key,再执行追加操作

127.0.0.1:6379> get one
"1"
127.0.0.1:6379> APPEND one "ni,"
(integer) 4
127.0.0.1:6379> get one
"1ni,"
127.0.0.1:6379> del one
(integer) 1
127.0.0.1:6379> APPEND one "ni,"
(integer) 3
127.0.0.1:6379> APPEND one "hao!!"
(integer) 8
127.0.0.1:6379> get one
"ni,hao!!"
STRLEN:获取值的长度(只对value是字符串)

value不是string类型的就返回错误
返回值:key对应的字符串的长度;为0是key不存在

127.0.0.1:6379> get one
"ni,hao!!"
127.0.0.1:6379> STRLEN one
(integer) 8
127.0.0.1:6379> STRLEN ooo
(integer) 0
setnx :设置一个关键的价值,只有当该键不存在

1 如果key被设置了
0 如果key没有被设置

127.0.0.1:6379> SETNX ooo "hello"
(integer) 1
127.0.0.1:6379> get ooo
"hello"
127.0.0.1:6379> SETNX ooo "world"
(integer) 0
127.0.0.1:6379> get ooo
"hello"
incr:对存储在指定key的数值执行原子的加1操作;decr对存储在指定key的数值执行原子的减1操作

将 key 中储存的数字值增1,只能对数字值操作,如果为空,新增值为1

注意: 由于redis并没有一个明确的类型来表示整型数据,所以这个操作是一个字符串操作。

127.0.0.1:6379> INCR two
(integer) 3
127.0.0.1:6379> GET two
"3"
127.0.0.1:6379>  decr two
(integer) 2
127.0.0.1:6379> GET two
"2
incrby / decrby:将key中数值自定义增加/减少
127.0.0.1:6379> GET two
"2"
127.0.0.1:6379> INCRBY two 5
(integer) 7
127.0.0.1:6379> get two
"7"
127.0.0.1:6379> DECRBY two 5
(integer) 2
127.0.0.1:6379> get two
"2"
msetnx:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

1 如果所有的key被set
0 如果没有key被set(至少其中有一个key是存在的)

127.0.0.1:6379> MSETNX key1 1 key2 2
(integer) 1
127.0.0.1:6379> MSETNX key1 2 key3 3
(integer) 0
127.0.0.1:6379> MGET key1 key2 key3
1) "1"
2) "2"
3) (nil)
GETRANGE:获得值的范围,类似java中的substring

这个命令是被改成GETRANGE的,在小于2.0的Redis版本中叫SUBSTR
下标从0开始
用负的位移来表示从string尾部开始数的下标
超过范围会限制在最后

127.0.0.1:6379> SET mykey "this is beautiful boy"
OK
127.0.0.1:6379> GETRANGE mykey 0 3
"this"
127.0.0.1:6379> GETRANGE mykey -3 -1
"boy"
127.0.0.1:6379> GETRANGE mykey 10 100
"autiful boy"
SETRANGE:覆盖key对应的string的一部分,从指定的offset处开始,覆盖value的长度

用value覆写key所储存的字符串值,从起始位置开始。 SETRANGE 命令会确保字符串足够长以便将 value 设置在指定的偏移量上,如果给定 key 原来储存的字符串长度比偏移量小(比如字符串只有 5 个字符长,但你设置的 offset 是 10 ),那么原字符和偏移量之间的空白将用零字节(zerobytes, “\x00” )来填充

127.0.0.1:6379> SET key1 "hello,world!!"
OK
127.0.0.1:6379> SETRANGE key1 6 "redis"
(integer) 13
127.0.0.1:6379> GET key1
"hello,redis!!"
127.0.0.1:6379> SETRANGE key1 6 beautifulgirl
(integer) 19
127.0.0.1:6379> get key1
"hello,beautifulgirl"
127.0.0.1:6379> SETRANGE key1 30 haha
(integer) 34
127.0.0.1:6379> get key1
"hello,beautifulgirl\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00haha"
setex:设置键的同时设置了过期时间,单位为秒
27.0.0.1:6379> SETEX key2 10 "nihao hai you 10s"
OK
127.0.0.1:6379> get key2
"nihao hai you 10s"
127.0.0.1:6379> get key2
(nil)
getset:自动将key对应到value并且返回原来key对应的value

返回之前的旧值,如果之前Key不存在将返回nil
设计模式

GETSET可以和INCR一起使用实现支持重置的计数功能。举个例子:每当有事件发生的时候,一段程序都会调用INCR给key mycounter加1,但是有时我们需要获取计数器的值,并且自动将其重置为0。这可以通过GETSET mycounter “0”来实现:

127.0.0.1:6379> set ooo 1
OK
127.0.0.1:6379> INCR ooo
(integer) 2
127.0.0.1:6379> GETSET ooo "0"
"2"
127.0.0.1:6379> GET ooo
"0"

list

lpush/rpush:从左边/右边插入一个或多个值

将所有指定的值插入到存于 key 的列表的头部/尾部

127.0.0.1:6379> LPUSH key1 "holle"
(integer) 1
127.0.0.1:6379> LPUSH key1 !
(integer) 2
127.0.0.1:6379> RPUSH key world
(integer) 1
127.0.0.1:6379> RPUSH key1 world
(integer) 3
127.0.0.1:6379> LRANGE key1 0 -1
1) "!"
2) "holle"
3) "world"
lpop/rpop:从左边/右边吐出一个值, 值在键在,值光键亡
127.0.0.1:6379> LPOP key1
"!"
127.0.0.1:6379> LPOP key1
"holle"
127.0.0.1:6379> LPOP key1
"world"
127.0.0.1:6379> LPOP key1
(nil)
rpoplpush < key1>< key2>:从key1列表右边吐出一个值,插到key2列表左边
127.0.0.1:6379> LPUSH key1 zuo
(integer) 1
127.0.0.1:6379> RPUSH key2 you
(integer) 1
127.0.0.1:6379> LPUSH key1 1 2 3 4 5 6 7 8 
(integer) 9
127.0.0.1:6379> RPOPLPUSH key1 key2
"zuo"
127.0.0.1:6379> LRANGE key1 0 -1
1) "8"
2) "7"
3) "6"
4) "5"
5) "4"
6) "3"
7) "2"
8) "1"
127.0.0.1:6379> LRANGE key2 0 -1
1) "zuo"
2) "you"
127.0.0.1:6379> RPOPLPUSH key1 key2
lindex < key> < index>:按照索引下标获得元素(从左到右)
127.0.0.1:6379> LINDEX key1 2
"6"
127.0.0.1:6379> LINDEX key1 0
"8"
linsert< key> before|after < value> < newvalue>:在value的前面(后面)插入newvalue(新输入的值)插入值
127.0.0.1:6379> RPUSH key1 5 4 3 2 1 
(integer) 5
127.0.0.1:6379> LRANGE key1 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> LINSERT key1 before 3 0
(integer) 6
127.0.0.1:6379> LRANGE key1 0 -1
1) "5"
2) "4"
3) "0"
4) "3"
5) "2"
6) "1"
lrem < key> < n> < value>从左边删除n个value(从左到右)

就是从左边删除几个2,几个3……这样的意思

127.0.0.1:6379> LRANGE key1 0 -1
1) "5"
2) "4"
3) "0"
4) "3"
5) "2"
6) "3"
7) "4"
8) "2"
127.0.0.1:6379> LREM key1 2 3
(integer) 2
127.0.0.1:6379> LRANGE key1 0 -1
1) "5"
2) "4"
3) "0"
4) "2"
5) "4"
6) "2"

set

sadd:将一个或多个元素加入到集合 key 当中,已经存在于集合的元素将被忽略;smembers:取出该集合的所有值。

sadd添加的元素不能重复,重复自动略掉

127.0.0.1:6379> sadd key1 1 2 
(integer) 0
127.0.0.1:6379> SMEMBERS key1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> sadd key1 1 2 6
(integer) 1
127.0.0.1:6379> SMEMBERS key1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6379> 
sismember:判断集合key是否为含有该value值

有返回1
没有返回0

127.0.0.1:6379> SISMEMBER key1 4
(integer) 1
127.0.0.1:6379> SISMEMBER key1 9
(integer) 0
127.0.0.1:6379> 
srem:删除集合中的某个元素
127.0.0.1:6379> SMEMBERS key1
1) "1"
2) "2"
3) "3"
4) "5"
5) "6"
127.0.0.1:6379> srem key1 3
(integer) 1
127.0.0.1:6379> SMEMBERS key1
1) "1"
2) "2"
3) "5"
4) "6"
spop:随机吐出几个元素
127.0.0.1:6379> SMEMBERS key1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> spop key1 2
1) "2"
2) "4"
127.0.0.1:6379> SMEMBERS key1
1) "1"
2) "3"
3) "5"
4) "6"
5) "7"
6) "8"
7) "9"
srandmember< key> < n>:随机从该集合中取出n个值。不会从集合中删除
127.0.0.1:6379> SMEMBERS key2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6379> srandmember key2 3
1) "2"
2) "4"
3) "5"
127.0.0.1:6379> SMEMBERS key2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6379> 
sinter < key1> < key2>:返回两个集合交集的元素

key1:1 2 3 4 5
key2 :3 4 5 6 7
交集为:3 4 5

127.0.0.1:6379> SADD key1 1 2 3 4 5 
(integer) 5
127.0.0.1:6379> SADD key2 3 4 5 6 7 
(integer) 5
127.0.0.1:6379> SINTER key1 key2
1) "3"
2) "4"
3) "5"
sunion 返回两个元素的并集元素
127.0.0.1:6379> SUNION key1 key2 
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
sdiff:返回的集合元素是第一个key的集合与后面所有key的集合的差集

key1:1 2 3 4 5
key2 :3 4 5 6 7
key2 中没有key1中的1 2

127.0.0.1:6379> SDIFF key1 key2
1) "1"
2) "2"

hash

hset:给key集合中的field键赋值value; hget:从key集合field取出value
127.0.0.1:6379> hset key1 one 1
(integer) 1
127.0.0.1:6379> hget key1 one
"1"
127.0.0.1:6379> 
hmset:批量设置hash值;
hkeys:查看所有的hash集合的field;
hvals:查看所有的hash集合的value值。
127.0.0.1:6379> hmset key1 two 2 three 3
OK
127.0.0.1:6379> HKEYS key1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> hvals key1
1) "1"
2) "2"
3) "3"

hexists< key>< field>:查看哈希表 key 中,给定域 field 是否存在。
127.0.0.1:6379> HEXISTS key1 one
(integer) 1
127.0.0.1:6379> HEXISTS key1 oooo
(integer) 0
hincrby:为哈希表 key 中的域 field 的值加上增量 increment
127.0.0.1:6379> HINCRBY key1 one 3
(integer) 4
127.0.0.1:6379> hget key1 one
"4"
hsetnx:将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在

1:如果字段是个新的字段,并成功赋值
0:如果哈希集中已存在该字段,没有操作被执行

127.0.0.1:6379> HSETNX key lala la
(integer) 1
127.0.0.1:6379> HGET key lala
"la"
127.0.0.1:6379> HSETNX key lala ll
(integer) 0
127.0.0.1:6379> HGET key lala
"la"

zset

在这里插入图片描述

127.0.0.1:6379> ZADD key1 1 one 
(integer) 1
127.0.0.1:6379> ZADD key1 1 yi 
(integer) 1
127.0.0.1:6379> ZADD key1 2 two 3 three
(integer) 2
127.0.0.1:6379> ZRANGE key1 0 -1 withscores
1) "one"
2) "1"
3) "yi"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"
127.0.0.1:6379> ZRANGEBYSCORE key1 1 2 withscores 
1) "one"
2) "1"
3) "yi"
4) "1"
5) "two"
6) "2"
127.0.0.1:6379> ZRANK key1 two
(integer) 2
127.0.0.1:6379> ZRANK key1 one
(integer) 0
set和mset的区别:

set一次只能设置一个key value
mset一次可以设置多个key value

Redis如何淘汰过期的keys

Redis keys过期有两种方式:被动和主动方式。
具体就是Redis每秒10次做的事情:

1.测试随机的20个keys进行相关过期检测。
2.删除所有已经过期的keys。
3.如果有多于25%的keys过期,重复步奏1.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值