学习总结

(1)​​LREM​​​将用于从列表 key 中删除前 count 个值等于 ​​element​​ 的元素。 这个 count 参数通过下面几种方式影响这个操作,如果count > 0, 从头到尾删除值为 value 的元素;如果count < 0,将从尾到头删除值为 value 的元素如果 count = 0 将移除所有值为 value 的元素
(2)如果在打开redis(​​​redis-cli​​​)后操作的时候,报错​​(error) NOAUTH Authentication required.​​​则大概率需要填密码,输入​​127.0.0.1:6379> auth "密码"​​即可。

文章目录

  • ​​学习总结​​
  • ​​一、redis简介:​​
  • ​​1.0 redis特点​​
  • ​​(1)所有的数据都以 Key-value 的形式存储。​​
  • ​​(2)所有的数据都存储在内存中​​
  • ​​1.1 安装:​​
  • ​​(1)安装Redis服务器:​​
  • ​​(2)启动Redis服务:​​
  • ​​1.2 命令:​​
  • ​​1、基本操作命令:​​
  • ​​(1)启动Redis​​
  • ​​(2)连接Redis​​
  • ​​(3)停止Redis​​
  • ​​(4)切换库指令​​
  • ​​(5)删除当前库的数据​​
  • ​​(6)删除所有库的数据​​
  • ​​(7)查看key的数量​​
  • ​​2、Key的操作命令:​​
  • ​​(1)查找符合模板的Key​​
  • ​​(2)查找存在key的数量​​
  • ​​(3)设置过期时间​​
  • ​​(4)Key所属类型​​
  • ​​(5)删除Key​​
  • ​​3、字符串类型—string命令:​​
  • ​​(1)基础命令​​
  • ​​(2)常用命令​​
  • ​​4、列表—list命令:​​
  • ​​(1)基本命令​​
  • ​​(2)常用命令​​
  • ​​5、哈希类型—hash命令:​​
  • ​​(1)基本命令​​
  • ​​(2)常用命令​​
  • ​​6、集合类型—set命令:​​
  • ​​(1)基本命令​​
  • ​​(2)常用命令​​
  • ​​7、有序集合类型—sortedset命令:​​
  • ​​(1)基本命令​​
  • ​​(2)常用命令​​
  • ​​1.3 使用Redis DeskTop Manager​​
  • ​​Reference​​

一、redis简介:

1.0 redis特点

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。由于是内存数据库,读写非常高速,可达10w/s的评率,所以一般应用于数据变化快、实时通讯、缓存等。但内存数据库通常要考虑机器的内存大小。Redis 是完全开源免费的,遵守 BSD 协议,是一个灵活的高性能 key-value 数据结构存储,可以用来作为数据库、缓存和消息队列。相比于其他的 key-value 缓存产品有以下三个特点:

  • Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载到内存使用。
  • Redis 不仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。
  • Redis 支持主从复制,即 master-slave 模式的数据备份。

Redis 是当今业界最主流的内存数据库。

(1)所有的数据都以 Key-value 的形式存储。

Key 只能是字符串,value 可支持的数据结构包括 string(字符串)、list(链表)、set(集合)、zset(有序集合) 和 hash(哈希)。这个特点决定了 Redis 的使用方式,无论是存储还是获取,都应该以键值对的形式进行,并且根据你的数据特点,设计值的数据结构。

(2)所有的数据都存储在内存中

磁盘只在持久化备份或恢复数据时起作用。
这个特点决定了 Redis 的特性:一是 QPS 峰值可以很高,二是数据易丢失,所以我们在维护 Redis 时要充分考虑数据的备份问题,或者说,不应该把关键的业务数据唯一地放到 Redis 中。但对于可恢复,不关乎关键业务逻辑的推荐特征数据,就非常适合利用 Redis 提供高效的存储和查询服务。

QPS:每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。

1.1 安装:

本项目是基于Ubuntu环境进行开发,因此接下来都以Ubuntu的环境为基础,对于其他开发环境,大家可以参考相关的​​资料​​进行学习。

(1)安装Redis服务器:

sudo apt-get install redis-server

下载完成的结果

【新闻推荐系统】(task2)Redis篇(上)_redis

(2)启动Redis服务:

