学习总结
(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服务器:
下载完成的结果
(2)启动Redis服务:
一般来说,当安装完成后,Redis服务器会自动启动,可以通过以下命令检查是否启动成功。(ps:如果Active显示为 active(running) 状态:表示redis已在运行,启动成功)
检查当前进程,查看redis是否启动。(ps: 可以看到redis服务正在监听6379端口)
或者进入redis客户端,与服务器进行通信,当输入ping命令,如果返回 PONG 表示Redis已成功安装。
上面的127.0.0.1 是redis服务器的 IP 地址,6379 是 Redis 服务器运行的端口。
1.2 命令:
下面简单介绍一些常用的Redis命令:
1、基本操作命令:
(1)启动Redis
可以通过带参数方式来启动,如果参数过多,可以使用/etc/redis/redis.conf下面的配置文件来启动Redis。
(2)连接Redis
其中上面参数默认的是redis-server的默认地址和端口号,password可以在服务启动时采用参数的方式或者配置文件方式都可进行设置。因此可以通过redis-cli,可以连上我们服务器端的redis服务。
(3)停止Redis
停止Redis有两种方法,一种是通过 redis-cli 停止,另一种是通过杀掉redis服务进程
(4)切换库指令
redis.conf配置中默认16个库,下标从0~15。进入客服端默认选中第0个库,可以通过select命令进行切换,index表示库的小标。
(5)删除当前库的数据
删除当前选择的数据库中的所有数据,这个命令永远不会出现失败。
(6)删除所有库的数据
删除所有数据库里面的数据,注意是所有数据库,这个命令永远不会出现失败。
(7)查看key的数量
查看当前选择的库中key的数量
测试以上命令
2、Key的操作命令:
该部分指令主要是为了对数据库中的key进行增删改查等一些列操作,下面主要介绍几个常用的命令。
(1)查找符合模板的Key
该指令查找数据库所有符合pattern的key,其中pattern可以为?、* 、[abc…]、[a-d]等方式。其中?代表一个任意一个字符,*代表任意0个或多个字符,[abc…]代表只能是[]中的值,[a-d]代表a到d范围内总的值。
(2)查找存在key的数量
该指令为了查找一个或多个key,返回存在key值的数量。
(3)设置过期时间
expire 设置 key 的过期时间,时间过期后,key 会被自动删除,设置成功返回1,key不存在返回0。
ttl 命令以秒为单位返回key的剩余过期时间,如果key不存在返回 -2 key 存在但没有关联超时时间则返回 -1 。
(4)Key所属类型
type命令以字符串的形式返回存储在 key
中的值的类型,可返回的类型有:string
, list
, set
, zset
,hash
和 stream
,如果key值不存在返回none
。
(5)删除Key
del命令删除指定的key,不存在的key忽略,返回0,如果key存在,返回删除的key的个数。
3、字符串类型—string命令:
字符串是Redis中最常见的数据类型,它能够存储任何形式的字符串,其中包括二进制格式,JSON格式,序列化格式等数据。而string相关的命令则是用于管理redis字符串值,下面介绍一些常见命令。
(1)基础命令
- SET
set命令将key是定为指定的字符串,如果key存在,则会覆盖原来的值。
其中set可以为设定的值设置过期时间,EX表示秒数,PX表示毫秒。参数NX表示只有键key不存在的时候才会设置key的值,XX表示只有键key存在的时候才会设置key的值。
- GET
get命令返回与键 key
相关联的字符串值。
如果key不存在,返回nil,如果key的值是非字符串类型,那么返回一个错误。
- APPEND
append命令将指定的key追加值。如果key存在,并且是字符串,则会将value追加到key原值的末尾,如果key值是非字符串则会报错,当key不存在时候,改命令类似于set,简单将key设定为value。
- INCR
incr 命令将 key 中储存的数字值增一。如果key不存在,key值会被初始化为0,在进行incr操作。如果字符串类型的值不能表示为数字,则会报错。
- DECR
decr命令将 key 中储存的数字值减一,和incr命令相似。
(2)常用命令
- STRLEN
Strlen 命令将获取指定 key 所储存的字符串值的长度,如果key存储的不是字符串类型或不存在时,返回错误。
- SETRANG
Setrange命令是将从偏移量 offset
开始, 用 value
参数覆盖键 key
储存的字符串值。
不存在的键 key
当作空白字符串处理,如果键 key
原来储存的字符串长度比偏移量小,那么原字符和偏移量之间的空白将用零字节("\x00" )进行填充。
- GETRANG
Getrange命令返回存储在 key 中的字符串的子串,由 start
和 end
偏移决定(都包括在内)。负数偏移提供相对字符串结尾的偏移。并且该命令会通过将结果范围限制为字符串的实际长度来处理超出范围的请求。
当key不存在返回空字符串。
- MSET
命令设置多个 key
的值为各自对应的 value。如果key存在,则会用新值替换旧值,如果key不存在,会重新创建,该命令总是返回“OK”,因为 MSET不会失败。
- MGET
命令返回所有(一个或多个)给定 key 的值,值的类型是字符串。 如果给定的 key 里面有某个 key 不存在或者值不是字符串,那么这个 key 返回特殊值 nil
。
测试以上命令
使用append
可以将value追加到对应key的value尾部,并返回加上后的value的长度:
设置age 的值,并设置了过期时间 EX表示秒:
Setrange
命令是将从偏移量 offset
开始, 用 value
参数覆盖键 key
储存的字符串值。
Getrange
命令返回存储在 key 中的字符串的子串,由 start
和 end
偏移决定(都包括在内)。负数偏移提供相对字符串结尾的偏移。并且该命令会通过将结果范围限制为字符串的实际长度来处理超出范围的请求。
4、列表—list命令:
(1)基本命令
- LPUSH
Lpush 将一个或多个值插入到列表key
的头部。如果 key 不存在,那么在进行 push 操作前会创建一个空列表。如果 key 对应的值不是 list 类型,那么会返回一个错误。可以使用一个命令把多个元素 push 进入列表。
- RPUSH
Rpush 将向存储在 key 中的列表的尾部插入所有指定的值。如果 key 不存在,那么会创建一个空的列表然后再进行 push 操作。 当 key 保存的不是列表,那么会返回一个错误。
- LRANGE
Lrange将返回列表中指定区间内的元素(闭区间),区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。如果start大于最大小标,那么叫返回空列表。
- LINDEX
Lindex 将返回列表 key 里索引 index 位置存储的元素。 index 下标是从 0 开始索引的,所以 0 是表示第一个元素, 1 表示第二个元素,并以此类推。 负数索引用于指定从列表尾部开始索引的元素,在这种方法下,-1 表示最后一个元素,-2 表示倒数第二个元素,并以此往前推。当 key 值不是列表的时候,会返回错误。
- LLEN
Llen 将用于返回存储在 key
中的列表长度。 如果 key
不存在,则 key
被解释为一个空列表,返回 0
。 如果 key
不是列表类型,返回一个错误。
(2)常用命令
- LREM
Lrem将用于从列表 key 中删除前 count 个值等于 element
的元素。 这个 count 参数通过下面几种方式影响这个操作,如果count > 0, 从头到尾删除值为 value 的元素;如果count < 0,将从尾到头删除值为 value 的元素;如果 count = 0 将移除所有值为 value 的元素
- LSET
Lset 将用于设置列表 key 中 index 位置的元素值为 element
。
- LINSERT
Linsert 将用于把 element
插入到列表 key
的前面或后面。当 key
不存在时,这个list会被看作是空list,什么都不执行;当 key
存在,值不是列表类型时,返回错误。
测试上面命令:
LREM
将用于从列表 key 中删除前 count 个值等于 element
的元素。 这个 count 参数通过下面几种方式影响这个操作,如果count > 0, 从头到尾删除值为 value 的元素;如果count < 0,将从尾到头删除值为 value 的元素;如果 count = 0 将移除所有值为 value 的元素。
如下第一句即从头开始算,删除前2个value值为1的键值对:
如果 count = 0 将移除所有值为 value 的元素:
5、哈希类型—hash命令:
hash类似于java中的HashMap,在Reids中做了更多的优化。此外hash是一个string
类型的field和value的映射表,特别适合用于存储对象。例如我们可以借用hash数据结构来存储用户信息,商品信息等。
(1)基本命令
- HSET
Hset 命令用于为存储在 key
中的哈希表的 field
字段赋值 value
。如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段(field
)已经存在于哈希表中,旧值将被覆盖。
- HGET
Hget 命令用于返回哈希表中指定字段 field
的值。如果给定的字段或 key 不存在时,返回 nil 。
- HMSET
Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。此命令会覆盖哈希表中已存在的字段,如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。
- HGETALL
Hgetall 命令用于返回存储在 key
中的哈希表中所有的域和值。返回值以列表形式返回哈希表的字段及字段值,若 key 不存在,返回空列表。
- HDEL
Hdel 命令用于删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。 如果 key
不存在,会被当作空哈希表处理并返回 0
。
(2)常用命令
- HEXISTS
Hexists 命令用于查看哈希表的指定字段field
是否存在。如果表含有给定字段field
会返回1,否则返回0。
- HKEYS
Hkeys返回存储在 key
中哈希表的所有域。当 key 不存在时,返回空表。
- HVALS
Hvals 命令返回哈希表所有域(field)的值。当 key 不存在时,返回空表。
测试以上命令
6、集合类型—set命令:
(1)基本命令
- SADD
Sadd 将命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。假如集合 key 不存在,则创建一个只包含被添加的元素作为成员的集合。当集合 key 不是集合类型时,返回一个错误。
- SMEMBERS
Smembers 将返回存储在 key
中的集合的所有的成员。 不存在的集合被视为空集合。
- SISMEMBER
Sismember 将用于判断元素 member
是否集合 key
的成员。如果成员元素是集合的成员,返回 1 ;如果成员元素不是集合的成员,或 key
不存在,返回0。
- SCARD
Scard 将返回集合中元素的数量。
- SREM
Srem将在集合中删除指定的元素。如果指定的元素不是集合成员则被忽略。如果集合 key
不存在则被视为一个空的集合,该命令返回0。如果key的类型不是一个集合,则返回错误。
(2)常用命令
- SRANDMEMBER
Srandmember 将仅使用key
参数,那么随机返回集合key
中的一个随机元素。如果count是整数且小于元素的个数,返回含有 count 个不同的元素的数组,如果count是个整数且大于集合中元素的个数时,返回整个集合的所有元素,当count是负数,则会返回一个包含count的绝对值的个数元素的数组,如果count的绝对值大于元素的个数,则返回的结果集里会出现一个元素出现多次的情况。
- SPOP
Spop 将从集合 key
中删除并返回一个或多个随机元素。这个命令和 SRANDMEMBER相似, SRANDMEMBER 只返回随机成员但是不删除这些返回的成员。
测试以上命令
7、有序集合类型—sortedset命令:
(1)基本命令
- ZADD
Zadd 将一个或多个 member
元素及其 score
值加入到有序集 key
当中。如果某个 member
已经是有序集的成员,那么更新这个 member
的 score
值,并通过重新插入这个 member
元素,来保证该 member
在正确的位置上。如果有序集合 key
不存在,则创建一个空的有序集并执行 ZADD操作。当 key
存在但不是有序集类型时,返回一个错误。score
值可以是整数值或双精度浮点数,score
可为正也可以为负。
- 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
命令。
- ZREVRANGE
Zervrange 将返回有序集key
中,指定区间内的成员。其中成员的位置按score值递减(从高到低)来排列。具有相同score值的成员按字典序的反序排列。 除了成员排序相反外,ZREVRANGE
命令的其他方面和ZRANGE
命令一样。
- ZREM
Zrem 将从有序集合key
中删除指定的成员member
。如果member
不存在则被忽略。当key存在,但是不是有序集合类型时,返回类型错误。返回的是从有序集合中删除的成员个数,不包括不存在的成员。
- ZCARD
Zcard 将返回有序集的成员个数。 当 key
不存在时,返回 0
。
(2)常用命令
- ZRANGEBYSCORE
该指令将返回有序集 key
中,所有 score
值介于 min
和 max
之间(包括等于 min
或 max
)的成员。有序集成员按 score
值递增(从小到大)次序排列。具有相同 score
值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)。可选的 LIMIT
参数指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count
),注意当 offset
很大时,定位 offset
的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间。可选的 WITHSCORES
参数决定结果集是单单返回有序集的成员,还是将有序集成员及其 score
值一起返回。
- ZREVRANGEBYSCORE
该指令将返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。具有相同分数值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)。默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)。可选的LIMIT参数指定返回结果的数量及区间(类似SQL中SELECT LIMIT offset, count)。注意,如果offset太大,定位offset就可能遍历整个有序集合,这会增加O(N)的复杂度。可选参数WITHSCORES会返回元素和其分数,而不只是元素。
- ZCOUNT
Zcount 将返回有序集 key
中, score
值在 min
和 max
之间(默认包括 score
值等于 min
或 max
)的成员的数量。
1.3 使用Redis DeskTop Manager
启动Redis服务端的时候会有默认端口6379,这里用默认端口配置连接。
配置如下:
1)定一个名称,随意
2)服务端地址,域名或ID,
3)Redis 端口,默认 6379
4)如果设置了连接密码,那么需要设置密码
配置好之后点击 Test Connection 按钮,看是否可以连接成功,如果失败请检查一下配置信息。登录后是这样的界面:
Reference
(1)datawhale notebook
(2)window下redis的基本操作命令
(3)Redis DeskTop Manager 使用教程
(4)redis中文官方文档:http://www.redis.cn/commands/hset.html