迷,什么都是道理;悟,什么都不是道理。

CentOS   MySQL

导航

Redis 基础使用(启动/关闭/命令/变量)

内容

启动/登录/关闭 变量命令[维护] 变量类型[ 键值对/计数器/列表(消息队列) ]待续

 

启动/登录/关闭

[ root@stock.data.news.100 pts/0 2021-01-12/31@2 16:04:36 /Server/datas/redis-5.0.10-6379 ] 
# redis-server /Server/datas/redis-5.0.10-6379/6379.conf

[ root@stock.data.news.100 pts/0 2021-01-12/31@2 16:04:49 /Server/datas/redis-5.0.10-6379 ] # ps -ef | grep [r]edis root 1690 1 0 15:35 ? 00:00:03 /Server/program-files/redis/bin/redis-server 127.0.0.1:6379

[ root@stock.data.news.100 pts/0 2021-01-12/31@2 16:13:13 /Server/datas/redis-5.0.10-6379 ]
# netstat -lnutp | grep 6379                             
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      2082/redis-server 1
tcp        0      0 192.168.6.100:6379      0.0.0.0:*               LISTEN      2082/redis-server 1

[ root@stock.data.news.100 pts/0 2021-01-12/31@2 16:13:14 /Server/datas/redis-5.0.10-6379 ]
# redis-cli -h 192.168.6.100 # redis-cli -h stock.data.news.100
192.168.6.100:6379> exit

[ root@stock.data.news.100 pts/0 2021-01-12/31@2 16:13:44 /Server/datas/redis-5.0.10-6379 ]
# redis-cli
127.0.0.1:6379> exit

 

变量命令[ 支持命令补全(命令以大写的形式展示)]

# 语法:KEYS pattern
# 查看所有的变量的Key(键),注意使用,当变量过多的时候使用 KEYS * 会导致系统卡顿(遍历Redis内存上所有的变量),故线上推荐不适用 keys 命令
127.0
.0.1:6379> set k1 v1 OK 127.0.0.1:6379> set k2 v2 OK 127.0.0.1:6379> KEYS * 1) "k1" 2) "k2" 127.0.0.1:6379> KEYS k1 1) "k1" 127.0.0.1:6379> KEYS k
(empty list or set) # 没有该键的变量
127.0.0.1:6379>

# [ dbsize ] 查看目前Redis的所有变量总数(估值)
127.0.0.1:6379> DBSIZE
(integer) 2
127.0.0.1:6379>

# [ exists ] 检查变量是否存在(0:表示没有该变量)
127.0.0.1:6379> EXISTS k1 k2
(integer) 2
127.0.0.1:6379> EXISTS k1 k2 k3
(integer) 2 # 检查3个变量是否存在,只有2个变量存在
127.0.0.1:6379> EXISTS k1
(integer) 1
127.0.0.1:6379> EXISTS k3
(integer) 0

# [ del ] 变量删除(1:删除成功,0:删除不成功/没有该变量)
127.0.0.1:6379> DEL k2
(integer) 1
127.0.0.1:6379> DEL k3
(integer) 0
127.0.0.1:6379>

# [ TTL ] 检查变量的过期时间(-1:永不过期,-2:变量不存在)
# [ expire ] 变量名 过期时间(单位:秒),该变量多少秒后自动被删除
127.0.0.1:6379> TTL k1
(integer) -1
127.0.0.1:6379> EXPIRE k1 10
(integer) 1
127.0.0.1:6379> TTL k1
(integer) 7
127.0.0.1:6379> TTL k1
(integer) 6
127.0.0.1:6379> TTL k1
(integer) 4
127.0.0.1:6379> TTL k1
(integer) -2
127.0.0.1:6379> DBSIZE
(integer) 0
127.0.0.1:6379> EXISTS k1
(integer) 0
127.0.0.1:6379>

# [ persist ] 取消过期时间
127.0.0.1:6379> TTL k1
(integer) -2
127.0.0.1:6379> EXPIRE k1 100 # 若变量不存在,则返回 0
(integer) 0
127.0.0.1:6379> TTL k1
(integer) -2
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> EXPIRE k1 100
(integer) 1
127.0.0.1:6379> TTL k1
(integer) 97
127.0.0.1:6379> PERSIST k1
(integer) 1
127.0.0.1:6379> TTL k1
(integer) -1

状态码的汇总
0 命令操作不成功,前提是变量不存在
1 命令操作成功,前提是变量存在
-1 变量存在
-2 变量不存在

 

变量类型 - 键值对