一般来说,当安装完成后,Redis服务器会自动启动,可以通过以下命令检查是否启动成功。(ps:如果Active显示为 active(running) 状态:表示redis已在运行,启动成功)

service redis-server status

【新闻推荐系统】(task2)Redis篇(上)_数据_02

检查当前进程,查看redis是否启动。(ps: 可以看到redis服务正在监听6379端口)

ps -aux|grep redis-server

【新闻推荐系统】(task2)Redis篇(上)_数据_03

或者进入redis客户端,与服务器进行通信,当输入ping命令,如果返回 PONG 表示Redis已成功安装。

redis-cli

【新闻推荐系统】(task2)Redis篇(上)_数据_04

上面的127.0.0.1 是redis服务器的 IP 地址,6379 是 Redis 服务器运行的端口。

1.2 命令:

下面简单介绍一些常用的Redis命令:

1、基本操作命令:

(1)启动Redis
redis-server [--daemonize yes][--port 6379]

可以通过带参数方式来启动,如果参数过多,可以使用/etc/redis/redis.conf下面的配置文件来启动Redis。

redis-server /etc/redis/redis.conf
(2)连接Redis
redis-cli [-h host -p port -a password]

其中上面参数默认的是redis-server的默认地址和端口号,password可以在服务启动时采用参数的方式或者配置文件方式都可进行设置。因此可以通过redis-cli,可以连上我们服务器端的redis服务。

(3)停止Redis

停止Redis有两种方法,一种是通过 redis-cli 停止,另一种是通过杀掉redis服务进程

> redis-cli shutdown

> kill redis-pid
(4)切换库指令

redis.conf配置中默认16个库,下标从0~15。进入客服端默认选中第0个库,可以通过select命令进行切换,index表示库的小标。

127.0.0.1:6379> SELECT index
(5)删除当前库的数据

删除当前选择的数据库中的所有数据,这个命令永远不会出现失败。

127.0.0.1:6379[1]> FLUSHDB
(6)删除所有库的数据

删除所有数据库里面的数据,注意是所有数据库,这个命令永远不会出现失败。

127.0.0.1:6379[1]> FLUSHALL
(7)查看key的数量

查看当前选择的库中key的数量

127.0.0.1:6379> DBSIZE

测试以上命令

neu@neu:~$ redis-server --daemonize yes --port 6378 --requirepass 123456
28518:C 26 Oct 20:52:56.389 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
28518:C 26 Oct 20:52:56.389 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=28518, just started
28518:C 26 Oct 20:52:56.389 # Configuration loaded
neu@neu:~$ redis-cli -p 6378 -a 123456
127.0.0.1:6378> set name jiangyou # 在第0个数据库插入一个值
OK
127.0.0.1:6378> select 1 # 选择第1个数据库
OK
127.0.0.1:6378[1]> set age 26 # 在第1个数据库插入一个值
OK
127.0.0.1:6378[1]> DBSIZE # 第1个数据库当前的key值数量
(integer) 1
127.0.0.1:6378[1]> FLUSHDB # 删除第1个数据库的所有值
OK
127.0.0.1:6378[1]> DBSIZE # 删除后数据库中没有值
(integer) 0
127.0.0.1:6378[1]> SELECT 0 # 切换到第0个数据库
OK
127.0.0.1:6378> DBSIZE # 第1个数据库的值存在,因此FLUSHDB只删除第1个数据库的所有值
(integer) 1
127.0.0.1:6378> SELECT 1
OK
127.0.0.1:6378[1]> FLUSHALL # 切换到第1个数据库,使用FLUSHALL删除所有数据库的值
OK
127.0.0.1:6378[1]> SELECT 0
OK
127.0.0.1:6378> DBSIZE # 切换到第0个数据库,发现所有的值已被删除
(integer) 0

2、Key的操作命令:

该部分指令主要是为了对数据库中的key进行增删改查等一些列操作,下面主要介绍几个常用的命令。

(1)查找符合模板的Key
KEYS pattern

该指令查找数据库所有符合pattern的key,其中pattern可以为?、* 、[abc…]、[a-d]等方式。其中?代表一个任意一个字符,*代表任意0个或多个字符,[abc…]代表只能是[]中的值,[a-d]代表a到d范围内总的值。

