redis
Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,它提供了一个高效的键值存储解决方案,并支持多种数据结构,如字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和有序集合(Sorted Sets)等。它被广泛应用于缓存、消息队列、实时统计等场景。
以下是一些关键特性和用途介绍:
- 内存存储:Redis主要将数据存储在内存中,因此具有快速的读写性能。它可以持久化数据到磁盘,以便在重新启动后恢复数据。
- 多种数据结构:Redis不仅仅是一个简单的键值存储,它支持多种数据结构,如字符串、哈希、列表、集合和有序集合。这些数据结构使得Redis能够更灵活地存储和操作数据。
- 发布/订阅:Redis支持发布/订阅模式,允许多个客户端订阅一个或多个频道,以接收实时发布的消息。这使得Redis可以用作实时消息系统。
- 事务支持:Redis支持事务,可以将多个命令打包成一个原子操作执行,确保这些命令要么全部执行成功,要么全部失败。
- 持久化:Redis提供了两种持久化数据的方式:RDB(Redis Database)和AOF(Append Only File)。RDB是将数据以快照形式保存到磁盘,而AOF是将每个写操作追加到文件中。这些机制可以确保数据在意外宕机或重启后的持久性。
- 高可用性:Redis支持主从复制和Sentinel哨兵机制。通过主从复制,可以创建多个Redis实例的副本,以提高读取性能和容错能力。Sentinel是一个用于监控和自动故障转移的系统,它可以在主节点宕机时自动将从节点提升为主节点。
- 缓存:由于Redis具有快速的读写性能和灵活的数据结构,它被广泛用作缓存层。它可以将常用的数据存储在内存中,以加快数据访问速度,减轻后端数据库的负载。
- 实时统计:Redis的计数器和有序集合等数据结构使其非常适合实时统计场景。它可以存储和更新计数器,并对有序集合进行排名和范围查询,用于统计和排行榜功能
redis的基本使用
1.字符串的操作
SET key value [NX|XX] [EX seconds] [PX milliseconds] [GET]
介绍:
key
:要设置的键名。value
:要设置的值。NX
:可选参数,表示只在键不存在时才设置值。XX
:可选参数,表示只在键已经存在时才设置值。EX seconds
:可选参数,将键的过期时间设置为指定的秒数。PX milliseconds
:可选参数,将键的过期时间设置为指定的毫秒数。GET
:可选参数,返回键的旧值。
运用:
-
设置键名为 “name”值为“jjs"
set name "jjs"
-
设置键名为 “name” 的值为 “John”:
set name "John" XX
-
设置键名为 “counter” 的值为 10,并设置过期时间为 60 秒:
set counter 100 EX 60
-
只在键名为 “status” 不存在时,设置其值为 “active”:
set status "active" NX
-
只在键名为 “score” 已经存在时,将其值设置为 5:
set score 5 XX
-
设置键名为 “name” 的值为 “Hello”,并返回旧的值:
set name "hello" GET
-
删除键名为 “name” 的键:
DEL name
-
批量删除多个键名:
del a b c
-
删除不存在的键名,不会报错,返回删除的键数量为 0:
del not_exist_key
执行效果图:
2. 集合操作
集合(Set)是一种无序且不重复的数据结构,用于存储一组独立的元素。集合中的元素之间没有明确的顺序关系,每个元素在集合中只能出现一次。
运用:
-
添加成员到集合:
sadd mumber "apple"
-
获取集合中的所有成员:
smembers mumber
-
检查成员是否存在于集合中:
sismember mumber "bule"
-
从集合中移除成员:
srem mumber "bule"
-
获取集合中的成员数量:
scard mumber
-
获取随机成员:
srandmember mumber
-
求多个集合的并集:
sunion color mumber
-
求多个集合的交集:
sinter color mumber
-
求多个集合的差集:
sdiff color mumber
执行效果:
3. 哈希表操作
哈希表(Hash)是一种数据结构,也称为字典、关联数组或映射,用于存储键值对集合。在哈希表中,键和值都是存储的数据项,并通过哈希函数将键映射到特定的存储位置,从而实现快速的数据访问和查找。
运用:
-
设置哈希表中的字段值:
hset obj name "jjs"
-
获取哈希表中的字段值:
hget obj name
-
一次设置多个字段的值:
hmset obj name "jtt" age 15 email 12412@qq.com
-
获取多个字段的值:
hmget obj name age email
-
获取哈希表中所有字段和值:
hgetall obj
-
删除哈希表中的字段
hdel obj email
-
检查哈希表中是否存在指定字段:
hexists obj name
-
获取哈希表中所有的字段:
hkeys obj
-
获取哈希表中所有的值:
hvals obj
-
获取哈希表中字段的数量:
hlen obj
运行效果:
4. 列表操作
列表(List)是一种有序、可变且可重复的数据结构。在许多编程语言和数据存储系统中,列表是一种常见的数据结构类型,用于存储一组元素
运用:
-
添加元素:
LPUSH key element1 element2 …:将一个或多个元素从列表的左侧插入,即将元素依次插入列表的头部。如果列表不存在,则在执行操作前会自动创建一个新的列表。
RPUSH key element1 element2 …:将一个或多个元素从列表的右侧插入,即将元素依次插入列表的尾部。如果列表不存在,则在执行操作前会自动创建一个新的列表。lpush list 1 2 3
-
获取元素
lindex list 4 // 获取列表中指定索引位置的元素 lrange list 0 -1 // 获取列表中指定范围内的元素
-
修改元素:
LSET key index newValue // 修改列表中指定索引位置的元素的值
-
删除元素
LPOP key // 从列表的左侧移除并返回第一个元素 RPOP key // 从列表的右侧移除并返回最后一个元素 LREM key count value // 从列表中删除指定数量的指定值元素
-
获取列表长度
llen key
执行效果: