Redis系列(3)- cli常用命令

在学习redis命令前,先了解一下以下redis的特性,

  • redis是非关系型数据库,它可以存储key和5种不同类型的值之间的映射;
  • redis的命令不区分大小写,但数据的key是区分大小写的,redis中的所有操作全是原子操作,它整个架构被实现成单线程;
  • redis的数据类型不支持数据类型嵌套,基本全是字符串,比如集合类型的元素不能是另一个集合或是散列表等;
  • 在redis中每个key都属于一个明确的数据类型,如通过hset建立的是散列类型,set建立的是字符串类型,如果使用一种数据类型的命令操作另一种数据类型的key会提示错误:”ERR Operation againset a key holding the wrong kind of value”;

以下所有操作可以在GUI工具或是redis-cli交互终端中执行,交互终端进入方式,需要先进入到/usr/local/Cellar/redis/6.2.6/bin目录下:

//本地连接
./redis-cli

//退出连接,可在交互窗口中直接输入exit
127.0.0.1:6379>exit

//远程连接,命令格式【./redis-cli -h IP -p PORT】 ,比如:
./redis-cli -h 127.0.0.1 -p 6379

节点操作

连接命令

  • quit:关闭连接(connection)
  • auth:简单密码认证
  • ping:回复为PONG正常
  • help cmd: 查看cmd帮助,例如:help quit
  • select index:选择数据库,从0开始,默认为16个数据库
  • info:它有大量的参数用于检查redis服务器的状态

持久化命令

  • save:将数据同步保存到磁盘RDB文件中,备份未完成前会阻塞客户端的请求
  • bgsave:将数据异步保存到磁盘RDB文件中,复制一个新进程来备份数据
  • lastsave:返回上次成功将数据保存到磁盘的Unix时戳
  • shundown:将数据同步保存到磁盘,然后关闭服务
  • bgrewriteaof:执行AOF重写
  • slowlog get:得到当前耗时命令日志内容,可通过配置来修改slowlgo策略,每条日志由日志ID,执行的LINUX时间,耗时单位(微秒),命令及参数4部分组成。

远程服务控制

  • info:提供服务器的信息和统计
  • monitor:实时转储收到的请求
  • slaveof ip port:把当前数据库变为某个数据库的从数据库
  • slaveof no one:把当前从数据库变为主数据库
  • config:在运行时配置Redis服务器

通用命令

过期时间

  • expire:设定一个key的活动时间(s),超出活动时间此key将丢弃,可用来做优惠活动、验证码等,返回1表示设置成功,0表示失败,当使用set或getset命令为key重新赋值时也会取消这个时间
  • ttl:获得一个key的活动时间,-1表示永久生存,-2表示key不存在
  • pexpire:作用同expire,区别在于它的值为一个时间点unix时间戳
  • pttl:查看还有多少ms过期
  • persist key:取消生存时间限制,用set或gestate命令重新赋值时也会取消生存时间限制,但incr, lpush, hset, zrem不会影响
  • expireat:作用同expire, 区别在于它的值为一个时间点unix时间戳
  • pexpireat:将一个ms级的unix时间戳设置为给定KEY的过期时间

对value操作的命令

  • exists(key):确认一个key是否存在,返回0或1
  • del(key):删除一或多个key,del命令不支持通配符,可以结合xargs命令自己实现,redis-cli keys “user:*” | xarges reds-cli del //删除所有以user:开头的键,这个命令需要在普通的命令提示符下运行,redid-cli del ‘redis-cli keys “user:*”’这条命令的性能更好
  • type(key):返回值的类型,string, list, hash, set, zset(有序集合)
  • keys(pattern):返回满足给定pattern的所有key,可选通配符?*[]\,此命令会遍历所有key,所以不建议在生产环境中使用
  • randomkey:随机返回key空间的一个
  • keyrename(oldname, newname):重命名key
  • dbsize:返回当前数据库中key的数目
  • select(index):按索引查询
  • move(key, dbindex):移动当前数据库中的key到dbindex数据库
  • flushdb:删除当前选择数据库中的所有key
  • flushall:删除所有数据库中的所有key
  • incr key:自增主键,key可以为一个变量,当set值其值为1,用incr时其值+1
  • incrby key count:指定键增加的数值
  • decr key:自减主键key的值减少1
  • decrby key count:key的值减少指定的count数量 
  • incrbyfloat key count:双精度浮点数自增

类型操作

String基础类型