127.0.0.1:6378> keys *
1) "age"
2) "school"
3) "home"
4) "name"
127.0.0.1:6378> keys *e
1) "age"
2) "home"
3) "name"
127.0.0.1:6378> keys a?e
1) "age"
127.0.0.1:6378> keys [a-n][ao]me
1) "home"
2) "name"
127.0.0.1:6378> keys [a-n][a]me
1) "name"
(2)查找存在key的数量
EXISTS key or [key…]

该指令为了查找一个或多个key,返回存在key值的数量。

127.0.0.1:6378> exists name
(integer) 1
127.0.0.1:6378> exists name home id
(integer) 2
(3)设置过期时间
EXPIRE key seconds

expire 设置 key 的过期时间,时间过期后,key 会被自动删除,设置成功返回1,key不存在返回0。

TTL key

ttl 命令以秒为单位返回key的剩余过期时间,如果key不存在返回 -2 key 存在但没有关联超时时间则返回 -1 。

127.0.0.1:6378> expire name 30
(integer) 1
127.0.0.1:6378> ttl name
(integer) 26
127.0.0.1:6378> ttl name
(integer) -2
127.0.0.1:6378> ttl age
(integer) -1
127.0.0.1:6378> ttl id
(integer) -2
(4)Key所属类型
TYPE key

type命令以字符串的形式返回存储在 ​​key​​​ 中的值的类型,可返回的类型有:​​string​​​, ​​list​​​, ​​set​​​, ​​zset​​​,​​hash​​​ 和 ​​stream​​​,如果key值不存在返回​​none​​。

127.0.0.1:6378> set key1 "value"
OK
127.0.0.1:6378> lpush key2 "value"
(integer) 1
127.0.0.1:6378> SADD key3 "value"
(integer) 1
127.0.0.1:6378> type key1
string
127.0.0.1:6378> type key2
list
127.0.0.1:6378> type key3
set
127.0.0.1:6378> type key
none
(5)删除Key
DEL key or [key…]

del命令删除指定的key,不存在的key忽略,返回0,如果key存在,返回删除的key的个数。

127.0.0.1:6378> del key
(integer) 0
127.0.0.1:6378> del key1 key2
(integer) 2

3、字符串类型—string命令:

字符串是Redis中最常见的数据类型,它能够存储任何形式的字符串,其中包括二进制格式,JSON格式,序列化格式等数据。而string相关的命令则是用于管理redis字符串值,下面介绍一些常见命令。

(1)基础命令
  • SET
    set命令将key是定为指定的字符串,如果key存在,则会覆盖原来的值。
SET key value [EX seconds] [PX milliseconds] [NX|XX]

其中set可以为设定的值设置过期时间,EX表示秒数,PX表示毫秒。参数NX表示只有键key不存在的时候才会设置key的值,XX表示只有键key存在的时候才会设置key的值。

  • GET
    get命令返回与键 ​​key​​ 相关联的字符串值。
GET key

如果key不存在,返回nil,如果key的值是非字符串类型,那么返回一个错误。

  • APPEND
    append命令将指定的key追加值。如果key存在,并且是字符串,则会将value追加到key原值的末尾,如果key值是非字符串则会报错,当key不存在时候,改命令类似于set,简单将key设定为value。
APPEND KEY_NAME NEW_VALUE
  • INCR
    incr 命令将 key 中储存的数字值增一。如果key不存在,key值会被初始化为0,在进行incr操作。如果字符串类型的值不能表示为数字,则会报错。
INCR KEY_NAME
  • DECR
    decr命令将 key 中储存的数字值减一,和incr命令相似。
DECR KEY_NAME
(2)常用命令
  • STRLEN
    Strlen 命令将获取指定 key 所储存的字符串值的长度,如果key存储的不是字符串类型或不存在时,返回错误。
STRLEN KEY_NAME
  • SETRANG
    Setrange命令是将从偏移量 ​​offset​​ 开始, 用 ​​value​​ 参数覆盖键 ​​key​​ 储存的字符串值。
SETRANGE key offset value

不存在的键 ​​key​​​ 当作空白字符串处理,如果键 ​​key​​ 原来储存的字符串长度比偏移量小,那么原字符和偏移量之间的空白将用零字节("\x00" )进行填充。

  • GETRANG
    Getrange命令返回存储在 key 中的字符串的子串,由 ​​start​​ 和 ​​end​​ 偏移决定(都包括在内)。负数偏移提供相对字符串结尾的偏移。并且该命令会通过将结果范围限制为字符串的实际长度来处理超出范围的请求。