# [ set/get mset/mget ] 键值对(字符串操作)
127.0.0.1:6379> set k1 v1 # 键:k1,值:v1,set 只能对一个键值对初始化
OK
127.0.0.1:6379> GET k1
"v1"
127.0.0.1:6379> MSET k2 v2 k3 v2 # mset 能对多个键值对初始化
OK
127.0.0.1:6379> MGET k1 k2 k3 # mget 能查看多个键的值
1) "v1"
2) "v2"
3) "v2"

# [ incr / incrby ] 自动累加计数器,返回自增后的值。前提值是数字。
127.0.0.1:6379> set k4 1
OK
127.0.0.1:6379> get k4
"1"
127.0.0.1:6379>
127.0.0.1:6379> INCR k4
(integer) 2
127.0.0.1:6379> get k4
"2"
127.0.0.1:6379> INCR k4
(integer) 3
127.0.0.1:6379> INCR k4
(integer) 4
127.0.0.1:6379> GET k4
"4"
127.0.0.1:6379>
127.0.0.1:6379> INCRBY k4 10 # incrby 键 步长
(integer) 14
127.0.0.1:6379> INCRBY k4 10
(integer) 24
127.0.0.1:6379> GET k4
"24"

 

变量-列表(消息队列):队列 [ 先进先出 ],堆栈 [ 后进先出 ]

消息生产者:给列表数据的一方。

消息消费者:从列表中获取数据的一方。

例子:程序A(生产者)的数据 —> Redis 数据 <— 程序B(消费者)获取

注意:lpop / rpop 没有阻塞功能,因此消费的时候,需要不停的消费(即调用 lpop / rpop)。而 brpop / blpop 具有阻塞并具有检测多个键的功能(可理解类似 linux 的命名管道)。

lpush / rpush 若列表不存在时,会自动创建,常用于初始化。lpushx / rpushx 若列表不存在时,则不发生任何操作。

# 队列 (lpush)左(先)进(rpop)右(先)出
127.0
.0.1:6379> LPUSH mylist a b c # lpush 将最左边的元素依次放入队列,第一个放入 a,第二个放入 b,第三个放入 c (integer) 3127.0.0.1:6379> LRANGE mylist 0 -1 # 队列首位的下标:0,最后一位下标:-1。最先放入的元素在队列的最后面,最后放入的元素在队列的首位。 1) "c" 2) "b" 3) "a"
127.0.0.1:6379> RPOP mylist # 从队列中删除一个元素,并返回
"a"
127.0.0.1:6379> LRANGE mylist 0 -1
1) "c"
2) "b"

# 队列(rpush)右(先)进(rpop)左(先)出
127.0.0.1:6379> RPUSH rlist a b c # rpush 将最右边的元素依次放入队列,第一个放入 c,第二个放入 b,第三个放入 a
(integer) 3
127.0.0.1:6379> LRANGE rlist 0 -1 # 语法: lrange 变量名 起始位置 步长
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> RPOP rlist # 队列的首位为左,末尾为右,rpop 将队列的最右边的元素取出。
"c"
127.0.0.1:6379> LRANGE rlist 0 -1
1) "a"
2) "b"

# lpush,rpush 控制最左或最右的元素开始依次存入队列,lpop,rpop控制队列在首位或末尾取出元素。

# 堆栈 (lpush)先进(lpop)后出
127.0.0.1:6379> LPUSH slist a b c
(integer) 3
127.0.0.1:6379> LRANGE slist 0 -1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> LPOP slist # 队列的首位为左,尾部为右,lpop 将队列的最左(首位)的元素删除并返回。
"c"
127.0.0.1:6379>

# (rpush)后进(lpop)先出。先进后出与后进先出是同一个意思。
127.0.0.1:6379> del slist
(integer) 1
127.0.0.1:6379> RPUSH slist a b c
(integer) 3
127.0.0.1:6379> LRANGE slist 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> LPOP slist
"a"

# 队列的长度
127.0.0.1:6379> LLEN rlist
(integer) 3
127.0.0.1:6379>

 

变量-列表的属性操作(删除相同值的元素 [ lrem ] / 下标赋值 [ lset ] / 下标取值 [ lindex ] / 通过下标保留元素 [ ltrim ] / 在指定元素前/后插入元素 [ linsert ])

