Redis命令

redis概述

Redis本质上是一个Key-Value类型的内存数据库,整个数据库统统加载在内存当中进行操作,定期通过异步
操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过
10万次读写操作,是已知性能最快的Key-Value DB。
Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是
1GB,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高
性 能消息队列服务等等。 Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能
读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
(1)、会话缓存(Session Cache)
(2)、全页缓存(FPC) (动态页面静态化)
(3)、队列
(4)、排行榜/计数器
(5)、发布/订阅

redis存储

redis 里面的 rdb (Redis DataBase)和 aof (Append Only File)文件 (内存数据库) 数据
持久化
Redis 默认开启RDB持久化方式,在指定的时间间隔内,执行指定次数的写操作,则将内存中的数据写入到磁
盘中。
RDB 持久化适合大规模的数据恢复但它的数据一致性和完整性较差。
Redis 需要手动开启AOF持久化方式,默认是每秒将写操作日志追加到AOF文件中。
AOF 的数据完整性比RDB高,但记录内容多了,会影响数据恢复的效率。

redis操作

进入redis:

redis-cli 是 Redis 提供的官方命令行客户端工具,用于与 Redis 服务器进行交互。它以人类可读的

方式显示 Redis 响应,使用户可以直接阅读和理解返回的数据。
语法 : redis-cli
--raw 输出中文
举例:
$ redis-cli
127.0.0.1:6379>

127.0.0.1:6379 表示连接到本地机器上运行的 Redis 服务器,并使用默认的 Redis 端口 6379 进

行通信。

Redis 支持多个数据库(16个数据库),编号从 0 到 15。

默认情况下,Redis 客户端连接到数据库 0。
语法 : select 0-15 自由选择
举例:
$ redis-cli
127.0.0.1:6379> SELECT 2

redis数据类型

1、string---Strings
Strings 具有以下特点:

  1. 存储字符串数据: Strings
  2. 二进制安全: Strings 可以存储二进制数据,而不仅限于文本字符串。
  3. 简单的键值对结构:每个 string 对象都有一个关联的键(key),通过键可以对其进行读取、写
    入、更新和删除等操作。
    Strings 的常见用途包括:
  4. 缓存数据:可以将经常访问的数据缓存在 Redis 的 Strings 中,加快数据读取的速度。
  5. 计数器:可以使用 Strings 存储计数器的值,例如网站访问次数、用户在线人数等。
  6. 分布式锁:可以使用 Strings 实现分布式锁机制,控制对共享资源的访问。
  7. 序列化对象:可以将对象序列化为字符串后存储在 Strings 中,方便存储和传输对象数据。
    Redis 提供了一系列的命令来操作 Strings ,如 SET 、 GET 、 INCR 、 DEL 等,用于设置字符串值、
    获取字符串值、增加计数器、删除字符串等操作。
    通过使用 Strings ,可以在 Redis 中存储和操作字符串数据,适用于多种场景,包括缓存、计数、序列化等。
# 1、 添加和获取数据?
    # 在Redis中,字符串值可以包含双引号或不包含双引号。
    # 添加(修改) 
    # 语法:set 键 值
    set name qiye
    # 获取
    # 语法: get 键 
    get name
    # 补充知识点:
   keys * 查看所有的KEY
# 2、 追加数据?
    # append 命令向键的字符串值末尾追加字符串。                               
       > set message "Hello"
       OK
       > append message ", World!"
       (integer) 13
       > get message
        "Hello, World!"
    # 如果键不存在,则会创建一个新的键,并将指定的字符串作为其初始值。
       > append newkey "Hello"
       (integer) 5
       > get newkey
        "Hello"
# 3、 删除数据 ?
   del name   # 删除
# 4、批量
    #MSET和MGET是Redis中用于批量设置和获取多个键值对的命令。
    #设置多个键值对 
   语法:mset 键1 值1 键2 值2 键3 值3 ...
   mset name1 jack1 name2 jack2
    #查看多个
   语法:mget 键1 键2 键3...
   mget name1 name2
    
## 其它操作
# 1、 自加: incr 命令用于对键的值进行自增操作,它将键的值加上1。                         
    如果键不存在,将会先将键的值初始化为0,然后再执行自增操作。
   > set age 10
   OK
   > incr age
   (integer) 11
 #在上述示例中,将键counter的值自增1,结果为11。
# 2、 自减: decr 命令用于对键的值进行自减操作,它将键的值减去1。                         
    如果键不存在,将会先将键的值初 始化为0,然后再执行自减操作。
   > set age 10
   OK
   > decr age
   (integer) 9
 #在上述示例中,将键counter的值自减1,结果为9。 
# 3、 增加: incrby 命令用于将键的值增加指定的增量。
   > set age 10
   OK
   > incrby age 5
   (integer) 15
 #在上述示例中,将键counter的值增加5,结果为15
# 4、 减少: decrby 命令用于将键的值减少指定的减量。
   > set age 10
   OK
   > decrby age 3
   (integer) 7
 #在上述示例中,将键counter的值减少3,结果为7。
# 5、 type 获取指定键的数据类型
# 语法 : type 键 
   > set name "John"
   OK
   > type name
   #TYPE命令的返回值可以是以下几种之一:
        "string":表示键对应的值是字符串类型。
        "list":表示键对应的值是列表类型。
        "set":表示键对应的值是集合类型。
        "zset":表示键对应的值是有序集合类型。
        "hash":表示键对应的值是哈希类型。
        "stream":表示键对应的值是流类型。
# 6、 检查键是否存在。如果键存在,则返回1;如果键不存在,则返回0。
# 语法 : exists 键  
   > set name "John"
   OK
   > exists name
   (integer) 1
# 7、重命名
# 语法: rename 旧键 新键 
   > set mykey "Hello"
   OK
   > rename mykey newkey
   OK
   > get newkey
    "Hello"
   #需要注意的是,RENAME命令是原子操作,意味着它会立即将键重命名,而不会受到其他操作的影响。这也意味着如果键name2已经存在,它会被覆盖。

计数器:

string类型的incr和decr命令的作用是将key中储存的数字值加一/减一,这两个操作具有原子性,总能安
全地进行加减操作,因此可以用string类型进行计数,如微博的评论数、点赞数、分享数,抖音作品的收藏
数,京东商品的销售量、评价数等。

# 面是一个完整的示例,展示如何使用 Redis 的 Strings 实现一个简单的计数器:
# 初始化计数器
SET visits 0
# 增加计数
INCR visits
# 获取计数
GET visits
# 计数器,适用于跟踪和统计各种计数数据,如网站访问次数、用户操作次数等。

2、过期时间

在 Redis 中,设置过期时间是指为存储在数据库中的键值对设置一个时间限制,当超过该时间时,Redis
将自动删除该键值对。设置过期时间的主要作用如下:

  1. 缓存管理:Redis 通常用作缓存数据库,通过设置键的过期时间,可以自动清除不再需要的缓存数
    据。这有助于释放内存和优化数据库性能。
  2. 数据有效性控制:通过设置过期时间,可以确保存储在 Redis 中的数据在一定时间后自动过期,强
    制客户端更新数据或重新获取最新数据。这对于需要定期更新的数据非常有用,如会话数据、验证
    码等。
  3. 限时功能:通过设置键的过期时间,可以实现一些限时功能,如限时抢购、限时优惠等。在特定时
    间范围内,将键设置为有效状态,超过时间后自动失效,从而实现一些临时性的业务逻辑。
  4. 防止缓存雪崩:缓存雪崩是指缓存中大量的键同时过期或失效,导致大量请求直接访问数据库,给
    数据库带来巨大压力。通过为每个键设置不同的过期时间,可以分散过期时间点,减少缓存同时失
    效的概率,从而降低缓存雪崩的风险。
    总的来说,通过设置过期时间,可以实现数据的自动管理和过期策略,提高缓存的效率和可靠性,减轻
    数据库的负担,并支持一些临时性的业务需求。
# 键已创建时设置过期时间:
    # set 命令用于设置指定键的值。
    # 语法: SET key value [EX seconds] [PX milliseconds] [NX|XX]
   其中,key是要设置值的键的名称,value是要设置的值。可选参数包括:
        # EX seconds:设置键的过期时间,单位为秒。
        # PX milliseconds:设置键的过期时间,单位为毫秒。
        # NX:只在键值对不存在时新增,如果存在返回nil。
        # XX:只在键值对已存在时覆盖,如果不存则返回nil。
   需要注意的是,如果键已经存在且没有设置XX参数,则执行SET命令将会覆盖键的现有值。
# 1、键name的值为"John"。
   > set name "John"
   OK
# 2、键score的值为100,并设置了过期时间为3600秒。
   > set score 100 EX 3600
   OK
# 3、键counter的值为10,仅当键不存在时才执行设置操作。
   > set counter 10 NX
   OK