GETRANGE key start end

当key不存在返回空字符串。

  • MSET
    命令设置多个 ​​key​​ 的值为各自对应的 value。如果key存在,则会用新值替换旧值,如果key不存在,会重新创建,该命令总是返回“OK”,因为 MSET不会失败。
MSET key value [key value ...]
  • MGET
    命令返回所有(一个或多个)给定 key 的值,值的类型是字符串。 如果给定的 key 里面有某个 key 不存在或者值不是字符串,那么这个 key 返回特殊值 ​​nil​​ 。
MGET key [key ...]

测试以上命令

127.0.0.1:6379> set name jiang XX   #  XX表示只有键key存在的时候才会设置key的值
(nil)
127.0.0.1:6379> set name jiang NX # NX表示只有键key不存在的时候才会设置key的值
OK
127.0.0.1:6379> get name # 返回与键 `key` 相关联的字符串值。
"jiangyou"
127.0.0.1:6379> get age # 键key不存在的时候返回nil
(nil)

使用​​append​​可以将value追加到对应key的value尾部,并返回加上后的value的长度:

127.0.0.1:6379> EXISTS mykey1
(integer) 1
127.0.0.1:6379> APPEND mykey1 "Hello"
(integer) 19
127.0.0.1:6379> get mykey1
"I am the best!Hello"
127.0.0.1:6379> APPEND mykey1

设置age 的值,并设置了过期时间 EX表示秒:

127.0.0.1:6379> set age 24 EX 30   #  设置age 的值,并设置了过期时间  EX表示秒
OK
127.0.0.1:6379> incr age # 在age上进行增 1
(integer) 25
127.0.0.1:6379> get age
"25"
127.0.0.1:6379> decr age # 在age上进行减 1
(integer) 24
127.0.0.1:6379> get age
"24"
127.0.0.1:6379> incr name # 由于name值不能表示数字,无法增1
(error) ERR value is not an integer or out of range
127.0.0.1:6379> STRLEN name # name对应的string的长度
(integer) 8

​Setrange​​​命令是将从偏移量 ​​offset​​​ 开始, 用 ​​value​​​ 参数覆盖键 ​​key​​​ 储存的字符串值。
​​​Getrange​​​命令返回存储在 key 中的字符串的子串,由 ​​start​​​ 和 ​​end​​ 偏移决定(都包括在内)。负数偏移提供相对字符串结尾的偏移。并且该命令会通过将结果范围限制为字符串的实际长度来处理超出范围的请求。

127.0.0.1:6379> SETRANGE name 10 hahaha     # 从偏移量为10 的位置开始加入hahaha
(integer) 16
127.0.0.1:6379> get name # 不足的用\x00 补充
"jiangyou\x00\x00hahaha"
127.0.0.1:6379> GETRANGE name 0 -1 # 获取name的值,改方式类似于python的数组查找
"jiangyou\x00\x00hahaha"
127.0.0.1:6379> MSET age 26 home liaoning # 为多个key赋值
OK
127.0.0.1:6379> MGET age home addr # 查找多个key对应的值,不存在的key返回nil。
1) "26"
2) "liaoning"
3) (nil)

4、列表—list命令:

(1)基本命令
  • LPUSH
    Lpush 将一个或多个值插入到列表​​​key​​ 的头部。如果 key 不存在,那么在进行 push 操作前会创建一个空列表。如果 key 对应的值不是 list 类型,那么会返回一个错误。可以使用一个命令把多个元素 push 进入列表。
LPUSH key value [value ...]
  • RPUSH
    Rpush 将向存储在 key 中的列表的尾部插入所有指定的值。如果 key 不存在,那么会创建一个空的列表然后再进行 push 操作。 当 key 保存的不是列表,那么会返回一个错误。
RPUSH key value [value ...]
  • LRANGE
    Lrange将返回列表中指定区间内的元素(闭区间),区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。如果start大于最大小标,那么叫返回空列表。
