Redis(Remote Dictionary Server)是一种非关系型数据库
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis 中有五种基本数据类型:
String(字符串)
-
String(字符串) 最简单的类型,可以包含任意的数据,比如整数、浮点数、JSON 字符串等。
- string 是 redis 最基本的类型,string 类型的值最大能存储 512MB, 一个 key 对应一个 value
Redis 的 SET 和 GET 命令
添加
set+ 键名+ 值
获取
get +键名
删除
del +键名
List(列表):
-
List(列表):有序的字符串集合,可以重复添加元素,支持头部和尾部的插入、删除等操作。列表最多可存储 232 - 1 元素
列表相关的基本命令:
向列表添加元素
lpush 键名 值
lrange 键名 起始位置 结束位置
lrange list 0 10
LINDEX key index
通过索引获取列表中的元素
Set(集合)
-
Set(集合):无序的字符串集合,不允许重复元素,支持集合间的交集、并集、差集等操作。
- 集合对象的编码可以是 intset 或者 hashtable。
- Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
- 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)
向集合添加一个或多个成员
sadd +键名 +值1
sadd +键名 +值1 +值2
查询集合中的所有成员
smembers +键名
获取集合的成员数
scard +键名
Hash(哈希)
- Hash(哈希):类似于 Java 中的 Map,包含键值对的集合,每个键值对都是一个字符串。
- Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
将多个 field-value (域-值)对设置到哈希表 key 中。
语法如下:
HMSET key field1 value1 field2 value2 field3 value3 ...
HMSET my_hash
HMSET的全称是"Hash Multi Set"。
获取哈希表中所有值。
-
使用HVALS命令获取哈希表中的所有值。语法如下:
HVALS key
其中,
key
是哈希表的名称。 -
例如,如果要获取名为
my_hash
的哈希表中的所有值,可以执行以下命令:HVALS my_hash
删除一个或多个哈希表字段
查看哈希表 key 中,指定的字段是否存在。
获取存储在哈希表中指定字段的值。
获取在哈希表中指定 key 的所有字段和值
# 获取哈希表中所有字段和值
HGETALL my_hash
# 将返回结果存储在一个临时的无序集合中(Set),这将自动去除重复的元素
SADD tmp_set "two" "three" "four" "field1"
# 获取无序集合中的所有成员(即去重后的结果)
SMEMBERS tmp_set
# 删除临时集合
DEL tmp_set
在这个示例中,我们通过SADD
命令将返回结果中的所有字段名(包括重复的)存储在一个临时的无序集合中,Redis会自动去除重复的元素。然后使用SMEMBERS
命令来获取无序集合中的所有成员,即去重后的结果。最后,使用DEL
命令删除临时集合。
Sorted Set(有序集合)
-
Sorted Set(有序集合):与 Set 类似,但是每个元素都有一个分数(score),根据分数进行排序。
- 有序集合的成员是唯一的,但分数(score)却可以重复。
- 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1
向有序集合添加一个或多个成员,或者更新已存在成员的分数
ZADD key score1 member1 [score2 member2]
获取有序集合(Sorted Set)中成员的数量
ZCARD key
计算有序集合(Sorted Set)中分数在给定范围内的成员数量
ZCOUNT key min max
在有序集合中对指定成员的分数加上增量(increment)
ZINCRBY my_sorted_set 5 member1
ZSCORE key member
返回有序集中,成员的分数值
Redis 有九种数据编码方式:
- int:整数编码。
- embstr:短字符串编码。
- raw:长字符串编码。
- hashtable:哈希表编码。
- ziplist:压缩列表编码。
- skiplist:跳跃表编码。
- intset:整数集合编码。
- quicklist:快速列表编码。
- stream:流数据编码。
Redis 有七种底层结构:
- 字符串对象(String Object):保存字符串值和字符串类型的键。
- 列表对象(List Object):保存链表、双端链表和快速链表。
- 哈希对象(Hash Object):保存键值对。
- 集合对象(Set Object):保存无序字符串集合。
- 有序集合对象(Sorted Set Object):保存有序字符串集合。
- 整数集合对象(Intset Object):保存整数集合。
- 跳跃表对象(Skiplist Object):保存有序字符串集合的跳跃表。
Redis 命令
redis启动命令
redis-cli
ping命令(查看服务是否运行)
表示成功
如果ping 发生如下情况
错误信息 "NOAUTH Authentication required." 表示Redis服务器要求进行身份验证,但连接没有提供正确的认证信息。
要解决这个问题,你需要提供正确的认证信息才能连接到Redis服务器。通常情况下,你可以在连接Redis时使用 AUTH
命令提供密码进行身份验证。
例如,如果你的Redis服务器设置了密码为 "your_password",你可以这样连接:
AUTH your_password
确保在连接之前先进行身份验证,这样你就可以成功连接到Redis服务器并执行相应的命令了。