# 4、键config的值为"enabled",仅当键已存在时才执行设置操作。
   > set config "enabled" XX
   OK
# 键已存在时设置过期时间:
    # expire 命令用于设置键的过期时间,以秒为单位。                                     
      expire 命令返回的结果为1,表示设置过期时间成功。
       > set name "John"
       OK
       > expire name 60
       (integer) 1
    # persist 命令用于取消键的过期时间,使键永远不会过期。                               
      persist 命令返回的结果为1,表示取消过期时间成功。
       > set name "John"
       OK
       > expire name 60
  (integer) 1
   > ttl name
   (integer) 55
3、list---Lists 

Lists 具有以下特点:

  1. 有序性: Lists 中的元素按照插入顺序排列,每个元素都有一个索引来表示其位置。
  2. 允许重复: Lists 中的元素可以重复,同一个元素可以出现多次。
  3. 动态性:可以在列表的两端进行元素的添加和移除操作。
    Lists 的常见用途包括:
  4. 消息队列:可以将消息以列表的形式存储在 Redis 中,使用 Lists 提供的命令来实现简单的消息
    队列功能。
  5. 日志记录:可以将日志以列表的形式存储在 Redis 中,按照时间顺序记录和检索日志信息。
  6. 最新消息列表:可以使用 Lists 来存储最新的消息或动态内容,可以快速获取最新的一批数据。
  7. 任务队列:可以使用 Lists 存储待执行的任务,从列表的一端取出任务进行处理。
    Redis 提供了一系列的命令来操作 Lists ,如 LPUSH 、 RPUSH 、 LPOP 、 RPOP 等,用于在列表的头部
    或尾部添加元素、从列表的头部或尾部移除元素等操作。
    通过使用 Lists ,可以在 Redis 中高效地存储和操作按顺序排列的元素集合,适用于需要保持元素有序
    并支持插入和移除操作的场景。
      # 消息队列
# 排行榜
list
# 一、创建一个键
# 在 Redis 中新增一个列表,可以使用 RPUSH 或 LPUSH 命令。这两个命令分别用于将一个或多个元素
从右侧或左侧插入到列表中。
# 1、 使用 rpush 命令将一个或多个元素从右侧插入到列表:
    # 语法 : 
       rpush 键 值1 值2 ... 值N
    # 例如,将元素 "value1"、"value2" 和 "value3" 从右侧插入到列表 "mylist" 中:
       rpush mylist "value1" "value2" "value3"
       type mylist
# 2、 使用 lpush 命令将一个或多个元素从左侧插入到列表:
    # 语法 : 
       lpush 键 值1 值2 ... 值N
    # 例如,将元素 "value1"、"value2" 和 "value3" 从左侧插入到列表 "mylist" 中:
       lpush mylist "value1" "value2" "value3"
       type mylist
# 二、lrange、lindex lset 中用于操作列表类型的命令:
# 1、 lrange:用于获取列表中指定范围的元素。
    # 语法:
   lrange 键 初值 终值
    # 示例:
   lrange mylist 0 -1 
    # 该命令返回列表 mylist 中从索引 0 到索引 -1 之间的所有元素。                       
      索引从 0 开始,可以使用负数表示倒数索引。
# 2、 lindex:用于获取列表中指定索引的元素。
    # 语法:
   lindex 键 index
    # 示例:
   lindex mylist 3
    # 该命令返回列表 mylist 中索引为 3 的元素。                                       
      索引从 0 开始,所以 3 表示第四个元素。
# 3、 lset:用于设置列表中指定索引的元素值。
    # 语法:
   lset 键 下标 值
    # 示例:
   lset mylist 2 "value10"
    # 该命令将列表 mylist 中索引为 2 的元素值设置为 "value10"。
# 列表进行元素的移除和修剪操作:
# 1、 rpop:从列表右侧移除并返回最后一个元素。
    # 语法:
       rpop 键
    # 示例:
       rpop mylist
        # 这个命令将移除列表 mylist 中最右边的元素,并将其返回作为结果。
# 2、 lpop:从列表左侧移除并返回第一个元素。
    # 语法:
       lpop 键
    # 示例:
       lpop mylist
    # 这个命令将移除列表 mylist 中最左边的元素,并将其返回作为结果。
# 3、 lrem:根据值的匹配移除指定数量的元素。
    # 语法:
       lrem 键 count value
    # 示例:
       lrem mylist 2 "value"
    # 这个命令将从列表 mylist 中移除与给定的 value 匹配的元素。count 参数指定了移除的数量:
     如果 count 大于 0,则从列表左侧开始移除与 value 相等的元素,移除的数量为 count。