LRANGE key start stop
  • LINDEX
    Lindex 将返回列表 key 里索引 index 位置存储的元素。 index 下标是从 0 开始索引的,所以 0 是表示第一个元素, 1 表示第二个元素,并以此类推。 负数索引用于指定从列表尾部开始索引的元素,在这种方法下,-1 表示最后一个元素,-2 表示倒数第二个元素,并以此往前推。当 key 值不是列表的时候,会返回错误。
LINDEX key index
  • LLEN
    Llen 将用于返回存储在 ​​​key​​​ 中的列表长度。 如果 ​​key​​​ 不存在,则 ​​key​​​ 被解释为一个空列表,返回 ​​0​​​ 。 如果 ​​key​​ 不是列表类型,返回一个错误。
LLEN key
(2)常用命令
  • LREM
    Lrem将用于从列表 key 中删除前 count 个值等于 ​​​element​​ 的元素。 这个 count 参数通过下面几种方式影响这个操作,如果count > 0, 从头到尾删除值为 value 的元素;如果count < 0,将从尾到头删除值为 value 的元素;如果 count = 0 将移除所有值为 value 的元素
LREM key count value
  • LSET
    Lset 将用于设置列表 key 中 index 位置的元素值为 ​​​element​​。
LSET key index value
  • LINSERT
    Linsert 将用于把 ​​​element​​​ 插入到列表 ​​key​​​ 的前面或后面。当 ​​key​​​ 不存在时,这个list会被看作是空list,什么都不执行;当 ​​key​​ 存在,值不是列表类型时,返回错误。
LINSERT key BEFORE|AFTER pivot value

测试上面命令:

127.0.0.1:6379> RPUSH myarrs 1 1 1 1 2 2   #  从list的右边开始往myarrs里面添加值
(integer) 6
127.0.0.1:6379> LRANGE myarrs 0 -1 # 返回myarrs的List中所有值
1) "1"
2) "1"
3) "1"
4) "1"
5) "2"
6) "2"
127.0.0.1:6379> LPUSH myarrs 0 0 -1 # 从list的左边开始往myarrs里面添加值
(integer) 9
127.0.0.1:6379> LRANGE myarrs 0 -1
1) "-1"
2) "0"
3) "0"
4) "1"
5) "1"
6) "1"
7) "1"
8) "2"
9) "2"
127.0.0.1:6379> LINDEX myarrs -2 # 根据索引返回List中的值
"2"
127.0.0.1:6379> LLEN myarrs # 返回List中元素个数
(integer) 9

​LREM​​​将用于从列表 key 中删除前 count 个值等于 ​​element​​ 的元素。 这个 count 参数通过下面几种方式影响这个操作,如果count > 0, 从头到尾删除值为 value 的元素;如果count < 0,将从尾到头删除值为 value 的元素如果 count = 0 将移除所有值为 value 的元素

LREM key count value

如下第一句即从头开始算,删除前2个value值为1的键值对:

127.0.0.1:6379> LREM myarrs 2 1     # 删除myarrs中的1  count为2  所以从头往尾删除两个1
(integer) 2
127.0.0.1:6379> LRANGE myarrs 0 -1
1) "-1"
2) "0"
3) "0"
4) "1"
5) "1"
6) "2"
7) "2"
127.0.0.1:6379> LREM myarrs -1 1 # 删除myarrs中的1 count为-1 所以从尾往头删除1个1
(integer) 1
127.0.0.1:6379> LRANGE myarrs 0 -1
1) "-1"
2) "0"
3) "0"
4) "1"
5) "2"
6) "2"

如果 count = 0 将移除所有值为 value 的元素:

127.0.0.1:6379> LREM myarrs 0 2   # 删除myarrs中的2  count为0  删除所有等于2的元素
(integer) 2
127.0.0.1:6379> LRANGE myarrs 0 -1
1) "-1"
2) "0"
3) "0"
4) "1"
127.0.0.1:6379> LSET myarrs 2 5 # 根据索引设置myarrs的值,将索引为2 的位置赋值为5
OK
127.0.0.1:6379> LRANGE myarrs 0 -1
1) "-1"
2) "0"
3) "5"
4) "1"
127.0.0.1:6379> LINSERT myarrs before 5 4 # 在第一个值为5的位置的前面插入一个4
(integer) 5
127.0.0.1:6379> LRANGE myarrs 0 -1
1) "-1"
2) "0"
3) "4"
4) "5"
5) "1"