在redis中String可以存储string, int, float三种数据类型。

  • set(key, value):给数据库中名称为key的string赋予值value,redis对键并没有要求,比较好的实践是用 资源名称:对象ID:对象属性 来命名一个键,比如user:1:friends来存储ID为1的用户的好友列表,但这种结构最好用hash来实现,否则不能保证其原子性,并不建议把整个数据序列化后存储为一个KEY中,这样会造成资源的浪费
  • strlen key:返回值的长度,一个汉字占3个字节,因为redis中接收的是UTF-8编码的中文
  • get(key):返回数据库中名称为key的string的value,当key不存在时返回nil
  • getset(key, value):给名称为key的string赋予上一次的value
  • mget(key1, key2,…, key N):返回库中多个string的value
  • setnx(key, value):添加string,名称为key,值为value
  • setex(key, time, value):向库中添加string,设定过期时间time
  • mset(key N, value N):批量设置多个string的值
  • msetnx(key N, value N):如果所有名称为key i的string都不存在
  • incr(key):名称为key的string增1操作,如果key不存在或值为空串当作0来处理
  • incrby(key, integer):名称为key的string增加integer
  • decr(key):名称为key的string减1操作
  • decrby(key, integer):名称为key的string减少integer
  • append(key, value):名称为key的string的值附加value,向已存在key的值后面追加一段字符串
  • getrange(key, start, end):返回名称为key的string的value的子串
  • getbit key index:二进制操作,一个字节由8个二进制组成,比如key值为bar由24个0和1组成,getbit  key 0,就取到的是0
  • setbit key index value:二进制操作,把此index的0或1用新值代替,比如stet key 7 1,则bar就变成了aar
  • bitcount key:获取二进制字符串中1的个数,加上参数则相当于长度限制,bit count key 0 1,统计前两个字节中1的个数
  • bigtop operation destkey key [key…]:多个值按operation进行二进制操作,值存储在desktop中,operation可选值有and, or, xor, not

List列表

可以存储一个有序的字符串列表。向列表两端加入元素,或者获得列表的某一个片段,也可以做为队列使用,分页等,链表上的每个节点都包含了一个字符串。

  • rpush(key, value):在名称为key的list尾添加一个值为value的元素
  • lpush(key, value):在名称为key的list头添加一个值为value的 元素
  • llen(key):返回名称为key的list的长度
  • lpop(key):返回并删除名称为key的list中的首元素
  • rpop(key):返回并删除名称为key的list中的尾元素
  • lindex(key, index):返回index位置的元素,它和下面的let中的Index同样支持大于小于0的操作
  • list(key index value):将索引为index的元素赋值为value
  • lset(key, index, value):给名称为key的list中index位置的元素赋值
  • lrange(key, start, end):返回名称为key的list中start至end之间的元素,从左开始数,查询操作。如果为负数,比如orange key -2 -1,表示取key的最后两个元素
  • ltrim(key, start, end):截取名称为key的list,和lrem正好是个相反的操作,配合push等可以保证某个表中只保留最新的多少条记录
  • lrem(key, count, value):删除count个值为value的元素并返回,当count>0时从左数,当<0时从右数,当=0时是整个列表(删除整个队列中值为value的元素)
  • insert key before|after pivot value:首先从左开始查找值为pivot的元素,然后根据第二个参数来决定将value插入到此元素的前还是后面
  • 下面4个命令是阻塞方式
  • blpop(key1, key2,… key N, timeout):lpop命令的block版本或在timeout秒内阻塞并等待可弹出的元素出现。
  • brpop(key1, key2,… key N, timeout):rpop的block版本或在timeout秒内阻塞并等待可弹出的元素出现。
  • rpoplpush(srckey, dstkey):将元素从一个列表转到另一个列表,返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部
  • brpoplpush(srckey, dstkey, timeout):将元素从一个列表转到另一个列表,返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部,如果srckey为空,那么在timeout秒内阻塞并等待可弹出的元素出现

Set集合类型

无序集合,它的内部是使用值为空的hash来实现的,方便的地方可以做并、交、差集运算

  • sadd(key, member):向名称为key的set中添加元素member,返回添加的数量
  • srem(key, member):删除名称为key的set中的元素member
  • smembers(key) :返回名称为key的set的所有元素
  • spop(key) :随机返回并删除名称为key的set中一个元素
  • smove(srckey, dstkey, member) :移到集合元素,成功返回1,否则返回0
  • scard(key) :集合中的元素个数
  • sismember(key, member) :在key中是否存在member元素
  • sinter(key1, key2,…key N):求交集
  • sinterstore(dstkey, (keys)) :求交集并将交集保存到dstkey的集合
  • sunion(key1, (keys)) :求并集
  • sunionstore(dstkey, (keys)) :求并集并将并集保存到dstkey的集合
  • sdiff(key1, (keys)) :求差集,注意key的顺序不同结果也不同
  • sdiffstore(dstkey, (keys)) :求差集并将差集保存到dstkey的集合
  • srandmember(key) num:随机返回set的num元素,当num大于集合的大小时全部返回,当>0时返回num个不重复的元素,当<0时有可能返回重复的num个元素

SortSet有集集合