# list3 [aa 1 2 3 aa 6 7 aa 1 2 6 7 aa]
# lrem list3 3 aa     --> [ 1 2 3 6 7 1 2 6 7 aa]
     如果 count 小于 0,则从列表右侧开始移除与 value 相等的元素,移除的数量为 count 的绝对
值。
# list4 [bb 1 2 3 bb 6 7 bb 1 2 6 7 bb]
4、Hash---Hashes 
Hash(哈希): 
Hashes 具有以下特点: 
1. 键值对存储: Hashes 存储了多个字段(field)和对应的值(value),类似于其他编程语言
中的字典或映射数据结构。
2. 无序性: Hashes 中的字段是无序排列的,没有固定的顺序。
3. 动态性:可以动态地添加、删除和更新字段和对应的值。
# lrem list4 -1 7     --> [bb 1 2 3 bb 6 7 bb 1 2 6 bb]
# lrem list4 -3 bb   --> [bb 1 2 3 6 7 1 2 6]
     如果 count 等于 0,则移除所有与 value 相等的元素。
lrem list4 0 6  --> [bb 1 2 3 7 1 2]
# 4、 ltrim:保留列表中指定范围的元素,移除其他元素。
    # 语法:
       ltrim 键 start stop
    # 语法翻译:
       ltrim 键(列表名) 要保留数据起始下标 要保留数据结束下标
    # 示例:
       ltrim mylist 0 2
    # 这个命令将列表 mylist 中保留索引从 start 到 stop 之间的元素,移除其他元素。         
      保留的范围包括 start 和 stop 的索引所指向的元素。
list5 [ 1 2 3 4 aa bb cc dd 5 6 7 8 ]   保留list5中的aa bb cc dd
ltrim list5 4 7  ---> [ aa bb cc dd ] 
    
`代码汇总:`
# 一、创建一个键
# 1. 从右侧插入一个或多个元素到列表中
rpush mylist "value1" "value2" "value3"
# 2. 从左侧插入一个或多个元素到列表中
lpush mylist "value1" "value2" "value3"
# 二、操作列表类型的命令
# 1. 获取列表中指定范围的元素
lrange mylist 0 -1
# 2. 获取列表中指定索引的元素
lindex mylist 3
# 3. 设置列表中指定索引的元素值
lset mylist 2 "value10"
# 三、删除
# 列表进行元素的移除和修剪操作
# 1. 从列表右侧移除并返回最后一个元素
rpop mylist
# 2. 从列表左侧移除并返回第一个元素
lpop mylist
# 3. 根据值的匹配移除指定数量的元素
lrem mylist 2 "value"
# 4. 保留列表中指定范围的元素,移除其他元素
ltrim mylist 0 2

4、Hash---Hashes

Hash(哈希):
Hashes 具有以下特点:

  1. 键值对存储: Hashes 存储了多个字段(field)和对应的值(value),类似于其他编程语言
    中的字典或映射数据结构。
  2. 无序性: Hashes 中的字段是无序排列的,没有固定的顺序。
  3. 动态性:可以动态地添加、删除和更新字段和对应的值。

lrem list4 -1 7 --> [bb 1 2 3 bb 6 7 bb 1 2 6 bb]

lrem list4 -3 bb --> [bb 1 2 3 6 7 1 2 6]

 如果 count 等于 0,则移除所有与 value 相等的元素。

lrem list4 0 6 --> [bb 1 2 3 7 1 2]

4、 ltrim:保留列表中指定范围的元素,移除其他元素。

# 语法:
   ltrim 键 start stop
# 语法翻译:
   ltrim 键(列表名) 要保留数据起始下标 要保留数据结束下标
# 示例:
   ltrim mylist 0 2
# 这个命令将列表 mylist 中保留索引从 start 到 stop 之间的元素,移除其他元素。         
  保留的范围包括 start 和 stop 的索引所指向的元素。

list5 [ 1 2 3 4 aa bb cc dd 5 6 7 8 ] 保留list5中的aa bb cc dd
ltrim list5 4 7 ---> [ aa bb cc dd ]

代码汇总:

一、创建一个键

1. 从右侧插入一个或多个元素到列表中

rpush mylist "value1" "value2" "value3"

2. 从左侧插入一个或多个元素到列表中

lpush mylist "value1" "value2" "value3"

二、操作列表类型的命令

1. 获取列表中指定范围的元素

lrange mylist 0 -1

