redis基本操作

Redis基本用法

redis基本操作:

16个数据库 0到15
redis-cli
6379默认监听端口
--raw 输出中文
进入redis
redis-cli
select 0-15 自由选择

redis数据类型

1. string---Strings

使用场景:计数器

添加string类型的变量

redis 复制代码
set name1 Nathan
redis 复制代码
set name2 Nathan

获取变量名的值

redis 复制代码
get name1

查看所有的KEY, *是通配符,表示任意多个字符, keys *会返回当前数据库中所有的键名

redis 复制代码
keys *

在变量的值后面添加内容

redis 复制代码
append name1 Jack 

查看name1的值

redis 复制代码
get name1

删除变量名为name1的变量

redis 复制代码
del name1

查看变量的类型

redis 复制代码
type name1

注: 1.string类型的变量,尽量以str_name这种格式命名(见明起义), 2. redis的数据类型和python还有其他编程语言的数据类型有差别, redis的string类型可以加减操作(就比如定义的数字,在redis里面就是string类型,可以加减法操作)

自加:incr
自减:decr
加: incrby
减: decrby

先创建一个变量

redis 复制代码
set number 1

自加:incr, 比如incr number, 代表number值自增1, 原本是1, 现在就是2

redis 复制代码
incr number

自减:incr, 比如decr number, 代表number值自减1, 从2变为1

redis 复制代码
decr number

加: incrby, 比如把number的值加3, 那就是incrby number 3, 结果是4

redis 复制代码
incrby number 3

减: incrby, 比如把number的值减2, 那就是decrby number 2, 结果是2

redis 复制代码
decrby number 2

重命名 将number变量重命名为number1

redis 复制代码
rename number number1

查看number变量是否存在, 返回了(integer) 0, 表示该变量已经不存在

redis 复制代码
exists number

再查看number1变量是否存在, 返回了(integer) 1, 表示该变量存在

redis 复制代码
exists number1

所以一旦重命名了以后,原来那个变量就不存在啦

设置过期时间

设置变量name2过期时间为10秒

redis 复制代码
expire name2 10

变量name2会在10秒钟之后自动消失

如果已经设置过期时间但突然又不想让变量过期,可以使用persist命令

redis 复制代码
persist name2

这样的话,变量就不会过期啦.

创建变量number3

redis 复制代码
set number3 3