5、哈希类型—hash命令:

hash类似于java中的HashMap,在Reids中做了更多的优化。此外hash是一个​​string​​类型的field和value的映射表,特别适合用于存储对象。例如我们可以借用hash数据结构来存储用户信息,商品信息等。

(1)基本命令
  • HSET
    Hset 命令用于为存储在 ​​​key​​​ 中的哈希表的 ​​field​​​ 字段赋值 ​​value​​​ 。如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段(​​field​​)已经存在于哈希表中,旧值将被覆盖。
HSET key field value
  • HGET
    Hget 命令用于返回哈希表中指定字段 ​​​field​​ 的值。如果给定的字段或 key 不存在时,返回 nil 。
HGET key field
  • HMSET
    Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。此命令会覆盖哈希表中已存在的字段,如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。
HMSET key field value [field value ...]
  • HGETALL
    Hgetall 命令用于返回存储在 ​​​key​​ 中的哈希表中所有的域和值。返回值以列表形式返回哈希表的字段及字段值,若 key 不存在,返回空列表。
HGETALL key
  • HDEL
    Hdel 命令用于删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。 如果 ​​​key​​​ 不存在,会被当作空哈希表处理并返回 ​​0​​ 。
HDEL key field [field ...]
(2)常用命令
  • HEXISTS
    Hexists 命令用于查看哈希表的指定字段​​​field​​​ 是否存在。如果表含有给定字段​​field​​会返回1,否则返回0。
HEXISTS key field
  • HKEYS
    Hkeys返回存储在 ​​​key​​ 中哈希表的所有域。当 key 不存在时,返回空表。
HKEYS key
  • HVALS
    Hvals 命令返回哈希表所有域(field)的值。当 key 不存在时,返回空表。
HVALS key

测试以上命令

127.0.0.1:6379> HSET userinfo name jiangyou     #  创建新的hash表,并存入对象userinfo的name属性
(integer) 1 # 返回赋值成功域的个数
127.0.0.1:6379> HSET userinfo age 26 home liaoming school neu # 设置userinfo对象的多个域的值
(integer) 3 # 返回赋值成功域的个数
127.0.0.1:6379> HKEYS userinfo # 查看userinfo的所有域的名
1) "name"
2) "age"
3) "home"
4) "school"
127.0.0.1:6379> HKEYS users # 当key不存在时,返回空
(empty list or set)
127.0.0.1:6379> HVALS userinfo # 返回key值的所有域的值
1) "jiangyou"
2) "26"
3) "liaoming"
4) "neu"
127.0.0.1:6379> HEXISTS userinfo name # 查看哈希表的指定字段`name` 该字段存在,返回1
(integer) 1
127.0.0.1:6379> HEXISTS userinfo addr # 查看哈希表的指定字段`addr` 该字段存在,返回0
(integer) 0
127.0.0.1:6379> HGETALL userinfo # 查看哈希表中存储在 `key` 中的所有的域和值
1) "name"
2) "jiangyou"
3) "age"
4) "26"
5) "home"
6) "liaoming"
7) "school"
8) "neu"
127.0.0.1:6379> HGETALL users # `key` 不存在,会被当作空哈希表处理并返回。
(empty list or set)
127.0.0.1:6379> HDEL userinfo school home # 删除哈希表 key 中的一个或多个指定域,返回的为成功删除的域的个数。
(integer) 2
127.0.0.1:6379> HGETALL userinfo
1) "name"
2) "jiangyou"
3) "age"
4) "26"

6、集合类型—set命令:

(1)基本命令
  • SADD
    Sadd 将命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。假如集合 key 不存在,则创建一个只包含被添加的元素作为成员的集合。当集合 key 不是集合类型时,返回一个错误。
SADD key member [member ...]
  • SMEMBERS
    Smembers 将返回存储在 ​​​key​​ 中的集合的所有的成员。 不存在的集合被视为空集合。
SMEMBERS key
  • SISMEMBER
    Sismember 将用于判断元素 ​​​member​​​ 是否集合 ​​key​​​ 的成员。如果成员元素是集合的成员,返回 1 ;如果成员元素不是集合的成员,或 ​​key​​ 不存在,返回0。
SISMEMBER key member
  • SCARD
    Scard 将返回集合中元素的数量。