2. 获取列表中指定索引的元素

lindex mylist 3

3. 设置列表中指定索引的元素值

lset mylist 2 "value10"

三、删除

列表进行元素的移除和修剪操作

1. 从列表右侧移除并返回最后一个元素

rpop mylist

2. 从列表左侧移除并返回第一个元素

lpop mylist

3. 根据值的匹配移除指定数量的元素

lrem mylist 2 "value"

4. 保留列表中指定范围的元素,移除其他元素

ltrim mylist 0 2
Hashes 的常见用途包括:

  1. 存储对象属性:可以将一个对象的属性存储在 Hashes 中,每个字段对应对象的一个属性,
    值为属性的值。
  2. 缓存对象:可以将对象的属性存储在 Hashes 中,使用 Hashes 来缓存对象,避免频繁的数
    据库查询。
  3. 存储用户信息:可以用 Hashes 存储用户的信息,如用户名、年龄、地址等。
  4. 存储配置信息:可以将配置信息存储在 Hashes 中,方便读取和更新配置。
  5. 存储关系数据:可以用 Hashes 存储关系型数据,如好友关系、用户与权限的对应关系等。
    Redis 提供了一系列的命令来操作 Hashes ,如 HSET 、 HGET 、 HGETALL 、 HINCRBY 等,用于添
    加字段和对应的值、获取字段的值、获取所有字段和值的列表、对字段的值进行增减等操作。
    通过使用 Hashes ,可以在 Redis 中高效地存储和操作键值对的数据,适用于许多不同的应用场
    景。
# 购物车
用户的id key 商品的id field 商品的数量作为value
# Redis中的哈希表是一个键值对的集合,可以存储多个字段和对应的值。
keys *
# 一、新增数据:
hset 命令用于设置哈希中指定字段的值。它接受三个参数:哈希的名称(Key)、字段(Field)和值
(Value)。如果字段已经存在于哈希表中,则它的值将被更新;如果字段不存在,则将创建一个新的字段。
# 语法 : 
hset 哈希名 字段 值 
# 举例:将在名为myhash的哈希表中创建或更新field1字段的值为Hello。
hset myhash field1 "Hello"
# 在redis中新增哈希数据 -> user:{ name: buyu, age: 118, msg: xxxxx }
hset user name buyu age 118 msg xxxxx
# 二、查询数据
hget 命令用于获取哈希中指定字段的值。它接受两个参数:哈希的名称(Key)和字段(Field)。       
                                                        field 存在,正常读取 field 
对应的值。field 不存在,返回 nil。
# 语法 : 
hget 哈希名 字段 
# 举例: 返回名为myhash的哈希表中field1字段的值。
hget myhash field1
# 三、查询所以的键
如果你想要获取哈希表中的所有键(即字段名),可以使用 hkeys 命令。它接受一个参   数,即哈希表的
名称(Key),然后返回该哈希表中所有的字段名(Field)。
# 语法 : 
hkeys 哈希名
# 四、查询所有的值
获取哈希表(Hash)中的所有值,可以使用 hvals 命令。该命令接受一个参数,即哈希表的名称(Key),
然后返回该哈希表中所有字段对应的值。
# 语法 : 
hvals 哈希名
# 请注意,返回的值列表中的值是无序的,与字段的顺序无关。
# 五、查询所有键值对
如果需要将字段名和对应的值一起获取,可以使用 hgetall 命令,它会返回键值对列表,其中每个键值对由
字段和值组成,每个键值对按顺序排列。。
# 语法:
hgetall 哈希名
# 需要注意的是:
 在处理大型哈希表时,要考虑返回的值列表可能会占用大量内存。确保在内存使用方面有足够的容量来处理
返回的结果。
# 补充:
hlen是Redis中的一个哈希命令,用于获取哈希表中字段(field)的数量。
hlen 哈希名
# 六、批量操作
# hmset 和 hmget 批量操作命令: 
   可以一次性设置或获取多个字段的值,而不是逐个操作。                               这在
处理多个字段的场景下更高效,可以减少与 Redis 服务器的通信次数。
    
