Redis
1 Redis服务启停、客户端连接
1.1 Redis服务启动
- 启动服务时,使用配置文件:
redis-server redis.conf
- 示例
[root@redis redis-7.0.2]# redis-server redis.conf
1.2 Redis客户端连接
redis-cli [option]
- 示例:使用密码连接
[root@redis redis-7.0.2]# redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379>
2 常用命令
2.1 set
- 语法:
set key value [NX|XX] [GET] [EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTL]
- 功能:新建或更新键值
- 示例:
127.0.0.1:6379> set a v1
OK
2.2 get
- 语法:
get key
- 功能:获取指定键的值
- 示例:
127.0.0.1:6379> get a
"v2"
2.3 keys
- 语法:
keys pattern
- 功能:显示匹配的key
- 示例
127.0.0.1:6379> keys *
1) "a"
2.4 exists
- 语法:
exists key [key ...]
- 功能:判断key是否存在
- 示例
127.0.0.1:6379> keys *
1) "a"
2) 127.0.0.1:6379> exists a
(integer) 1
127.0.0.1:6379> exists b
(integer) 0
2.5 del
- 语法:
del key [key ...]
- 功能:删除key
- 示例
127.0.0.1:6379> keys *
1) "a"
2) "b"
127.0.0.1:6379> del a b
(integer) 2
127.0.0.1:6379> keys *
(empty array)
3 数据类型
3.1 String
3.1.1 incr、decr
如果key不存在,则先创建key,并初始化值0;值可以是负数
127.0.0.1:6379> incr a
(integer) 1
127.0.0.1:6379> decr a
(integer) 0
127.0.0.1:6379> decr a
(integer) -1
3.1.2 strlen
- 功能:计算String长度
- 语法:
strlen key
- 示例
127.0.0.1:6379> get a
"123456"
127.0.0.1:6379> strlen a
(integer) 6
3.1.3 append
- 功能:追加String
- 语法:
append key value
- 示例
127.0.0.1:6379> append a 123
(integer) 3
127.0.0.1:6379> get a
"123"
127.0.0.1:6379> append a 456
(integer) 6
127.0.0.1:6379> get a
"123456"
3.2 Hash
- 特点:一个hash key可以有多个字段,每一个字段都有一个值
3.2.1 hset、hmset
- 功能:给hash字段赋值
- 语法:
hset key field value [field value ...]
hmset key field value [field value ...]
- 示例
127.0.0.1:6379> hset h1 id 001 age 15
(integer) 2
127.0.0.1:6379> hmset h2 id 002 age 14
OK
3.2.2 hget
- 功能:获取hash字段值
- 语法:
hget key field
- 示例
127.0.0.1:6379> hget h1 id
"001"
127.0.0.1:6379> hget h1 age
"15"
````
#### 3.2.3 hvals
- 功能:获取hash所有字段值
- 语法:`hvals key`
- 示例
```shell
127.0.0.1:6379> hvals h1
1) "001"
2) "14"
````
#### 3.2.4 hkeys
- 功能:获取指定hash字段名
- 语法:`hkeys key`
- 示例
```shell
127.0.0.1:6379> hkeys h1
1) "id"
2) "age"
127.0.0.1:6379> hkeys h2
1) "id"
2) "age"
3.2.5 hlen
- 功能:获取hash字段数量
- 语法:
hlen key
- 示例
127.0.0.1:6379> hkeys h1
1) "id"
2) "age"
127.0.0.1:6379> hlen h1
(integer) 2
3.2.6 hdel
- 功能:删除hash字段
- 语法:
hdel key field [field ...]
- 示例
127.0.0.1:6379> hkeys h1
1) "id"
2) "age"
127.0.0.1:6379> hdel h1 id age
(integer) 2
127.0.0.1:6379> hkeys h1
(empty array)
3.2.7 exists
- 功能:判断hash字段是否存在
- 语法:
hexists key field
- 示例
127.0.0.1:6379> hset h1 id 001 age 15
(integer) 2
127.0.0.1:6379> hexists h1 id
(integer) 1
127.0.0.1:6379> hexists h1 name
(integer) 0
3.2.8 hincrby
- 功能:给hash字段(整形)增加指定增量(可以负数)
- 语法:
hincrby key field increment
- 示例
127.0.0.1:6379> hincrby h1 age 1
(integer) 16
127.0.0.1:6379> hincrby h1 age -2
(integer) 14
127.0.0.1:6379> hget h1 age
"14"
3.2.9 hincrbyfloat
- 功能:给hash字段(浮点型)增加指定增量
- 语法:
hincrbyfloat key field increment
- 示例
127.0.0.1:6379> hset h1 weight 59.5
(integer) 1
127.0.0.1:6379> hincrbyfloat h1 weight 1.4
"60.9"
127.0.0.1:6379> hget h1 weight
"60.9"
3.3 List
3.3.1 LPUSH、RPUSH
- 功能:
LPUSH
:向list头部压入数据
RPUSH
:向list尾部压入数据
- 语法:
LPUSH key element [element ...]
RPUSH key element [element ...]
- 示例
127.0.0.1:6379> LPUSH L1 a b c
(integer) 3
127.0.0.1:6379> RPUSH L2 a b c
(integer) 3
127.0.0.1:6379> LRANGE L1 0 2
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> LRANGE L2 0 2
1) "a"
2) "b"
3) "c"
3.3.2 LPOP、RPOP
- 功能:
LPUSH
:从list头部移除数据
RPUSH
:从list尾部移除数据
- 语法:
LPOP key [count]
RPOP key [count]
- 示例
127.0.0.1:6379> LRANGE L2 0 2
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> LPOP L1 1
1) "c"
127.0.0.1:6379> RPOP L1 1
1) "a"
127.0.0.1:6379> LRANGE L1 0 2
1) "b"
3.3.3 LSET
- 功能:修改索引位置的数据
- 语法:
LSET key index element
- 示例:
127.0.0.1:6379> LSET L1 0 a1
OK
127.0.0.1:6379> LRANGE L1 0 2
1) "a1"
2) "b"
3) "a"
3.3.4 LINDEX
- 功能:获取指定索引数据
- 语法:
LINDEX key index
- 示例:
127.0.0.1:6379> LRANGE L1 0 2
1) "a1"
2) "b"
3) "a"
127.0.0.1:6379> LINDEX L1 0
"a1"
3.3.5 LLEN
- 功能:计算list长度
- 语法:
LLEN key
- 示例:
127.0.0.1:6379> LLEN L1
(integer) 3
3.3.6 LRANGE
- 功能:返回list区间范围数据
- 语法:
LRANGE key start stop
- 示例:
127.0.0.1:6379> LRANGE L1 0 2
1) "a1"
2) "b"
3) "a"
3.3.7 LINSERT
- 功能:在list某个值前或后添加数据
- 语法:
LINSERT key BEFORE|AFTER pivot element
- 示例:
127.0.0.1:6379> LINSERT L1 AFTER a a2
(integer) 4
127.0.0.1:6379> LRANGE L1 0 3
1) "a1"
2) "b"
3) "a"
4) "a2"
3.4 Set
Set 是一个无序集合,内部数据唯一,是由hashtable实现
3.4.1 SADD
- 功能:向Set添加元素
- 语法:
SADD key member [member ...]
- 示例:
127.0.0.1:6379> SADD s1 1 2
(integer) 2
127.0.0.1:6379> SMEMBERS s1
1) "1"
2) "2"
3.4.2 SCARD
- 功能:返回Set元素数量
- 语法:
SCARD key
- 示例:
127.0.0.1:6379> SMEMBERS s1
1) "c"
2) "b"
127.0.0.1:6379> SCARD s1
(integer) 2
3.4.3 SMEMBERS
- 功能:查看Set元素成员
- 语法:
SMEMBERS key
- 示例:
127.0.0.1:6379> SMEMBERS s1
1) "1"
2) "2"
3.4.4 SISMEMBER
- 功能:查看Set元素成员是否存在
- 语法:
SISMEMBER key member
- 返回值:
- 示例:
127.0.0.1:6379> SMEMBERS s1
1) "1"
2) "2"
127.0.0.1:6379> SISMEMBER s1 1
(integer) 1
3.4.5 SRANDMEMBER
- 功能:随机返回Set集合元素
- 语法:
SRANDMEMBER key [count]
- 1)当
count > 0
且count <= 集合大小
:返回元素不重复
- 2)当
count > 0
且count > 集合大小
:返回元素重复
- 3)当
count < 0
且|count| <= 集合大小
:返回元素不重复(同1)
- 4)当
count < 0
且|count| > 集合大小
:返回元素重复(同2)
- 返回值:返回移除元素的个数
- 示例:
127.0.0.1:6379> SMEMBERS s1
1) "1"
2) "b"
3) "a"
4) "c"
127.0.0.1:6379> SRANDMEMBER s1 3
1) "a"
2) "1"
3) "b"
127.0.0.1:6379> SRANDMEMBER s1 -3
1) "1"
2) "b"
3) "c"
127.0.0.1:6379> SRANDMEMBER s1 -5
1) "1"
2) "1"
3) "b"
4) "1"
5) "b"
127.0.0.1:6379> SRANDMEMBER s1 -5
1) "1"
2) "a"
3) "1"
4) "b"
5) "1"
3.4.6 SREM
- 功能:移除Set中的元素
- 语法:
SREM key member [member ...]
- 返回值:返回移除元素的个数
- 示例:
127.0.0.1:6379> SMEMBERS s1
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
127.0.0.1:6379> SREM s1 2
(integer) 1
127.0.0.1:6379> SMEMBERS s1
1) "1"
2) "b"
3) "a"
4) "c"
3.4.7 SPOP
- 功能:随机移除Set中元素
- 语法:
SPOP key [count]
- 示例:
127.0.0.1:6379> SMEMBERS s1
1) "a"
2) "c"
3) "1"
4) "b"
127.0.0.1:6379> SPOP s1 1
1) "1"
127.0.0.1:6379> SMEMBERS s1
1) "a"
2) "c"
3) "b"
3.4.8 SMOVE
- 功能:从一个Set中移动元素到另一个Set中
- 语法:
SMOVE source destination member
- 返回值:
- 示例:
127.0.0.1:6379> SMEMBERS s2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6379> SMOVE s1 s2 a
(integer) 1
127.0.0.1:6379> SMEMBERS s2
1) "5"
2) "3"
3) "a"
4) "6"
5) "2"
6) "1"
7) "4"
3.4.9 SDIFF
- 功能:返回一个Set与另一个Set的差集的元素
- 语法:
DIFF key [key ...]
- 示例:
127.0.0.1:6379> SADD s1 a b c 1 2 3 4 5
(integer) 8
127.0.0.1:6379> SADD s2 b c d 4 5 6 7 8
(integer) 8
127.0.0.1:6379> SDIFF s1 s2
1) "3"
2) "a"
3) "1"
4) "2"
127.0.0.1:6379> SDIFF s2 s1
1) "8"
2) "d"
3) "6"
4) "7"
3.4.10 SDIFFSTORE
- 功能:将一个Set与另一个Set的差集的元素存在另一个Set中
- 语法:
SDIFFSTORE destination key [key ...]
- 示例:
127.0.0.1:6379> SDIFFSTORE s3 s1 s2
(integer) 4
127.0.0.1:6379> SMEMBERS s3
1) "3"
2) "a"
3) "1"
4) "2"
3.4.11 SINTER
- 功能:返回一个Set与另一个Set的交集的元素
- 语法:
SINTER key [key ...]
- 示例:
127.0.0.1:6379> SADD s1 a b c 1 2 3 4 5
(integer) 8
127.0.0.1:6379> SADD s2 b c d 4 5 6 7 8
(integer) 8
127.0.0.1:6379> SINTER s1 s2
1) "5"
2) "c"
3) "b"
4) "4"
3.4.12 SINTERSTORE
- 功能:将一个Set与另一个Set的交集的元素存在另一个Set中
- 语法:
SINTERSTORE destination key [key ...]
- 示例:
127.0.0.1:6379> SINTERSTORE s4 s1 s2
(integer) 4
127.0.0.1:6379> SMEMBERS s4
1) "5"
2) "c"
3) "4"
4) "b"
3.4.13 SUNION
- 功能:返回一个Set与另一个Set的并集的元素
- 语法:
SUNION key [key ...]
- 示例:
127.0.0.1:6379> SADD s1 a b c 1 2 3 4 5
(integer) 8
127.0.0.1:6379> SADD s2 b c d 4 5 6 7 8
(integer) 8
127.0.0.1:6379> SUNION s1 s2
1) "5"
2) "d"
3) "6"
4) "7"
5) "2"
6) "8"
7) "1"
8) "4"
9) "3"
10) "a"
11) "c"
12) "b"
3.4.14 SUNIONSTORE
- 功能:将一个Set与另一个Set的并集的元素存在另一个Set中
- 语法:
SUNIONSTORE destination key [key ...]
- 示例:
127.0.0.1:6379> SUNIONSTORE s5 s1 s2
(integer) 12
127.0.0.1:6379> SMEMBERS s5
1) "5"
2) "d"
3) "6"
4) "7"
5) "2"
6) "8"
7) "1"
8) "4"
9) "3"
10) "a"
11) "c"
12) "b"
3.5 ZSet
title: ZSet 特点
- ZSet 是有序集合,且元素不重复(Set是无序集合)。
- 每一个元素关联一个64位浮点型分数,并通过分数来排序,分数可以重复
3.5.1 ZADD
- 功能:向ZSet集合添加元素
- 语法:
ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]
- XX: 仅仅更新存在的成员,不添加新成员。
- NX: 不更新存在的成员。只添加新成员。
- LT: 只有当新分数小于当前分数时才更新现有元素。此标志并不阻止添加新元素。
- GT: 只有当新分数大于当前分数时才更新现有元素。此标志并不阻止添加新元素。
- CH: 修改返回值为发生变化的成员总数,原始是返回新添加成员的总数 (CH 是 changed 的意思)。更改的元素是新添加的成员,已经存在的成员更新分数。 所以在命令中指定的成员有相同的分数将不被计算在内。注:在通常情况下,
ZADD
返回值只计算新添加成员的数量。
- INCR: 当
ZADD
指定这个选项时,成员的操作就等同ZINCRBY命令,对成员的分数进行递增操作。
- 示例
127.0.0.1:6379> ZADD z1 78.32 a 56.35 b 88.01 c
(integer) 3
127.0.0.1:6379> ZRANGE z1 0 2
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> ZMSCORE z1 a b c
1) "78.319999999999993"
2) "56.350000000000001"
3) "88.010000000000005"
3.5.2 ZRANGE
- 功能:返回ZSet区间范围元素
- 语法:
ZRANGE key min max [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]
- 示例:
127.0.0.1:6379> ZADD z1 78.32 a 56.35 b 88.01 c
(integer) 3
127.0.0.1:6379> ZRANGE z1 0 2
1) "b"
2) "a"
3) "c"
3.5.3 ZMSCORE
- 功能:返回ZSet元素的score分数
- 语法:
ZMSCORE key member [member ...]
- 示例:
127.0.0.1:6379> ZADD z1 78.32 a 56.35 b 88.01 c
(integer) 3
127.0.0.1:6379> ZMSCORE z1 a b c
1) "78.319999999999993"
2) "56.350000000000001"
3) "88.010000000000005"
4 多数据库
1. Redis下数据库是由一个整数索引标识,可以通过redis.conf配置文件中`databases = num`来设置数据库总数
2. 客户端默认连接数据库0
3. 通过`select index`来切换数据库
4.1 select
- 功能:切换数据库
- 语法:
select index
- 示例:
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> keys *
1) "id1"
2) "h2"
3) "h1"
4) "L2"
5) "L1"
6) "z1"
7) "student1"
8) "a"
127.0.0.1:6379> select 3
OK
127.0.0.1:6379[3]> keys *
(empty array)
4.2 4.2.flushdb
- 功能:清空当前数据库数据
- 语法:
flushdb [ASYNC|SYNC]
- 示例:
127.0.0.1:6379[4]> keys *
1) "id1"
127.0.0.1:6379[4]> flushdb
OK
127.0.0.1:6379[4]> keys *
(empty array)
4.3 flushall
- 功能:清空所有数据库数据
- 语法:
flushall [ASYNC|SYNC]
- 示例:
127.0.0.1:6379[3]> keys *
1) "id2"
127.0.0.1:6379[3]> select 0
OK
127.0.0.1:6379> keys *
1) "h2"
2) "h1"
3) "L2"
4) "L1"
5) "z1"
6) "student1"
7) "a"
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> select 3
OK
127.0.0.1:6379[3]> keys *
(empty array)
4.4 move
- 功能:将一个数据库中key移动到另一个数据库
- 语法:
move key db
- 示例:
127.0.0.1:6379[3]> keys *
1) "id1"
2) "id2"
127.0.0.1:6379[3]> move id1 4
(integer) 1
127.0.0.1:6379[3]> keys *
1) "id2"
127.0.0.1:6379[3]> select 4
OK
127.0.0.
5 事务
title: Redis事务特点
1. 批量操作在发送EXEC命令前被放入队列缓存。
2. 收到EXEC命令后进入事务执行,事务中任意命令执行失败,其余命令依然被执行。
3. 在事务执行过程中,其他客户端提交的命令请求不会插入到事务执行命令列中。
title: Redis事务过程
1. 以`multi`标记事务开始
2. 以`exec`标记执行事务中已提交的命令
3. `discard`不执行事务中命令,结束事务
127.0.0.1:6379[3]> set user:id1 10000
OK
127.0.0.1:6379[3]> get user:id1
"10000"
127.0.0.1:6379[3]> multi
OK
127.0.0.1:6379[3](TX)> incr user:id1
QUEUED
127.0.0.1:6379[3](TX)> incr user:id1
QUEUED
127.0.0.1:6379[3](TX)> get user:id1
QUEUED
127.0.0.1:6379[3](TX)> exec
1) (integer) 10001
2) (integer) 10002
3) "10002"
127.0.0.1:6379[3]> multi
OK
127.0.0.1:6379[3](TX)> incr user:id1
QUEUED
127.0.0.1:6379[3](TX)> incr user:id1
QUEUED
127.0.0.1:6379[3](TX)> discard
OK
5.1 watch
- 功能:监听事务中的key,当监听的key在exec事务时被其它客户端修改,则执行exec事务时会失败
- 语法:
watch key [key ...]
- 示例:在监听key后,开启事务,此时另一个客户端修改了key的值,最好执行exec,返回nil错误
127.0.0.1:6379[3]> watch user:id1
OK
127.0.0.1:6379[3]> multi
OK
127.0.0.1:6379[3](TX)> incrby user:id1 100
QUEUED
127.0.0.1:6379[3](TX)> exec
(nil)
6. 文档