前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >怒打50行代码

怒打50行代码

作者头像
暖月寒星
发布2020-03-10 09:07:00
4500
发布2020-03-10 09:07:00
举报
文章被收录于专栏:浅枫沐雪

看了江南一点雨的文章感觉不错,决定怒打20行代码

代码语言:javascript
复制
# 启动服务
redis-server.exe redis.windows.conf
# 进入命令行
双击redis-cli.exe

五大数据类型介绍

redis中的数据都是以key/value的形式存储的,五大数据类型主要是指value的数据类型,包含如下五种:

STRING

STRING是redis中最基本的数据类型,redis中的STRING类型是二进制安全的,即它可以包含任何数据,比如一个序列化的对象甚至一个jpg图片,要注意的是redis中的字符串大小上限是512M。

LIST

LIST是一个简单的字符串列表,按照插入顺序进行排序,我们可以从LIST的头部(LEFT)或者尾部(RIGHT)插入一个元素,也可以从LIST的头部(LEFT)或者尾部(RIGHT)弹出一个元素。

HASH

HASH类似于Java中的Map,是一个键值对集合,在redis中可以用来存储对象。

SET

SET是STRING类型的无序集合,不同于LIST,SET中的元素不可以重复。

ZSET

ZSET和SET一样,也是STRING类型的元素的集合,不同的是ZSET中的每个元素都会关联一个double类型的分数,ZSET中的成员都是唯一的,但是所关联的分数可以重复。

代码语言:javascript
复制
127.0.0.1:6379> set k1 v1
(error) NOAUTH Authentication required. # 未登录,需要登录
127.0.0.1:6379> auth 123456 # 输入密码即可登录
OK
# 设置值与取值
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
#DEL命令
#看到OK表示插入成功。通过DEL命令我们可以删除一个已经存在的key
127.0.0.1:6379> del k1
(integer) 1 # 删除成功
127.0.0.1:6379> del k1
(integer) 0 # 删除失败
# del还可以删除多个key,返回被删除成功的个数
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> del k1 k2 k3 k4 # 删除键1234,其中k4是不存在的
(integer) 3 # 成功删除了3个键,k4是不存在的
# dump可以序列化给定的key,返回序列化过后的值,key为空时返回nil
127.0.0.1:6379> dump k1
(nil)
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> dump k1
"\x00\x02v1\a\x00\xa0\xd7e\xad\xc3\x9a\xacA"    #k1被序列化的值
127.0.0.1:6379> get k1
"v1"
# EXISTS命令用来检测一个给定的key是否存在,可以同时判断多个键是否存在,返回存在的键个数
127.0.0.1:6379> EXISTS k1 
(integer) 1
127.0.0.1:6379> exists k1 k2 k3 #多键判断是否存在
(integer) 1
127.0.0.1:6379> set k2 v2 # 新增一个键k2
OK
127.0.0.1:6379> exists k1 k2 k3
(integer) 2 # 此时返回2
# keys * 获取所有存在的键,后面跟正则表达式
127.0.0.1:6379> keys *
1) "k2"
2) "k1"
127.0.0.1:6379> ttl k1
(integer) -1 # -1表示key存在并且没有设置过期时间(永久有效)
127.0.0.1:6379> ttl k3
(integer) -2 # -2表示key不存在或者已过期
# EXPIRE命令可以给key设置有效期,在有效期过后,key会被销毁
127.0.0.1:6379> expire k2 10 # 给k2设置10秒过期
(integer) 1 # 返回1设置成功
127.0.0.1:6379> get k2 # 10s过后k2被删除了
(nil)
127.0.0.1:6379> keys * # 果然被删除了
1) "k1"
# 给k1设置6分钟的过期时间
127.0.0.1:6379> expire k1 360
(integer) 1
127.0.0.1:6379> ttl k1 # 使用ttl查看剩余的过去时间
(integer) 351
127.0.0.1:6379> ttl k1
(integer) 211 # 我又看了一下,发现它快过去了
# PERSIST命令移除键的过期时间,设置永不过期
127.0.0.1:6379> persist k1 #我想拯救一下生命快结束的k1
(integer) 1 # 拯救成功
127.0.0.1:6379> ttl k1
(integer) -1 # 确实永不过期了
127.0.0.1:6379> persist k2 # 我也想拯救一下已经死了的k2
(integer) 0 # 果然死了不能复生
127.0.0.1:6379> ttl k2
(integer) -2 # k2已经被销毁了,想要挽回已经无能为力,且行且珍惜吧
# pexpire设置key的过期时间不同的是,它后面跟毫秒数
127.0.0.1:6379> pexpire k1 60000 # 设置1分钟的过期时间
# PTTL 可以查看key的有效时间,返回毫秒数
127.0.0.1:6379> pttl k1 #查看过期时间:毫秒数
(integer) 38022
127.0.0.1:6379> ttl k1 # 配合ttl更高效
(integer) 29
# clear可以清屏,方便下面的操作