它和sort的最大区别是不支持集合操作,另一方面和hash很类似,它为每个值提供了score。提供了字符串成员与浮点数分值之间的有序映射,元素的排列顺序由分值的大小决定。所以一般应用是是将数据转换为整数并搭配这里的score功能。这样可以简化对特定元素的范围查找。比如IP查找城市功能,就是在set里记录IP起始值的IP,然后分段查找小于等于输入的值,再取这里最大的值或直接用zrangebyscore命令。

  • zadd key score member:添加一个元素和此F1关心人分数,如果分数存在则会替换,比如记录分数add scores 89 tom 67 peter 100 david,其中分数可以是Int也可以是float,+inf和-inf表示正负无穷
  • zscore key member:获得元素的分数
  • zrange key start stop [withscores]:从小到大查找范围分数内的元素,如果需要同时获得分数,可以在外面加上”withscores”,如果stop=-1,表示查询start和最后一个元素,一会返回两个元素
  • zrevrange key start top [withscores]:和上面不同的是它是从大到小查询的
  • zrangebyscore key min max [withscores] [limit offset count]:获得指定分数范围的元素,比如80 100,表示100>=score>=80,如果80 (100表示不包括100,同样支持+inf和-inf。limit同mysql的用法一样,从结果集offset开始的count个元素。
  • zincrby key increment member:增加某个元素的分数
  • zcard key:集合中的元素个数
  • zcount key min max:获得指定分数范围内的元素个数
  • zrem key member:删除一个或多个元素
  • zremrangebyrank key min max:按排名范围删除元素,其实就是按照索引顺序删除元素
  • zremrangebyscore key min max:按分数范围删除元素
  • zrank key member:从小到大获得元素的排名
  • zrevrank key member:从大到小获得元素的排名
  • zinterstore destination numkeys key [key…] [weights weight [weight…]] [aggregate sum|min|max]:计算集合的交集,并将结果存放在destination中。destination中元素的分数由aggregate来决定。zadd s1 1 a 2 b,zadd s2 10 a 20 b,则zinterstore snew 2 s1 s2> a 11 b 22, zinterstore snew 2 s1 s2 aggregate min> a 1 b 2, max时> a 10 b 20,weights表示不同集合的权重,需要相乘
  • zunionstore destination numkeys key [key…] [weights weight [weight…]] [aggregate sum|min|max]:计算集合的并集

Hash散列

一般用于存储二维数据,可以看作关系数据库中行或文档数据库中的文档。

  • hset(key, field, value):向名称为key的hash中添加元素field,它不区分插入和更新操作,当为插入时返回1,更新时返回0
  • hget(key, field):返回名称为key的hash中field对应的value
  • hmget(key, (fields)):返回名称为key的hash中field对应的value,hmget car price color
  • hmset(key, (fields)):向名称为key的hash中添加元素多个field,hmset car price 500 color red
  • hgetall key:返回key中的所有域的值
  • hincrby(key, field, integer):将名称为key的hash中field的value增加integer,是在原基础上,如果此key不存在则会默认创建
  • hincrbyfloat(key, field, integer):将名称为key的hash中field的value增加float
  • hexists(key, field):名称为key的hash中是否存在键为field的域
  • hsetnx key field value:当字段不存在时赋值,如果字段存在则不进行操作
  • hdel(key, field):删除一或多个名称为key的hash中键为field的域
  • hlen(key):返回名称为key的hash中元素个数
  • hkeys(key):返回名称为key的hash中所有键
  • hvals(key):返回名称为key的hash中所有键对应的value
  • hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value

高级命令

发布与订阅

redis提供了5个与发布和订阅相关的命令,这东西也可以用于服务发现等功能。采用redis提供的5个简单命令可以实现简单的功能,但它本身存在以下问题:1、与redis的稳定性有关,如果一个client读取信息不够快的话,不断积压的消息会使内存越来越大。2、与redis的可靠性有关,如果中间断线,那么client将丢失在断线期间发送的所有消息。

  • subscribe(channel...channelN):订阅给定的一个或多个频道,一旦进入这种状态后只能使用subscribe/unsubscribe/psubscribe/punsubscribe这四个命令中的某一个
  • unsubscribe(channel...channelN):取消订阅给定的一个或多个频道,如果没有参数则退订所有的频道
  • publish(channel, message):向给定频道发送消息,返回值是接收此消息的订阅者的数量,这个消息是实时的,不会被缓存。如果没有收到此消息就丢失了
  • psubscribe(pattern...patternN):订阅与给定模式相匹配的所有频道
  • punsubscribe(pattern...patternN):取消订阅与给定模式相匹配的所有频道,如果没有参数则退订所有的频道

事务与锁

它是由一组命令组成的,由multi开始,以exec结束,并且建议同时使用watch和unwatch命令。这是一个阻塞操作,它会阻塞同一客户端发送过来的命令。后续发送的命令会被缓存起来。它的好处是减少连接次数。这三个命令构成了一个乐观锁。基本事务:需要用到multi和exec命令,可以让一个客户端在不被打断的情况下执行多个命令,多个命令会按序执行,redis会把多个命令加入到一个队列里,直到客户端发送exec为止。注意这种实现最好是把命令打包发送,减少交互的过程时间。但在java里好像没有类似的类库。

  • multi:开启一个事务
  • exec:提交事务,会取消对所有key的watch,一般来说事务执行失败后需要重试
  • watch key:监视即将执行事务中的key是否发生变化,如果发生了写的变化,事务将执行失败,因为事务是先缓存命令,一起提交的,此命令可以在multi前也可以在后面但必须在exec前面,这个命令可以看成一个乐观锁,如果失改了自己重试即可;
  • unwatch key:取消对某个值的监控
  • discard:撤消watch命令并清空所有已入队命令
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

korgs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值