# [ lrem ] 删除列表中的元素 
127.0
.0.1:6379> del mylist (integer) 1 127.0.0.1:6379> LPUSH mylist a b c a d e a f g h (integer) 10 127.0.0.1:6379> LRANGE mylist 0 -1 1) "h" 2) "g" 3) "f" 4) "a" 5) "e" 6) "d" 7) "a" 8) "c" 9) "b" 10) "a" 127.0.0.1:6379> LREM mylist 2 a # 2 为整数则从列表的首位开始遍历,删除 2 个值为 a 的元素 (integer) 2 127.0.0.1:6379> LRANGE mylist 0 -1 1) "h" 2) "g" 3) "f" 4) "e" 5) "d" 6) "c" 7) "b" 8) "a" 127.0.0.1:6379>
127.0.0.1:6379> del mylist
(integer) 1
127.0.0.1:6379> LPUSH mylist a b c a d e a f g h
(integer) 10
127.0.0.1:6379> LREM mylist -2 a # 2为负数,则从列表的末端开始遍历到头部,删除 2 个值为 a 的元素
(integer) 2
127.0.0.1:6379> LRANGE mylist 0 -1
1) "h"
2) "g"
3) "f"
4) "a"
5) "e"
6) "d"
7) "c"
8) "b"
127.0.0.1:6379>

# [ lset ] 为指定下标的元素赋值。0:列表的首位,-1:列表的末尾
127.0.0.1:6379> del mylist
(integer) 1
127.0.0.1:6379> LPUSH mylist 1 2 3 4
(integer) 4
127.0.0.1:6379> LRANGE mylist 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
127.0.0.1:6379> LSET mylist -1 10
OK
127.0.0.1:6379> LRANGE mylist 0 -1
1) "4"
2) "3"
3) "2"
4) "10"

# [ lindex ] 下标取值
127.0.0.1:6379> DEL mylist
(integer) 1
127.0.0.1:6379> LPUSH mylist a b c
(integer) 3
127.0.0.1:6379> LRANGE mylist 0 -1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> LINDEX mylist -1
"a"
127.0.0.1:6379> LINDEX mylist 1
"b"

# [ ltrim ] 保留指定范围内的下标元素
127.0.0.1:6379> del mylist
(integer) 1
127.0.0.1:6379> LPUSH mylist 1 2 3 4 5 6
(integer) 6
127.0.0.1:6379> LRANGE mylist 0 -1
1) "6" # 下标:0
2) "5" # 下标:1
3) "4" # 下标:2
4) "3" # 下标:3
5) "2" # 下标:4
6) "1" # 下标:5 或 -1
127.0.0.1:6379> LTRIM mylist 2 4 # 下标 2 ~ 4 的元素被保留下来,其余的删除。
OK
127.0.0.1:6379> LRANGE mylist 0 -1
1) "4"
2) "3"
3) "2"

# [ linsert ]在指定元素(注意非下标)前或后插入
127.0.0.1:6379> LRANGE mylist 0 -1
1) "4"
2) "3"
3) "2"
127.0.0.1:6379>
127.0.0.1:6379> LINSERT mylist before 3 20
(integer) 4
127.0.0.1:6379> LRANGE mylist 0 -1
1) "4"
2) "20"
3) "3"
4) "2"
127.0.0.1:6379> LINSERT mylist after 3 30
(integer) 5
127.0.0.1:6379> LRANGE mylist 0 -1
1) "4"
2) "20"
3) "3"
4) "30"
5) "2"

 

哈希(能存放多个键值对)

应用场景一:将 MySQL 的每行数据(一个对象) 对应 Redis 的一个哈希类型变量
举例:
MySQL: select * from user   ---> redis 哈希            ---> redis 哈希 HMSET                             ---> 数据获取
uid  name  job  age
1    alex   it  30     user-uid:1 name alex job it age 30   HMSET user-uid:1 uid 1 name alex job it age 30   HMGET user-uid:1 name job  == select name,job from user where uid=1
2    elsa   it  28     user-uid:2 name elsa job it age 28   HMSET user-uid:2 uid 2 name elsa job it age 28   # user-uid:2 是哈希的键,uid 1 name elsa job it age 28 是值
3    tony   it  33     user-uid:3 name tony job it age 33   HMSET user-uid:3 uid 3 name tony job it age 33   # 键的命名 user-uid:3 也可改为(库_表-主键:值) student_user-uid:3

 

# [ HMSET / HMGET / HGETALL ]
127.0
.0.1:6379> HMSET user-uid:1 uid 1 name alex job it age 30 OK 127.0.0.1:6379> HMGET user-uid:1 uid name 1) "1" 2) "alex" 127.0.0.1:6379> HGETALL user-uid:1 1) "name" 2) "alex" 3) "job" 4) "it" 5) "age" 6) "30" 7) "uid" 8) "1"

 

posted on 2021-01-13 18:50  3L·BoNuo·Lotus  阅读(145)  评论(0编辑  收藏  举报