String

append:如果key已经存在,则会直接在value后追加值,如果key不存在,则会先创建一个value为空字符串的key,然后再追加

代码语言:javascript
复制
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> append k1 qfmx #创建k1,并且追加qfmx
(integer) 4 #返回k1的字符个数
127.0.0.1:6379> get k1
"qfmx"
127.0.0.1:6379> append k1 5201314 #我想再追加7个字符
(integer) 11    #此时k1有11个字符
127.0.0.1:6379> get k1
"qfmx5201314"
##为啥要用append呢?set不香吗?
127.0.0.1:6379> set k2    #果然k2必须要赋值
(error) ERR wrong number of arguments for 'set' command
127.0.0.1:6379> set k2 "" # 赋值为空字符串完美
OK
127.0.0.1:6379> get k2 
""
127.0.0.1:6379> append k2 qfmx # 同样的效果
(integer) 4
127.0.0.1:6379> set k3 null # 好像null被解析成了字符串
OK
127.0.0.1:6379> get k3 # 是字符串而不是null(空)
"null"
127.0.0.1:6379> append k3 qfmx
(integer) 8 # 果然
127.0.0.1:6379> get k3
"nullqfmx"

decr:命令可以实现对value的减1操作,如果key不存在,则key对应的初始值会被置为0,如果key的value不为数字,则会报错 decrby:对key进行减decrement 操作-》语法【DECRBY key decrement 】decrement为正数 则递减decrement个值,为负数则增加decrement个值,decrement不能为浮点数

代码语言:javascript
复制
127.0.0.1:6379> decr k5 # 等同于先创建set k5 0 然后再减1
(integer) -1 # 返回k5被减后的值
127.0.0.1:6379> get k5
"-1"
127.0.0.1:6379> decr k5
(integer) -2
127.0.0.1:6379> decr k5
(integer) -3 # 返回k5被减后的值
127.0.0.1:6379> get k5
"-3" # 果然没错
127.0.0.1:6379> DECRBY k5 20
(integer) -23
#127.0.0.1:6379> DECRBY key decrement 
127.0.0.1:6379> get k5
"-3"
127.0.0.1:6379> DECRBY k5 20 # 递减20
(integer) -23
127.0.0.1:6379> DECRBY k5 -20 # 递增20
(integer) -3
127.0.0.1:6379> DECRBY k5 0 # 没变化啊,不增不减
(integer) -3
127.0.0.1:6379> DECRBY k5 10.5 # 不能为浮点数哦
(error) ERR value is not an integer or out of range
# 也不能对非整数进行操作
127.0.0.1:6379> set k4 2.5
OK
127.0.0.1:6379> decr k4
(error) ERR value is not an integer or out of range
127.0.0.1:6379> decr k1
(error) ERR value is not an integer or out of range
127.0.0.1:6379> decrby k1 10
(error) ERR value is not an integer or out of range
127.0.0.1:6379> get k1
"qfmx5201314"

GETRANGE:用来返回key所对应的value的子串,子串由start和end决定,从左往右计算,如果下标是负数,则从右往左计算,其中-1表示最后一个字符,-2是倒数第二个

代码语言:javascript
复制
127.0.0.1:6379> GETRANGE k1 0 -1 # 获取所有字符串
"qfmx5201314"
127.0.0.1:6379>  GETRANGE k1 -10 -1 # 取倒数10个
"fmx5201314"
127.0.0.1:6379> GETRANGE k1 0 1 # 取钱2个
"qf"
127.0.0.1:6379> GETRANGE k1 0 11 # 正取所有
"qfmx5201314"
127.0.0.1:6379> GETRANGE k1 0 100 # 终点(100)大了没关系,多跑了没关系,也是跑完了
"qfmx5201314"
127.0.0.1:6379> GETRANGE k1 -100 -1 # 起点低没关系,努力到了终点(-1)就好
"qfmx5201314"

