redis 五种数据类型简单学习笔记
程序员文章站
2022-07-05 10:17:30
...
0,Redis 键(key)
https://www.runoob.com/redis/redis-keys.html
Redis 键命令用于管理 redis 的键。
Redis 键命令的基本语法如下:
redis 127.0.0.1:6379> COMMAND KEY_NAME
例如:
redis 127.0.0.1:6379> DEL runoobkey
(integer) 1
在以上实例中 DEL 是一个命令, runoobkey 是一个键。
如果键被删除成功,命令执行后输出 (integer) 1,否则将输出 (integer) 0
1 DEL key
该命令用于在 key 存在时删除 key。
redis 127.0.0.1:6379> DEL runoobkey
(integer) 1
2 DUMP key
序列化给定 key ,并返回被序列化的值。
'''
序列化的作用,序列化一般用于程序中数据的传递,
如果程序B(程序B不能访问Redis)需要程序A放在redis中数据,
这样的话使用序列化后,一些复杂的类型,比如hash,list,
可以传递序列化后的数据,B反序列化解析出数据就行了!
'''
如果 key 不存在,那么返回 nil 。 否则,返回序列化之后的值。
redis> SET greeting "hello, dumping world!"
OK
现在使用 DUMP 序列化键值:
redis> DUMP greeting
"\x00\x15hello, dumping world!\x06\x00E\xa0Z\x82\xd8r\xc1\xde"
redis> DUMP not-exists-key
(nil)
3 EXISTS key
检查给定 key 是否存在。
若 key 存在返回 1 ,否则返回 0 。
redis 127.0.0.1:6379> EXISTS runoob-new-key
(integer) 0
4.1 EXPIRE key seconds
为给定 key 设置过期时间,以秒计。
设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时返回 0 。
(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)
redis 127.0.0.1:6379> EXPIRE runooobkey 60
(integer) 1
4.2 PEXPIRE key milliseconds
设置 key 的过期时间以毫秒计。
redis> PEXPIRE mykey 1500
(integer) 1
5.1 EXPIREAT key timestamp
EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。
不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
实例为 key 设置过期时间:
redis 127.0.0.1:6379> EXPIREAT runoobkey 1293840000
(integer) 1
5.2 PEXPIREAT key milliseconds-timestamp
设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
redis 127.0.0.1:6379> PEXPIREAT runoobkey 1555555555005
(integer) 1
6.1 TTL key
以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
redis> TTL mykey
(integer) 1
6.2 PTTL key
以毫秒为单位返回 key 的剩余的过期时间。
redis> PTTL mykey
(integer) 1498
6.3 PERSIST key
移除 key 的过期时间,key 将持久保持。
当过期时间移除成功时,返回 1 。 如果 key 不存在或 key 没有设置过期时间,返回 0 。
redis> PERSIST mykey # 移除 key 的生存时间
(integer) 1
7 KEYS pattern
查找所有符合给定模式( pattern正则)的 key 。
获取 redis 中所有的 key
redis 127.0.0.1:6379> KEYS *
8 MOVE key db
将当前数据库的 key 移动到给定的数据库 db 当中。
###########################################################################
# key 存在于当前数据库
redis> SELECT 0 # redis默认使用数据库 0,为了清晰起见,这里再显式指定一次。
OK
redis> SET song "secret base - Zone"
OK
redis> MOVE song 1 # 将 song 移动到数据库 1
(integer) 1
redis> EXISTS song # song 已经被移走
(integer) 0
redis> SELECT 1 # 使用数据库 1
OK
redis:1> EXISTS song # 证实 song 被移到了数据库 1 (注意命令提示符变成了"redis:1",表明正在使用数据库 1)
(integer) 1
###########################################################################
# 当 key 不存在的时候
redis:1> EXISTS fake_key
(integer) 0
redis:1> MOVE fake_key 0 # 试图从数据库 1 移动一个不存在的 key 到数据库 0,失败
(integer) 0
redis:1> select 0 # 使用数据库0
OK
redis> EXISTS fake_key # 证实 fake_key 不存在
(integer) 0
###########################################################################
# 当源数据库和目标数据库有相同的 key 时
redis> SELECT 0 # 使用数据库0
OK
redis> SET favorite_fruit "banana"
OK
redis> SELECT 1 # 使用数据库1
OK
redis:1> SET favorite_fruit "apple"
OK
redis:1> SELECT 0 # 使用数据库0,并试图将 favorite_fruit 移动到数据库 1
OK
redis> MOVE favorite_fruit 1 # 因为两个数据库有相同的 key,MOVE 失败
(integer) 0
redis> GET favorite_fruit # 数据库 0 的 favorite_fruit 没变
"banana"
redis> SELECT 1
OK
redis:1> GET favorite_fruit # 数据库 1 的 favorite_fruit 也是
"apple"
9 RANDOMKEY
从当前数据库中随机返回一个 key 。
redis> RANDOMKEY
"fruit"
10.1 RENAME key newkey
修改 key 的名称
改名成功时提示 OK ,失败时候返回一个错误。
当 OLD_KEY_NAME 和 NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在时,返回一个错误。
当 NEW_KEY_NAME 已经存在时, RENAME 命令将覆盖旧值。
redis> RENAME message greeting
OK
redis> EXISTS message # message 不复存在
(integer) 0
redis> EXISTS greeting # greeting 取而代之
(integer) 1
10.2 RENAMENX key newkey
仅当 newkey 不存在时,将 key 改名为 newkey 。
修改成功时,返回 1 。 如果 NEW_KEY_NAME 已经存在,返回 0 。
############################
# newkey 不存在,改名成功
redis> SET player "MPlyaer"
OK
redis> EXISTS best_player
(integer) 0
redis> RENAMENX player best_player
(integer) 1
############################
# newkey存在时,失败
redis> SET animal "bear"
OK
redis> SET favorite_animal "butterfly"
OK
redis> RENAMENX animal favorite_animal
(integer) 0
redis> get animal
"bear"
redis> get favorite_animal
"butterfly"
11 TYPE key
返回 key 所储存的值的类型,数据类型有:
none (key不存在)
string (字符串)
list (列表)
set (集合)
zset (有序集)
hash (哈希表)
redis> SET weather "sunny"
OK
redis> TYPE weather
string
1,Redis 字符串(String)
https://www.runoob.com/redis/redis-strings.html
1 增加
SET key value
设置指定 key 的值
MSET key value [key value ...]
同时设置一个或多个 key-value 对。
redis 127.0.0.1:6379> MSET key1 value1 key2 value2 .. keyN valueN
SETNX key value
只有在 key 不存在时设置 key 的值。
MSETNX key value [key value ...]
同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
SETEX key seconds value
命令为指定的 key 设置值及其过期时间。如果 key 已经存在, SETEX 命令将会替换旧的值。
PSETEX key milliseconds value
这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。
redis 127.0.0.1:6379> SETEX mykey 60 redis
OK
2 查找
GET key
获取指定 key 的值。
MGET key1 [key2..]
获取所有(一个或多个)给定 key 的值。
GETRANGE key start end
返回 key 中字符串值的子字符
redis 127.0.0.1:6379> SET mykey "This is my test key"
OK
redis 127.0.0.1:6379> GETRANGE mykey 0 3
"This"
redis 127.0.0.1:6379> GETRANGE mykey 0 -1
"This is my test key"
STRLEN KEY_NAME
命令用于获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。
字符串值的长度。 当 key 不存在时,返回 0。
redis> STRLEN mykey
(integer) 11
3,修改
GETSET key value
将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
APPEND KEY_NAME NEW_VALUE
如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
redis> APPEND myphone " - 1110" # 长度从 5 个字符增加到 12 个字符
(integer) 12
注意:此处返回的是字符串的长度。
SETRANGE KEY_NAME OFFSET VALUE
Setrange 命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始。
redis 127.0.0.1:6379> SET key1 "Hello World"
OK
redis 127.0.0.1:6379> SETRANGE key1 6 "Redis"
(integer) 11
redis 127.0.0.1:6379> GET key1
"Hello Redis"
INCR key
将 key 中储存的数字值增一。
[数据类型必须不包含数字以外的其他字符。否则报错ERR value is not an integer or out of range]
DECR key
将 key 中储存的数字值减一。
redis> SET page_view 20
OK
redis> INCR page_view
(integer) 21
redis> GET page_view # 数字值在 Redis 中以字符串的形式保存
"21"
INCRBY key increment
将 key 所储存的值加上给定的增量值(increment) 。
值可以加负号,来减。
DECRBY key decrement
key 所储存的值减去给定的减量值(decrement) 。
INCRBYFLOAT key increment
将 key 所储存的值加上给定的浮点增量值(increment) 。
4,删除
删除键就是del key
2,Redis 哈希(Hash)
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
Redis 中每个 hash 可以存储 1<<32 - 1 键值对(40多亿)。[1<<32 == 2的32次方]
string 类型的 field 和 value 的映射表!
string 类型的 field 和 value 的映射表!
string 类型的 field 和 value 的映射表!
1,增加
HSET key field value
将哈希表 key 中的字段 field 的值设为 value 。
HMSET key field1 value1 [field2 value2 ]
同时将多个 field-value (域-值)对设置到哈希表 key 中。
HSETNX key field value
只有在字段 field 不存在时,设置哈希表字段的值。
2,查找
HGET key field
获取存储在哈希表中指定字段的值。
HMGET key field1 [field2]
获取所有给定字段的值
HEXISTS key field
查看哈希表 key 中,指定的字段是否存在。
HLEN key
获取哈希表中字段的数量
HKEYS key
获取所有哈希表中的字段
HVALS key
获取哈希表中所有值
HGETALL key
获取在哈希表中指定 key 的所有字段和值
HSCAN key cursor [MATCH pattern] [COUNT count]
迭代哈希表中的键值对。
3,删除
HDEL key field1 [field2]
删除一个或多个哈希表字段
4,修改
HINCRBY key field increment
为哈希表 key 中的指定字段的整数值加上增量 increment 。
HINCRBYFLOAT key field increment
为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
3,Redis 列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 1<<32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。[1<<32 == 2的32次方]
列表是简单的字符串列表!
列表是简单的字符串列表!
列表是简单的字符串列表!
1,添加
LPUSH key value1 [value2]
将一个或多个值插入到列表头部。如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。
RPUSH key value1 [value2]
在列表中添加一个或多个值。Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。
LPUSHX key value
将一个值插入到已存在的列表头部。Lpushx 将一个值插入到已存在的列表头部,列表不存在时操作无效。
RPUSHX key value
为已存在的列表添加值
LSET key index value
通过索引设置列表元素的值
LINSERT key BEFORE|AFTER pivot value
在列表的元素前或者后插入元素
redis> LINSERT mylist BEFORE "World" "There"
(integer) 3
2,查找
LLEN key
获取列表长度
LINDEX key index
通过索引获取列表中的元素
LRANGE key start stop
获取列表指定范围内的元素
3,删除
LPOP key
移出并获取列表的第一个元素
RPOP key
移除列表的最后一个元素,返回值为移除的元素。
LREM key count value
移除列表元素
BRPOPLPUSH source destination timeout
从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
RPOPLPUSH source destination
移除列表的最后一个元素,并将该元素添加到另一个列表并返回
BLPOP key1 [key2 ] timeout
移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
如果列表为空,返回一个 nil 。 否则,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。
redis 127.0.0.1:6379> BLPOP list1 100
在以上实例中,操作会被阻塞,如果指定的列表 key list1 存在数据则会返回第一个元素,否则在等待100秒后会返回 nil 。
(nil)
BRPOP key1 [key2 ] timeout
移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
4,修改
LTRIM key start stop
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
4,Redis 集合(Set)
Redis 集合(Set)
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 1<<32 - 1 (4294967295, 每个集合可存储40多亿个成员)。[1<<32 == 2的32次方]
String 类型的无序集合!
String 类型的无序集合!
String 类型的无序集合!
1,添加
SADD key member1 [member2]
向集合添加一个或多个成员
2,查找
SCARD key
获取集合的成员数
SMEMBERS key
返回集合中的所有成员
SISMEMBER key member
判断 member 元素是否是集合 key 的成员
SRANDMEMBER key [count]
返回集合中一个或多个随机数
SSCAN key cursor [MATCH pattern] [COUNT count]
迭代集合中的元素
【集合操作】
差集:SDIFF key1 [key2]
返回给定所有集合的差集Sdiff 命令返回给定集合之间的差集。不存在的集合 key 将视为空集。
差集的结果来自前面的 FIRST_KEY ,而不是后面的 OTHER_KEY1,也不是整个 FIRST_KEY OTHER_KEY1..OTHER_KEYN 的差集。
SDIFFSTORE destination key1 [key2]
返回给定所有集合的差集并存储在 destination 中
交集:SINTER key1 [key2]
返回给定所有集合的交集
SINTERSTORE destination key1 [key2]
返回给定所有集合的交集并存储在 destination 中
并集:SUNION key1 [key2]
返回所有给定集合的并集
SUNIONSTORE destination key1 [key2]
所有给定集合的并集存储在 destination 集合中
3,删除
SMOVE source destination member
将 member 元素从 source 集合移动到 destination 集合
SREM key member1 [member2]
移除集合中一个或多个成员
SPOP key
移除并返回集合中的一个随机元素
4,修改
5,Redis 有序集合(sorted set)
Redis 有序集合(sorted set)
Redis有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
集合中最大的成员数为 1<<32 - 1 (4294967295, 每个集合可存储40多亿个成员)。[1<<32 == 2的32次方]
string类型元素的集合,且不允许重复的成员!有序集合的成员是唯一的,但分数(score)却可以重复!
string类型元素的集合,且不允许重复的成员!有序集合的成员是唯一的,但分数(score)却可以重复!
string类型元素的集合,且不允许重复的成员!有序集合的成员是唯一的,但分数(score)却可以重复!
1,增加
ZADD key score1 member1 [score2 member2]
向有序集合添加一个或多个成员,或者更新已存在成员的分数
2,查找
【注意索引(排名)、分数、字典,三种查找的方式。】
ZCARD key
获取有序集合的成员数
ZCOUNT key min max
计算在有序集合中指定区间分数的成员数
redis 127.0.0.1:6379> ZADD myzset 1 "hello"
(integer) 1
redis 127.0.0.1:6379> ZADD myzset 1 "foo"
(integer) 1
redis 127.0.0.1:6379> ZADD myzset 2 "world" 3 "bar"
(integer) 2
redis 127.0.0.1:6379> ZCOUNT myzset 1 3
(integer) 4
ZLEXCOUNT key min max
在有序集合中计算指定字典区间内成员数量
redis 127.0.0.1:6379> ZADD myzset 0 a 0 b 0 c 0 d 0 e
(integer) 5
redis 127.0.0.1:6379> ZADD myzset 0 f 0 g
(integer) 2
redis 127.0.0.1:6379> ZLEXCOUNT myzset - +
(integer) 7
redis 127.0.0.1:6379> ZLEXCOUNT myzset [b [f
(integer) 5
ZRANGE key start stop [WITHSCORES]
通过索引区间返回有序集合指定区间内的成员
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]
通过分数返回有序集合指定区间内的成员
ZRANGEBYLEX key min max [LIMIT offset count]
通过字典区间返回有序集合的成员
ZRANK key member
返回有序集合中指定成员的索引
ZREVRANK key member
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
ZSCORE key member
返回有序集中,成员的分数值
ZREVRANGE key start stop [WITHSCORES]
返回有序集中指定区间内的成员,通过索引,分数从高到低
ZREVRANGEBYSCORE key max min [WITHSCORES]
返回有序集中指定分数区间内的成员,分数从高到低排序
【集合】
交集:ZINTERSTORE destination numkeys key [key ...]
计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中
并集:ZUNIONSTORE destination numkeys key [key ...]
计算给定的一个或多个有序集的并集,并存储在新的 key 中
ZSCAN key cursor [MATCH pattern] [COUNT count]
迭代有序集合中的元素(包括元素成员和元素分值)
3,删除
ZREM key member [member ...]
移除有序集合中的一个或多个成员
ZREMRANGEBYRANK key start stop
移除有序集合中给定的排名(索引)区间的所有成员
ZREMRANGEBYSCORE key min max
移除有序集合中给定的分数区间的所有成员
ZREMRANGEBYLEX key min max
移除有序集合中给定的字典区间的所有成员
4,修改
ZINCRBY key increment member
有序集合中对指定成员的分数加上增量 increment
参考菜鸟教程学习
下一篇: liunx安装redis(单机)