# 1、批量新增
hmset 命令用于一次设置哈希表中的多个字段及其对应的值。它接受三个或更多参数,参数顺序为:哈希名
称、字段1、值1、字段2、值2,以此类推。
# 语法 :
hmset 哈希名 字段1 值1 字段2 值2 ...
# 举例: 
hmset myhash field1 value1 field2 value2 field3 value3
# 注意: 
field 不存在,直接存储。field 存在,执行覆盖操作
# 2、批量查询
hmget 命令用于一次获取哈希表中多个字段的值。它接受两个或更多参数,参数顺序为:哈希表的名称、字段
1、字段2,以此类推。
# 语法: 
hmget 哈希名 字段1 字段2 字段3...
# 举例: 
hmget myhash field1 field2 field3
# 七、删除 hdel
hdel 从哈希表(Hash)中同时删除一个或多个字段的命令,返回值是被删除字段的数量。。
hdel 命令接受至少两个参数,第一个参数是哈希表的名称,后续参数是要删除的字段名。可以指定一个或多
个字段名进行删除。
# 语法: 
hdel 哈希名 字段1 字段2 字段3...
# 举例: 
hdel myhash field1 field2 field3
# hdel 命令的返回值是实际删除的字段数量。可以根据返回值来判断删除操作是否成功。
# hdel 命令执行后,被删除的字段及其对应的值将从哈希表中永久移除。                         
    field 存在,删除字段,返回被删除字段的数量。 field 不存在, 返回0。
# 八、增量(hincrby) 实现加法
#hincrby 是 Redis 中用于对哈希表(Hash)中指定字段的值进行增加操作的命令。
5、set---Sets 
Set(集合): 
#hincrby 命令接受三个参数:哈希表的名称、字段名和增加的值。                             
它将指定字段的值按照给定的增量进行增加,并返回增加后的值。                       如果指定的
字段已经存在于哈希表中,它的值将会被增加。                           如果字段不存在,则会
创建一个新的字段,并将增量作为初始值。                       示例用法如下:
hincrby 哈希名 字段名 增量数字
#假设哈希表 "myhash" 中已经有以下字段和对应的值:
   field1: 10
   field2: 20
# 使用 hincrby 命令增加字段 "field1" 的值:
   hincrby myhash field1 5
#执行后,字段 "field1" 的值将变为 15。
#如果使用 HINCRBY 命令增加一个不存在的字段 "field3" 的值:
 hincrby myhash field3 7
#执行后,哈希表 "myhash" 中将会添加一个新的字段 "field3",其值为 7。
# 以上数据视觉举例:
{myhash: {field1:10, field2:20} }
{myhash: {field1:15, field2:20} }
{myhash: { field1:15, field2:20, field3:7} }
# 补充:要对哈希表中的字段进行减量操作,可以使用hincrby命令,并将减量值设为负数。
`代码汇总:`
# 新增数据
hset myhash field1 "Hello"
# 查询数据
hget myhash field1
# 查询所有键
hkeys myhash
# 查询所有值
hvals myhash
# 查询所有键值对
hgetall myhash
# 获取哈希表中字段的数量
hlen myhash
# 批量新增
hmset myhash field1 value1 field2 value2 field3 value3
# 批量查询
hmget myhash field1 field2 field3
# 删除字段
hdel myhash field1 field2 field3
# 增量操作
hincrby myhash field1 5
hincrby myhash field3 -7

5、set---Sets

Set(集合):
Sets 具有以下特点:

  1. 无序性: Sets 中的元素是无序排列的,没有固定的顺序。
  2. 唯一性:每个元素在集合中是唯一的,不允许重复。
  3. 动态性:可以动态地添加、删除元素,集合的元素数量可以自由增减。
    Sets 的常见用途包括:
  4. 存储唯一标识符:可以用 Sets 存储用户标识符、商品标识符等唯一标识符,方便进行快速
    查找和判断元素是否存在。
  5. 集合运算: Sets 支持集合运算,如交集、并集、差集等操作。可以对多个集合进行操作,获
    取交集、并集、差集等结果。
  6. 标记、标签:可以用 Sets 存储对象的标记或标签,用于对对象进行分类或属性的标记。
  7. 去重:可以使用 Sets 去除列表中的重复元素,得到一个唯一元素的集合。
    Redis 提供了一系列的命令来操作 Sets ,如 sadd 、 srem 、 smembers 、 sinter 等,用于添加
    元素、移除元素、获取集合中的所有元素、进行集合运算等操作。
    Sets 是一个非常实用的数据结构,在 Redis 中可以高效地进行元素的存储、去重、查找以及集合
    运算,适用于各种数据处理和分析场景。