set 重置key,相当于重新赋值 getset 重置key,返回被重置的字符串,再赋值新的值

代码语言:javascript
复制
127.0.0.1:6379> get k1 # k1
"qfmx5201314"
127.0.0.1:6379> set k1 12345 # set重新赋值
OK
127.0.0.1:6379> get k1 # k1已经被赋值
"12345"
127.0.0.1:6379> getset k1 qfmx # getset悄悄赋值,先返回k1上一次的值
"12345"
127.0.0.1:6379> get k1 # k1已经被赋值
"qfmx"
127.0.0.1:6379> getset hellp 12435 # key hellp以前不存在
(nil) #hellp以前不存在
127.0.0.1:6379> get hellp  # 新的值
"12435"

INCR:可以对指定key的value执行加1操作,如果指定的key不存在,那么在加1操作之前,会先将key的value设置为0,如果key的value不是数字,则会报错 INCRBY和INCR功能类似,不同的是可以指定增长的步长[INCRBY key increment] increment可正可负 INCRBYFLOAT命令可以用来增长浮点数

代码语言:javascript
复制
127.0.0.1:6379> incr m
(integer) 1
127.0.0.1:6379> incr m
(integer) 2
127.0.0.1:6379> incrby m 66
(integer) 68
127.0.0.1:6379> incrby m 0
(integer) 68
127.0.0.1:6379> incrby m 10 # 递增10
(integer) 78
127.0.0.1:6379> incrby m -50 # 递减50
(integer) 28
127.0.0.1:6379> SET k1 0.5
OK
127.0.0.1:6379> INCRBYFLOAT k1 0.33
"0.83

MGET与MSET

MGET与MSET分别用来批量设置值和批量获取值,如下:

代码语言:javascript
复制
127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> MGET k1 k2 k3
1) "v1"
2) "v2"
3) "v3"

SETEX

SETEX用来给key设置value,同时设置过期时间,等效于先给key设置value,再给key设置过期时间,如下:

代码语言:javascript
复制
127.0.0.1:6379> SETEX k1 30 v1
OK
127.0.0.1:6379> TTL k1
(integer) 26
127.0.0.1:6379> GET k1
"v1"

PSETEX

PSETEX的作用和SETEX类似,不同的是,这里设置过期时间的单位是毫秒,如下:

代码语言:javascript
复制
127.0.0.1:6379> PSETEX k1 60000 v1
OK
127.0.0.1:6379> PTTL k1
(integer) 55412

SETNX

SETNX是 SET if Not eXists的简写,SET命令在执行时,如果key已经存在,则新值会覆盖掉旧值,而对于SETNX命令,如果key已经存在,则不做任何操作,如果key不存在,则效果等同于SET命令。如下:

代码语言:javascript
复制
127.0.0.1:6379> SETNX k1 v1
(integer) 1
127.0.0.1:6379> SETNX k1 vv
(integer) 0
127.0.0.1:6379> GET k1
"v1"

MSETNX

MSETNX兼具了SETNX和MSET的特性,但是MSETNX在执行时,如果有一个key存在,则所有的都不会执行,如下:

代码语言:javascript
复制
127.0.0.1:6379> MSETNX k1 v1 k2 v2
(integer) 0

因为k1已经存在,所以k2也没执行成功。

SETRANGE

SETRANGE用来覆盖一个已经存在的key的value,如下:

代码语言:javascript
复制
127.0.0.1:6379> set k1 helloworld
OK
127.0.0.1:6379> get k1
"helloworld"
127.0.0.1:6379> SETRANGE k1 5 redis
(integer) 10
127.0.0.1:6379> get k1
"helloredis"

但是如果已经存在的key的value长度小于offset,则不足的地方用0补齐,如下:

代码语言:javascript
复制
127.0.0.1:6379> set k1 helloredis
OK
127.0.0.1:6379> SETRANGE k1 20 --java
(integer) 26
127.0.0.1:6379> GET k1
"helloredis\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00--java"

STRLEN

STRLEN用来计算key的value的长度,如下:

代码语言:javascript
复制
127.0.0.1:6379> STRLEN k1
(integer) 26
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 五大数据类型介绍
    • STRING
      • LIST
        • HASH
          • SET
            • ZSET
            • String
              • MGET与MSET
                • SETEX
                  • PSETEX
                    • SETNX
                      • MSETNX
                        • SETRANGE
                          • STRLEN
                          相关产品与服务
                          云数据库 Redis®
                          腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档