SCARD key
  • SREM
    Srem将在集合中删除指定的元素。如果指定的元素不是集合成员则被忽略。如果集合 ​​​key​​ 不存在则被视为一个空的集合,该命令返回0。如果key的类型不是一个集合,则返回错误。
SCARD key member [member ...]
(2)常用命令
  • SRANDMEMBER
    Srandmember 将仅使用​​​key​​​ 参数,那么随机返回集合​​key​​ 中的一个随机元素。如果count是整数且小于元素的个数,返回含有 count 个不同的元素的数组,如果count是个整数且大于集合中元素的个数时,返回整个集合的所有元素,当count是负数,则会返回一个包含count的绝对值的个数元素的数组,如果count的绝对值大于元素的个数,则返回的结果集里会出现一个元素出现多次的情况。
SRANDMEMBER key [count]
  • SPOP
    Spop 将从集合 ​​​key​​中删除并返回一个或多个随机元素。这个命令和 SRANDMEMBER相似, SRANDMEMBER 只返回随机成员但是不删除这些返回的成员。
SRANDMEMBER key [count]

测试以上命令

127.0.0.1:6379> SADD name zhangsan lisi wangwu   #  赋值key为name的set集合,返回赋值成功的个数
(integer) 3
127.0.0.1:6379> SMEMBERS name # 查看存储在name中的集合的所有的成员。
1) "zhangsan"
2) "lisi"
3) "wangwu"
127.0.0.1:6379> SISMEMBER name zhangsan # 判断元素 zhangsan 是否集合 name 的成员,如果是 返回1
(integer) 1
127.0.0.1:6379> SISMEMBER name xuliu # 判断元素 xuliu 是否集合 name 的成员,如果不是 返回0
(integer) 0
127.0.0.1:6379> SCARD name
(integer) 3
127.0.0.1:6379> SREM name zhangsan xuliu # 删除 name 的成员,如果存在直接删除,否则忽略。返回删除成功的元素个数
(integer) 1
127.0.0.1:6379> SMEMBERS name
1) "lisi"
2) "wangwu"
127.0.0.1:6379> SRANDMEMBER name 5 # 随机返回集合name中的一个随机元素,count为5 大于集合个数,返回整个集合元素
1) "lisi"
2) "wangwu"
127.0.0.1:6379> SRANDMEMBER name 1 # 随机返回集合name中的一个随机元素,count为1 随机返回集合中任意一个元素
1) "wangwu"
127.0.0.1:6379> SRANDMEMBER name -5 # 随机返回集合name中的一个随机元素,count为-5 返回的结果集里会出现一个元素出现多次
1) "wangwu"
2) "lisi"
3) "lisi"
4) "lisi"
5) "wangwu"
127.0.0.1:6379> SPOP name 0 # 随机删除并返回集合name中的一个或多个随机元素,count为0 返回的结果集里不会出现任何元素
(empty array)
127.0.0.1:6379> SPOP name 1 # 随机删除并返回集合name中的一个或多个随机元素,count为1 返回的结果集里会出现一个元素出现多次
1) "lisi"
127.0.0.1:6379> SPOP name -5 # 随机删除并返回集合name中的一个或多个随机元素,count 不能为负数。
(error) ERR value is out of range, must be positive

7、有序集合类型—sortedset命令:

