16个数据库 0到15
redis-cli
6379默认监听端口
--raw 输出中文
进入redis
redis-cli
select 0-15 自由选择
使用场景:计数器
添加string类型的变量
set name1 Nathan
set name2 Nathan
获取变量名的值
get name1
查看所有的KEY, *是通配符,表示任意多个字符, keys *会返回当前数据库中所有的键名
keys *
在变量的值后面添加内容
append name1 Jack
查看name1的值
get name1
删除变量名为name1的变量
del name1
查看变量的类型
type name1
注: 1.string类型的变量,尽量以str_name这种格式命名(见明起义), 2. redis的数据类型和python还有其他编程语言的数据类型有差别, redis的string类型可以加减操作(就比如定义的数字,在redis里面就是string类型,可以加减法操作)
自加:incr
自减:decr
加: incrby
减: decrby
先创建一个变量
set number 1
自加:incr, 比如incr number, 代表number值自增1, 原本是1, 现在就是2
incr number
自减:incr, 比如decr number, 代表number值自减1, 从2变为1
decr number
加: incrby, 比如把number的值加3, 那就是incrby number 3, 结果是4
incrby number 3
减: incrby, 比如把number的值减2, 那就是decrby number 2, 结果是2
decrby number 2
重命名 将number变量重命名为number1
rename number number1
查看number变量是否存在, 返回了(integer) 0, 表示该变量已经不存在
exists number
再查看number1变量是否存在, 返回了(integer) 1, 表示该变量存在
exists number1
所以一旦重命名了以后,原来那个变量就不存在啦
设置变量name2过期时间为10秒
expire name2 10
变量name2会在10秒钟之后自动消失
如果已经设置过期时间但突然又不想让变量过期,可以使用persist命令
persist name2
这样的话,变量就不会过期啦.
创建变量number3
set number3 3
ttl命令, 用于判断变量是否过期和有没有设置过期时间, -2代表此变量已经过期, -1代表这个变量没有设置过期时间
```redis
ttl number1
返回-1
expire number3 5
等5秒之后,再次输入以下代码:
ttl number3
发现返回值为-2, 说明该变量已经过期了。
注意: 过期后的变量,不能再使用。
常见应用场景: 消息队列, 排行榜
创建一个键 lname, 并向右添加元素, 语法: rpush 变量名 元素1 元素2 ……
rpush lname y1 y2 y3 y4 y5 y6 y7
查看变量类型
type lname
查出来是list类型
提取变量元素, lrange 变量名 起始位置 最终位置
lrange lname 0 -1
查询结果:
向左添加元素, lpush 变量名 元素1 元素2 ……
lpush lname g5 g6
lrange lname 0 -1
查询结果:
向右添加元素, rpush 变量名 元素1 元素2 ……
rpush lname g7 g8
lrange lname 0 -1
查询结果:
索引查找: lindex lname 索引号,(索引号也是从0开始的)
lindex lname 3
查询结果: "y2"
修改元素:
lset lname 索引号 元素名
lset lname 2 y10
结果:
我们可以看到,索引为2,也就是第三个元素改为y10了
删除元素
lpop和rpop
lpop:
删除最前面的元素
lpop lname
结果:
"g6"
会返回一个被删除的元素
lrange lname 0 -1
我们再去看一看, 第一个元素g6已经没有了
rpop:
删除最后面的
rpop lname
返回结果:
"g8"
lrange lname 0 -1
我们不难看到, 最后一个元素g8已经删除了
常用场景:购物车
Hash类型:Redis的key value键值对模式不变,但value是一个键值对。
添加数据: hset 变量名 key value
hset hname name1 jack1
keys *
查询结果:
查看数据(value): hget 变量名 key
hget hname name1
结果: "jack1"
再添加一条数据, 查看新增加数据的value:
hset hname name2 jack2
hget hname name2
结果: "jack2"
如果field 存在,正常读取 field 对应的值。
如果field 不存在,返回 nil。
添加多个数据hmset, 并查询多条数据的value
hmset name1 qiye1 1 qiye2 2 qiye3 3
hmget name1 qiye1 qiye2 qiye3
结果:
hdel 删除域
该命令可以同时删除多个字段,返回值是被删除字段的数量。
如果field 存在,删除字段,返回被删除字段的数量。
如果field 不存在, 返回0
我们添加一个Hname, key和value 分别是name1 和 Nathan
hset Hname name1 Nathan
查看数据:
hget Hname name1
我们把刚才创建好的Hname变量删除
hdel Hname name1
我们再次查看
hget Hname name1
我们可以发现给我们返回了一个(nil)
说明变量Hname已经被我们删除了
读取全部数据 以键值对的形式展现出来
hgetall hname
结果:
获取指定 key 所有字段的值
hvals hname
结果:
查看有多少个键值对
hlen hname
结果: (integer) 2
有两个键值对
set类型是string类型的集合,其特点是集合元素无序且不重复
常见场景: 好友/关注/粉丝/感兴趣的人集合 随机展示 黑名单/白名单
添加数据: sadd 变量名 元素1 元素2……
sadd sname g1 g2 g3 g1
查询sname中的元素, smembers 变量名
smembers sname
结果:
spop sname
结果:"g3"
将删除的元素展示在结果上
随机删除sname变量中的两个元素(多少个可以自己定义的), spop 变量名 随机删除的元素数量
spop sname 2
结果:
在一个变量里面指定删除元素 可指定多个, srem 变量名 member 元素1 元素2 ……
srem sname member g1
返回结果: (integer) 1
获取有多少个元素
scard sname
结果: (integer) 0
由于我们把所有的元素都删除了, 所以返回结果为0
常见场景: 延时队列, 排行榜, 限流
添加数据: zadd 变量名 value1 key1 value2 key2……
zadd zname 10 y1 20 y2 30 y3 40 y4 50 y5
结果: (integer) 4
查看数据: zrange 变量名 索引起始位置 索引最后位置
zrange zname 0 -1
结果:
查看数据: zrangebyscore 变量名 起始值 最后值, zrangebyscore zname 0 100 代表查询zname变量里面值从0到100的所有元素
zrangebyscore zname 0 100
结果:
同理, 查找zname里面值在0到20区间的所有变量
zrangebyscore zname 0 20
结果:
查看分数, 也就是查看值, zscore 变量名 key
zscore zname y3
结果: "30"
zscore zname y3
结果: "20"
查找有多少个元素, zcard 变量名
zcard zname
结果:(integer) 5
删除数据:
zrem, zremrangebyrank 还有 zremrangebyscore
zrem: zrem 变量名 key
zrem zname y1
结果:(integer) 1
已经成功删除
利用索引(index)删除
zremrangebyrank zname 起始索引 最终索引, 比如 zremrangebyrank zname 0 2, 代表在zname变量中, 删除索引为0 到 2的元素
zremrangebyrank zname 0 2
结果: (integer) 3
删除了三个元素
分别是y1 y2 y3
我们在讲解下一个删除方法时, 先删除剩下的数据并重新添加以下数据
zrem zname y4
zadd zname 10 y1 20 y2 30 y3 40 y4 50 y5
利用分数(value)来删除, zremrangebyscore 变量名 起始值 最终值
zremrangebyscore zname 0 40
结果: (integer) 4
删除了4个元素
下面的知识只作为拓展, 如果感兴趣的话,可以自己上网去查
三个命令: flushdb, flushall 和 subscribe
flushdb
flushall
subscribe 110 订阅 频道号
publish 110 "hello world"
以上就是redis基本操作的所有内容了, 如果有哪里不懂的地方,可以随时联系我, 我的qq号是1175235190, qq邮箱是1175235190@qq.com, 欢迎随时来提问题!!!
如果我有写错的地方, 望大家指正, 也可以联系我, 让我们一起努力, 继续不断的进步.
学习是个漫长的过程, 需要我们不断的去学习并掌握消化知识点, 有不懂或概念模糊不理解的情况下,一定要赶紧的解决问题, 否则问题只会越来越多, 漏洞也就越老越大.
人生路漫漫, 白鹭常相伴!!!