文章目录

  • 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 删除key
ttl key 查看key的有效时间
flushdb 删除当前数据库所有的 key
flushall 删除所有数据(一般不用,除非要跑路了)

字符串(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
  1. 如果键 key 已经存在并且它的值是一个字符串, APPEND 命令将把 value 追加到键 key 现有值的末尾。
  2. 如果 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)

  1. 列表的元素类型为string
  2. 按照插入顺序排列
  • 向列表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)

  1. 元素类型为string
  2. 元素具有唯一性,不重复
  3. 集合没有修改操作
  • 向集合添加元素 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)

  1. 元素类型为string类型
  2. 每个元素都会关联一个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"

更多详细命令与介绍:

Redis命令参考