(1)基本命令
  • ZADD
    Zadd 将一个或多个 ​​​member​​​ 元素及其 ​​score​​​ 值加入到有序集 ​​key​​​ 当中。如果某个 ​​member​​​ 已经是有序集的成员,那么更新这个 ​​member​​​ 的 ​​score​​​ 值,并通过重新插入这个 ​​member​​​ 元素,来保证该 ​​member​​​ 在正确的位置上。如果有序集合 ​​key​​​ 不存在,则创建一个空的有序集并执行 ZADD操作。当 ​​key​​​ 存在但不是有序集类型时,返回一个错误。​​score​​​ 值可以是整数值或双精度浮点数,​​score​​ 可为正也可以为负。
ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
  • XX: 仅更新存在的成员,不添加新成员。
  • NX: 不更新存在的成员。只添加新成员。
  • LT: 更新新的分值比当前分值小的成员,不存在则新增。
  • GT: 更新新的分值比当前分值大的成员,不存在则新增。
  • CH: 返回变更成员的数量。变更的成员是指 新增成员score值更新的成员,命令指明的和之前score值相同的成员不计在内。 注意: 在通常情况下,ZADD返回值只计算新添加成员的数量。
  • INCR: ​​ZADD​​​ 使用该参数与 ​​ZINCRBY​​ 功能一样。一次只能操作一个score-element对。
  • ZRANG
    Zrange将返回有序集中,指定区间内(闭区间)的成员,其中成员的按分数值递增(从小到大)来排序,具有相同分数值的成员按字典序(lexicographical order )来排列。如果你需要成员按值递减(从大到小)来排列,可以使用 ​​​ZREVRANGE​​​命令。下标参数 ​​start​​​ 和 ​​stop​​​ 都以 ​​0​​​ 为底,也就是说,以 ​​0​​​ 表示有序集第一个成员,以 ​​1​​​ 表示有序集第二个成员,以此类推。其中 start和stop参数的细节同 ​​ZRANG​​命令。
ZRANGE key start stop [WITHSCORES]
  • ZREVRANGE
    Zervrange 将返回有序集​​​key​​​中,指定区间内的成员。其中成员的位置按score值递减(从高到低)来排列。具有相同score值的成员按字典序的反序排列。 除了成员排序相反外,​​ZREVRANGE​​​命令的其他方面和​​ZRANGE​​命令一样。
ZREVRANGE key start stop [WITHSCORES]
  • ZREM
    Zrem 将从有序集合​​​key​​​中删除指定的成员​​member​​​。如果​​member​​不存在则被忽略。当key存在,但是不是有序集合类型时,返回类型错误。返回的是从有序集合中删除的成员个数,不包括不存在的成员。
ZREM key member [member ...]
  • ZCARD
    Zcard 将返回有序集的成员个数。 当 ​​​key​​​ 不存在时,返回 ​​0​​ 。
ZCARD key
(2)常用命令
  • ZRANGEBYSCORE
    该指令将返回有序集 ​​​key​​​ 中,所有 ​​score​​​ 值介于 ​​min​​​ 和 ​​max​​​ 之间(包括等于 ​​min​​​ 或 ​​max​​​ )的成员。有序集成员按 ​​score​​​ 值递增(从小到大)次序排列。具有相同 ​​score​​​ 值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)。可选的 ​​LIMIT​​​ 参数指定返回结果的数量及区间(就像SQL中的 ​​SELECT LIMIT offset, count​​​ ),注意当 ​​offset​​​ 很大时,定位 ​​offset​​​ 的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间。可选的 ​​WITHSCORES​​​ 参数决定结果集是单单返回有序集的成员,还是将有序集成员及其 ​​score​​ 值一起返回。
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
  • ZREVRANGEBYSCORE
    该指令将返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。具有相同分数值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)。默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)。可选的LIMIT参数指定返回结果的数量及区间(类似SQL中SELECT LIMIT offset, count)。注意,如果offset太大,定位offset就可能遍历整个有序集合,这会增加O(N)的复杂度。可选参数WITHSCORES会返回元素和其分数,而不只是元素。
ZREVRANGEBYSCORE  key min max [WITHSCORES] [LIMIT offset count]
  • ZCOUNT
    Zcount 将返回有序集 ​​​key​​​ 中, ​​score​​​ 值在 ​​min​​​ 和 ​​max​​​ 之间(默认包括 ​​score​​​ 值等于 ​​min​​​ 或 ​​max​​ )的成员的数量。
ZCOUNT key min max

1.3 使用Redis DeskTop Manager

启动Redis服务端的时候会有默认端口6379,这里用默认端口配置连接。

配置如下:

1)定一个名称,随意

2)服务端地址,域名或ID,

3)Redis 端口,默认 6379

4)如果设置了连接密码,那么需要设置密码

配置好之后点击 Test Connection 按钮,看是否可以连接成功,如果失败请检查一下配置信息。登录后是这样的界面:

【新闻推荐系统】(task2)Redis篇(上)_redis_05

Reference

(1)datawhale notebook
(2)​​​window下redis的基本操作命令​​

(3)​​Redis DeskTop Manager 使用教程​​

(4)redis中文官方文档:http://www.redis.cn/commands/hset.html