ttl命令, 用于判断变量是否过期和有没有设置过期时间, -2代表此变量已经过期, -1代表这个变量没有设置过期时间
```redis
ttl number1

返回-1

redis 复制代码
expire number3 5

等5秒之后,再次输入以下代码:

redis 复制代码
ttl number3

发现返回值为-2, 说明该变量已经过期了。
注意: 过期后的变量,不能再使用。

list---Lists类型

常见应用场景: 消息队列, 排行榜

创建一个键 lname, 并向右添加元素, 语法: rpush 变量名 元素1 元素2 ……

redis 复制代码
rpush lname y1 y2 y3 y4 y5 y6 y7

查看变量类型

redis 复制代码
type lname

查出来是list类型

提取变量元素, lrange 变量名 起始位置 最终位置

redis 复制代码
lrange lname 0 -1

查询结果:

  1. "y1"
  2. "y2"
  3. "y3"
  4. "y4"
  5. "y5"
  6. "y6"
  7. "y7"

向左添加元素, lpush 变量名 元素1 元素2 ……

redis 复制代码
lpush lname g5 g6
lrange lname 0 -1

查询结果:

  1. "g6"
  2. "g5"
  3. "y1"
  4. "y2"
  5. "y3"
  6. "y4"
  7. "y5"
  8. "y6"
  9. "y7"

向右添加元素, rpush 变量名 元素1 元素2 ……

redis 复制代码
rpush lname g7 g8
lrange lname 0 -1

查询结果:

  1. "g6"
  2. "g5"
  3. "y1"
  4. "y2"
  5. "y3"
  6. "y4"
  7. "y5"
  8. "y6"
  9. "y7"
  10. "g7"
  11. "g8"

索引查找: lindex lname 索引号,(索引号也是从0开始的)

redis 复制代码
lindex lname 3

查询结果: "y2"

修改元素:
lset lname 索引号 元素名

redis 复制代码
lset lname 2 y10

结果:

  1. "g6"
  2. "g5"
  3. "y10"
  4. "y2"
  5. "y3"
  6. "y4"
  7. "y5"
  8. "y6"
  9. "y7"
  10. "g7"
  11. "g8"

我们可以看到,索引为2,也就是第三个元素改为y10了

删除元素

lpop和rpop

lpop:
删除最前面的元素

redis 复制代码
lpop lname

结果:
"g6"
会返回一个被删除的元素

redis 复制代码
lrange lname 0 -1

我们再去看一看, 第一个元素g6已经没有了

  1. "g5"
  2. "y10"
  3. "y2"
  4. "y3"
  5. "y4"
  6. "y5"
  7. "y6"
  8. "y7"
  9. "g7"
  10. "g8"

rpop:
删除最后面的

redis 复制代码
rpop lname

返回结果:
"g8"

redis 复制代码
lrange lname 0 -1
  1. "g5"
  2. "y10"
  3. "y2"
  4. "y3"
  5. "y4"
  6. "y5"
  7. "y6"
  8. "y7"
  9. "g7"

我们不难看到, 最后一个元素g8已经删除了

Hash---Hashes类型

常用场景:购物车

Hash类型:Redis的key value键值对模式不变,但value是一个键值对。
添加数据: hset 变量名 key value

redis 复制代码
hset hname name1 jack1
redis 复制代码
keys *

查询结果:

  1. "hname"

查看数据(value): hget 变量名 key

redis 复制代码
hget hname name1

结果: "jack1"

再添加一条数据, 查看新增加数据的value:

redis 复制代码
hset hname name2 jack2
hget hname name2

结果: "jack2"

如果field 存在,正常读取 field 对应的值。
如果field 不存在,返回 nil。

添加多个数据hmset, 并查询多条数据的value

redis 复制代码
hmset name1 qiye1 1 qiye2 2 qiye3 3
hmget name1 qiye1 qiye2 qiye3

结果:

  1. "1"
  2. "2"
  3. "3"

hdel 删除域
该命令可以同时删除多个字段,返回值是被删除字段的数量。

如果field 存在,删除字段,返回被删除字段的数量。
如果field 不存在, 返回0

我们添加一个Hname, key和value 分别是name1 和 Nathan

redis 复制代码
hset Hname name1 Nathan

查看数据:

redis 复制代码
hget Hname name1

我们把刚才创建好的Hname变量删除

redis 复制代码
hdel Hname name1

我们再次查看

redis 复制代码
hget Hname name1

我们可以发现给我们返回了一个(nil)
说明变量Hname已经被我们删除了

读取全部数据 以键值对的形式展现出来

redis 复制代码
hgetall hname

结果:

  1. "name1"
  2. "jack1"
  3. "name2"
  4. "jack2"

获取指定 key 所有字段的值

redis 复制代码
hvals hname

结果:

  1. "jack1"
  2. "jack2"

查看有多少个键值对

redis 复制代码
hlen hname

结果: (integer) 2
有两个键值对

set---Sets类型

set类型是string类型的集合,其特点是集合元素无序且不重复

常见场景: 好友/关注/粉丝/感兴趣的人集合 随机展示 黑名单/白名单

添加数据: sadd 变量名 元素1 元素2……

redis 复制代码
sadd sname g1 g2 g3 g1

查询sname中的元素, smembers 变量名

redis 复制代码
smembers sname

结果:

  1. "g4"
  2. "g1"
  3. "g3"
  4. "g2"
    随机删除sname变量中的一个元素, spop 变量名
redis 复制代码
spop sname

结果:"g3"
将删除的元素展示在结果上
随机删除sname变量中的两个元素(多少个可以自己定义的), spop 变量名 随机删除的元素数量

redis 复制代码
spop sname 2

结果:

  1. "g1"
  2. "g2"
    同样将删除的元素展示在结果上

在一个变量里面指定删除元素 可指定多个, srem 变量名 member 元素1 元素2 ……

redis 复制代码
srem sname member g1

返回结果: (integer) 1

获取有多少个元素

redis 复制代码
scard sname

结果: (integer) 0
由于我们把所有的元素都删除了, 所以返回结果为0

zset -- Sorted sets类型

常见场景: 延时队列, 排行榜, 限流

添加数据: zadd 变量名 value1 key1 value2 key2……

redis 复制代码
zadd zname 10 y1 20 y2 30 y3 40 y4 50 y5

结果: (integer) 4

查看数据: zrange 变量名 索引起始位置 索引最后位置

redis 复制代码
zrange zname 0 -1

结果:

  1. "y1"
  2. "y2"
  3. "y3"
  4. "y4"
  5. "y5"

查看数据: zrangebyscore 变量名 起始值 最后值, zrangebyscore zname 0 100 代表查询zname变量里面值从0到100的所有元素

redis 复制代码
zrangebyscore zname 0 100

结果:

  1. "y1"
  2. "y2"
  3. "y3"
  4. "y4"
  5. "y5"

同理, 查找zname里面值在0到20区间的所有变量

redis 复制代码
zrangebyscore zname 0 20

结果:

  1. "y1"
  2. "y2"

查看分数, 也就是查看值, zscore 变量名 key

redis 复制代码
zscore zname y3

结果: "30"

redis 复制代码
zscore zname y3

结果: "20"

查找有多少个元素, zcard 变量名

redis 复制代码
zcard zname

结果:(integer) 5
删除数据:
zrem, zremrangebyrank 还有 zremrangebyscore
zrem: zrem 变量名 key

redis 复制代码
zrem zname y1

结果:(integer) 1
已经成功删除

利用索引(index)删除
zremrangebyrank zname 起始索引 最终索引, 比如 zremrangebyrank zname 0 2, 代表在zname变量中, 删除索引为0 到 2的元素

redis 复制代码
zremrangebyrank zname 0 2

结果: (integer) 3
删除了三个元素
分别是y1 y2 y3

我们在讲解下一个删除方法时, 先删除剩下的数据并重新添加以下数据

redis 复制代码
zrem zname y4
zadd zname 10 y1 20 y2 30 y3 40 y4 50 y5

利用分数(value)来删除, zremrangebyscore 变量名 起始值 最终值

redis 复制代码
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, 欢迎随时来提问题!!!
如果我有写错的地方, 望大家指正, 也可以联系我, 让我们一起努力, 继续不断的进步.
学习是个漫长的过程, 需要我们不断的去学习并掌握消化知识点, 有不懂或概念模糊不理解的情况下,一定要赶紧的解决问题, 否则问题只会越来越多, 漏洞也就越老越大.
人生路漫漫, 白鹭常相伴!!!

上一个
mysql事务与交互
下一个
html基本标签
最近修改: 2024-08-26Powered by