member 成员
# set类型
scard sname  # 获取有多少个元素
# 一、 新增
sadd:向集合中添加一个或多个成员。它的用法如下:
# 语法:
sadd key member [member ...]
# 语法描述:
其中,key是集合的键名,member是要添加的成员。可以一次性添加多个成员。
# 举例:(myset的集合中添加三个成员:member1、member2和member3。)
sadd myset member1 member2 member3
sadd myset2 member1 member3 member5
# 二、 删除
# 1、指定删除
srem:用于从集合中移除一个或多个指定的成员。
# 语法:
srem key member [member ...]
# 语法描述:
其中,key是集合的键名,member是要移除的成员。可以一次性移除多个成员。
# 举例:(从名为myset的集合中移除member1和member2两个成员。)
srem myset member1 member2
# 2、随机删除
spop:用于从集合中随机移除并返回一个或多个成员。
# 情况一: 从集合中随机移除一个成员
# 语法:
spop key 
# 语法描述:
其中,key是集合的键名
# 举例:(从名为myset的集合中随机移除一个成员)
spop myset
# 如果集合不为空,将返回一个随机成员,并将其从集合中移除。
# 补充:
如果要一次性移除并返回多个随机成员,可以指定可选参数count的值
# 情况二: 从集合中随机移除多个成员
# 补充语法:
spop key [count]
# 语法描述:
其中,key是集合的键名,count是可选参数,用于指定要随机移除的成员数量。
# 举例:(从集合中随机移除并返回3个成员。)
spop myset 3
# 三、 查询(set为无序集合,没有直接的下标访问方式)
# 1、查询集合(所有)
smembers:返回集合中的所有成员。
# 语法:
smembers key
# 语法描述:
其中,key是集合的键名。该命令将返回集合中的所有成员。
# 举例:(查询myset的集合中的所有成员)
smembers myset
# 2、随机查询(一个)
srandmember :从集合中随机返回一个或多个成员。
# 语法:
srandmember key [count]
# 注意:这些命令返回的成员顺序是随机的,并且在不同的调用之间可能会有所不同。
# 3、查询集合基数(成员数量)
scard:用于获取集合的成员数量,即集合的基数(cardinality)。
# 语法:
scard key
# 举例:(获取名为myset的集合中的成员数量)
scard myset
# scard 命令对于确定集合的大小或判断集合是否为空很有用。                         如果集合
不存在,或者为空集,那么SCARD命令将返回0。
# 四、 集合成员转移
smove:将成员从一个集合移动到另一个集合。
# 语法:
smove 原集合 目标集合 成员
# 举例:将myset1集合 中的成员member1 移动到 myset2集合中
smove myset1 myset2 member1 
`代码汇总:`
# 查询集合基数
scard sname
# 新增
sadd myset member1 member2 member3
sadd myset2 member1 member3 member5
6、zset -- Sorted sets 
Sorted Set(有序集合): 
Sorted Set 具有以下特点: 
1. 有序性: Sorted Set 中的元素按照其关联的分数进行排序,使得元素在集合中按照一定顺
序排列。
2. 唯一性:每个元素在 Sorted Set 中是唯一的,不允许重复。
3. 分数关联:每个元素都与一个分数(score)相关联,用于对元素进行排序。分数可以是浮点
数或整数,并且允许成员具有相同的分数。
4. 动态性:可以对已存在的元素更新分数,或者添加新的元素。
Sorted Set 的常见用途包括: 
1. 排行榜:可以用 Sorted Set 存储用户的积分、成绩等信息,根据分数对用户进行排名和排
序。
2. 计分系统:可以用 Sorted Set 存储用户的评分或打分数据,并根据分数进行排序和计算排
名。
3. 优先级队列:可以用 Sorted Set 存储带有优先级的任务或消息,根据分数来确定处理的顺
序。
4. 范围查询:可以根据分数范围进行区间查询,获取在指定分数范围内的元素。
Redis 提供了一系列的命令来操作 Sorted Set ,如 zadd 、 zrem 、 zrange 、 zscore 等,用于
添加元素、移除元素、按分数范围获取元素等操作。这使得 Sorted Set 成为 Redis 中一个强大
而灵活的数据结构,适用于许多不同的应用场景。
# 删除
srem myset member1 member2
spop myset
smembers myset
srandmember key [count]
scard myset
# 集合成员转移
smove 原集合 目标集合 member
smove myset1 myset2 member1

spop myset 3

查询

6、zset -- Sorted sets

Sorted Set(有序集合):
Sorted Set 具有以下特点:

  1. 有序性: Sorted Set 中的元素按照其关联的分数进行排序,使得元素在集合中按照一定顺
    序排列。
  2. 唯一性:每个元素在 Sorted Set 中是唯一的,不允许重复。
  3. 分数关联:每个元素都与一个分数(score)相关联,用于对元素进行排序。分数可以是浮点
    数或整数,并且允许成员具有相同的分数。
  4. 动态性:可以对已存在的元素更新分数,或者添加新的元素。
    Sorted Set 的常见用途包括:
  5. 排行榜:可以用 Sorted Set 存储用户的积分、成绩等信息,根据分数对用户进行排名和排
    序。
  6. 计分系统:可以用 Sorted Set 存储用户的评分或打分数据,并根据分数进行排序和计算排
    名。
  7. 优先级队列:可以用 Sorted Set 存储带有优先级的任务或消息,根据分数来确定处理的顺
    序。
  8. 范围查询:可以根据分数范围进行区间查询,获取在指定分数范围内的元素。
    Redis 提供了一系列的命令来操作 Sorted Set ,如 zadd 、 zrem 、 zrange 、 zscore 等,用于
    添加元素、移除元素、按分数范围获取元素等操作。这使得 Sorted Set 成为 Redis 中一个强大
    而灵活的数据结构,适用于许多不同的应用场景。
`zadd`、`zrem`、`zrange`、`zscore`、`zrangebyscore`、`zcard`、`zremrangebyrank`、
`zremrangebyscore`
# 一、 新增
zadd:向有序集合添加一个或多个成员,每个成员都关联一个分数。
# 语法:
zadd key score member [score member ...]
# 语法描述:
   key 是有序集合的键名。
   score 是成员的分数。
   member 是成员的值。
# 举例:(向名为scores的有序集合中添加成员和分数)
zadd scores 85 "John" 92 "Alice" 78 "Bob" 90 "Sarah"
# 二、查询
# 1、索引查询
zrange:按照索引范围获取有序集合的成员。
# 语法:
zrange key 起始下标 结束下标
# 举例:(获取名为scores的有序集合中索引范围为 0 到 2 的成员)
zrange scores 0 2
# 2、查询指定成员分数
zscore:获取有序集合中指定成员的分数
# 语法:
zscore key member
# 举例:(获取名为scores的有序集合中成员"Alice"的分数)
zscore scores "Alice"
# 3、根据分数筛选查询
zrangebyscore:按照分数范围获取有序集合的成员。
# 语法:
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
# 举例:(获取名为scores的有序集合中分数范围为 80 到 90 的成员)
zrangebyscore scores 80 90
# 4、查询集合基数(集合的成员数量)
zcard:获取有序集合的成员数量,即集合的基数。
# 语法:
zcard key
# 举例:(获取名为scores的有序集合的成员数量)
zcard scores
# 三、删除
# 1、指定删除
zrem:从有序集合中移除一个或多个成员。
# 语法:
zrem key member [member ...]
# 举例:(从名为scores的有序集合中移除成员)
ZREM scores "Bob" "Sarah"
# 2、索引范围删除
zremrangebyrank:按照索引范围移除有序集合的成员。
# 语法:
zremrangebyrank key start stop
# 举例:(从名为scores的有序集合中移除索引范围为 0 到 1 的成员)
zremrangebyrank scores 0 1
# 3、分数范围删除
zremrangebyscore:按照分数范围移除有序集合的成员。
# 语法:
zremrangebyscore key min max
# 举例:(从名为scores的有序集合中移除分数范围为 80 到 90 的成员)
 
7、清理redis 
 
 
 
zremrangebyscore scores 80 90
# 四、修改
zincrby:对有序集合中指定成员的分数进行增加或减少。
# 语法:
zincrby key increment member
# 语法描述:
key 是有序集合的键名,increment 是要增加或减少的分数值,member 是要操作分数的成员。
# 举例:(将成员 "Alice" 的分数增加 5)
zincrby myset 5 "Alice"
`代码汇总:`
# 新增
zadd scores 85 "John" 92 "Alice" 78 "Bob" 90 "Sarah"
# 查询
zrange scores 0 2
zscore scores "Alice"
zrangebyscore scores 80 90
zcard scores
# 删除
zrem scores "Bob" "Sarah"
zremrangebyrank scores 0 1
zremrangebyscore scores 80 90
# 修改
zincrby myset 5 "Alice"

7、清理redis

# 这些命令是具有破坏性操作的,会永久地删除数据,所以在使用之前请务必小心谨慎。在生产环境中,应谨
慎使用这些命令,以免误操作导致数据丢失。
flushdb  清空当前数据库的数据
flushall 清空所有数据库的数据
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容