文章目录
- Redis介绍
- Redis特点
- Redis连接
- Redis相关命令与演示
- 常用命令
- 字符串(String)
- 哈希表(Hash)
- 列表(List)
- 无序集合(Set)
- 有序集合(ZSet)
- 更多详细命令与介绍:
Redis介绍
Redis(即 Remote Dictionary Server)是一个由Salvatore Sanfilippo写的key-value存储系统,它是一个开源的、内存型数据库。它支持多种数据结构,包括string(字符串)、list(列表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的(要么成功执行要么失败完全不执行)。它可以将存储在内存的数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片(client-side sharding)来扩展写性能。
Redis特点
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- 所有数据(包括数据的存储)操作均在内存中完成
- 支持主从复制模式,更提供高可用主从复制模式(哨兵)
- 丰富的编程接口支持,如Python、Golang、Java、php、Ruby、Lua、Node.js
- 支持数据持久化(AOF、RDB)
Redis连接
登录:$ redis-cli -h host -p port -a password
(本地访问则无需加相关参数)auth password
验证密码ping
查看服务是否在运行quit
退出连接
Redis相关命令与演示
常用命令
echo message
返回对应信息select index
切换 redis 数据库(默认index为0,一共有16个数据库)keys *
查找key命令(支持正则)exists key
判断key在数据库中是否存在**type key
查看该键的数据类型del key1 key2
删除keyttl key
查看key的有效时间flushdb
删除当前数据库所有的 keyflushall
删除所有数据(一般不用,除非要跑路了)
字符串(String)
SET key value [EX seconds] [PX milliseconds] [NX|XX]
使用SET时key不存在时会添加,存在时则会修改原先值
SET可选参数介绍
-
EX seconds
: 将键的过期时间设置为 seconds 秒。 执行SET key value EX seconds
的效果等同于执行SETEX key seconds value
。 -
PX milliseconds
: 将键的过期时间设置为 milliseconds 毫秒。 执行SET key value PX milliseconds
的效果等同于执行PSETEX key milliseconds value
。
127.0.0.1:6379[1]> set name aaa EX 10
OK
(0.50s)
127.0.0.1:6379[1]> get name
"aaa"
### 10秒过后
127.0.0.1:6379[1]> get name
(nil)
-
NX
: 只在键不存在时, 才对键进行设置操作。 执行SET key value NX
的效果等同于执行SETNX key value
。
127.0.0.1:6379[1]> set name aaa
OK
127.0.0.1:6379[1]> set name bbb nx '当数据库中存在name时, 使用nx参数则会失败'
(nil)
127.0.0.1:6379[1]> get name
"aaa"
-
XX
: 只在键已经存在时, 才对键进行设置操作。
127.0.0.1:6379[1]> set name aaa xx '当数据库中不存在name时,使用xx参数则会失败 '
(nil)
- 获取长度
STRLEN key
127.0.0.1:6379[1]> get name
"aaa"
127.0.0.1:6379[1]> strlen name
(integer) 3
- 向末尾添加值
APPEND key value
- 如果键 key 已经存在并且它的值是一个字符串, APPEND 命令将把 value 追加到键 key 现有值的末尾。
- 如果 key 不存在, APPEND 就简单地将键 key 的值设为 value , 就像执行 SET key value 一样
127.0.0.1:6379[1]> get name
"aaa"
127.0.0.1:6379[1]> append name bbb
(integer) 6
127.0.0.1:6379[1]> get name
"aaabbb"
- 设置多个key值
MSET key value [key value …]
127.0.0.1:6379[1]> mset name aaa age 20
OK
- 获取多个key值
MGET key [key …]
127.0.0.1:6379[1]> mget name age
1) "aaa"
2) "20"
哈希表(Hash)
hash用来存储对象的,一般对象有多个属性和值,值的类型必须为string
操作hash的命令都是以h开始
- 添加属性
HSET hash field value
127.0.0.1:6379[1]> hset student name zhangsan
(integer) 1
- 获取属性
HGET hash field
127.0.0.1:6379[1]> hget student name
"zhangsan"
- 添加多个属性
HMSET key field value [field value …]
127.0.0.1:6379[1]> hmset student name zhangsan age 20
OK
- 获取多个属性值
HMGET key field [field …]
127.0.0.1:6379[1]> hmget student name age
1) "zhangsan"
2) "20"
- 获取所有属性
HKEYS key
127.0.0.1:6379[1]> hkeys student
1) "name"
2) "age"
- 获取所有属性的值
HVALS key
127.0.0.1:6379[1]> hvals student
1) "zhangsan"
2) "20"
- 获取属性的数量
HLEN key
127.0.0.1:6379[1]> hlen student
(integer) 2
- 删除多个属性值
HDEL key field [field …]
# 删除student['age']
127.0.0.1:6379[1]> hdel student age
(integer) 1
127.0.0.1:6379[1]> hkeys student
1) "name"
列表(List)
- 列表的元素类型为string
- 按照插入顺序排列
- 向列表key左侧(首部)插入元素
LPUSH key value [value …]
127.0.0.1:6379[1]> lpush languages Java Python
(integer) 2
- 查看列表key中的元素
LRANGE key start stop
127.0.0.1:6379[1]> lrange languages 0 -1 '-1表示列表的最后一个索引位置(这点和Python类似)'
1) "Python" '向左加入元素时,后加入的元素会在列表的前面'
2) "Java"
- 向列表key右侧(尾部)添加元素
RPUSH key value [value …]
127.0.0.1:6379[1]> rpush languages C
(integer) 3
127.0.0.1:6379[1]> lrange languages 0 -1
1) "Python"
2) "Java"
3) "C"
- 移除并返回列表key的头元素
LPOP key
127.0.0.1:6379[1]> lpop languages
"Python"
127.0.0.1:6379[1]> lrange languages 0 -1
1) "Java"
2) "C"
- 查看列表长度
LLEN key
127.0.0.1:6379[1]> llen languages
(integer) 2
- 根据索引返回列表元素
LINDEX key index
向列表尾部添加3个元素
127.0.0.1:6379[1]> rpush languages Python PHP C++
(integer) 5
127.0.0.1:6379[1]> lrange languages 0 -1
1) "Java"
2) "C"
3) "Python"
4) "PHP"
5) "C++"
127.0.0.1:6379[1]> lindex languages 2
"Python" '索引为2的位置是Python(列表索引从0开始)'
- 设置列表key指定位置的元素值
LSET key index value
127.0.0.1:6379[1]> lset languages 3 R '将索引为3的位置设为R'
OK
127.0.0.1:6379[1]> lrange languages 0 -1
1) "Java"
2) "C"
3) "Python"
4) "R"
5) "C++"
- 在指定元素的前后添加新元素
LINSERT key BEFORE|AFTER pivot value
127.0.0.1:6379[1]> linsert languages before Python JavaScript '在Python前加入JavaScript'
(integer) 6
127.0.0.1:6379[1]> lrange languages 0 -1
1) "Java"
2) "C"
3) "JavaScript"
4) "Python"
5) "R"
6) "C++"
- 删除列表key中的指定元素
LREM key count value
- count > 0 : 从头向尾搜索,移除与 value 相等的元素,数量为 count 。
- count < 0 : 从尾向头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
- count = 0 : 移除列表中所有与 value 相等的值。
127.0.0.1:6379[1]> rpush list1 aa bb cc aa bb cc aa bb cc
(integer) 9
127.0.0.1:6379[1]> lrem list1 2 bb '从头向尾删除2次bb'
(integer) 2
127.0.0.1:6379[1]> lrange list1 0 -1
1) "aa"
2) "cc"
3) "aa"
4) "cc"
5) "aa"
6) "bb"
7) "cc"
127.0.0.1:6379[1]> lrem list1 -2 cc '从尾向头删除2次cc'
(integer) 2
127.0.0.1:6379[1]> lrange list1 0 -1
1) "aa"
2) "cc"
3) "aa"
4) "aa"
5) "bb"
无序集合(Set)
- 元素类型为string
- 元素具有唯一性,不重复
- 集合没有修改操作
- 向集合添加元素
SADD key member [member …]
127.0.0.1:6379[1]> sadd set aaa bbb ccc aaa
(integer) 3
- 获取集合中所有元素
SMEMBERS key
127.0.0.1:6379[1]> smembers set '集合的顺序与添加顺序无关'
1) "ccc"
2) "aaa" '添加重复的aaa没有效果'
3) "bbb"
- 获取集合中的元素个数
SCARD key
127.0.0.1:6379[1]> scard set
(integer) 3
- 删除集合元素
SREM key member [member …]
127.0.0.1:6379[1]> srem set aaa ccc
(integer) 2
127.0.0.1:6379[1]> smembers set
1) "bbb"
- 集合间取交集
SINTER key [key …]
127.0.0.1:6379[1]> sadd set1 aaa bbb ccc ddd
(integer) 4
127.0.0.1:6379[1]> sadd set2 aaa eee fff bbb
(integer) 4
127.0.0.1:6379[1]> sinter set1 set2
1) "aaa"
2) "bbb"
- 集合间取并集
SUNION key [key …]
127.0.0.1:6379[1]> sunion set1 set2
1) "aaa"
2) "bbb"
3) "fff"
4) "ddd"
5) "ccc"
6) "eee"
- 集合间取差集
SDIFF key [key …]
127.0.0.1:6379[1]> sdiff set1 set2 '存在set1中但不存在set2中'
1) "ccc"
2) "ddd"
有序集合(ZSet)
- 元素类型为string类型
- 每个元素都会关联一个double类型的score,表示权重,通过权重将元素从大到小排列
- 添加元素
ZADD key score member [[score member] [score member] …]
'向grade中添加权重80 张三的元素, 权重92 lisi的元素和权重78 wangwu的元素 '
127.0.0.1:6379[1]> zadd grade 80 zhangsan 92 lisi 78 wangwu
(integer) 3
- 查看元素个数
ZCARD key
127.0.0.1:6379[1]> zcard grade
(integer) 3
- 查看指定元素的权值
ZSCORE key member
127.0.0.1:6379[1]> zscore grade lisi
"92"
- 查看元素(正序)
ZRANGE key start stop [WITHSCORES]
添加withscores则会显示对应分数
127.0.0.1:6379[1]> zrange grade 0 -1 '根据权重由小到大排列'
1) "wangwu"
2) "zhangsan"
3) "lisi"
- 查看元素(倒序)
ZREVRANGE key start stop [WITHSCORES]
127.0.0.1:6379[1]> zrevrange grade 0 -1
1) "lisi"
2) "zhangsan"
3) "wangwu"
- 查看分数在指定区间的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
127.0.0.1:6379[1]> zrangebyscore grade 78 80 # 78<=score<=80
1) "wangwu"
2) "zhangsan"
127.0.0.1:6379[1]> zrangebyscore grade 78 (80 # 78<=score<80
1) "wangwu"
- 查看分数在指定区间的元素个数
ZCOUNT key min max
127.0.0.1:6379[1]> zcount grade 80 92
(integer) 2
- 删除元素
ZREM key member [member …]
127.0.0.1:6379[1]> zrem grade zhangsan lisi
(integer) 2
127.0.0.1:6379[1]> zrange grade 0 -1
1) "wangwu"
- 根据权重区间删除元素
ZREMRANGEBYSCORE key min max
127.0.0.1:6379[1]> zremrangebyscore grade 78 80 '删除 78<=score<80的元素'
(integer) 2
127.0.0.1:6379[1]> zrange grade 0 -1
1) "lisi"
更多详细命令与介绍: