文章目录
Redis 数据类型
官方命令大全网站:http://www.redis.cn/commands.html
linux:redis单机版安装参考:https://blog.csdn.net/qq_27242695/article/details/112173058
window:官网下载window版本
1 介绍
- String(字符类型)
- Hash(散列类型)
- List(列表类型)
- Set(集合类型)
- SortedSet(有序集合类型,简称zset)
注意:在 redis 中的命令语句中,命令是忽略大小写的,而 key 是不忽略大小写的。
2 数据类型
进入一下学习操作,建议安装单机版redis验证
安装推荐博客:
2.1 String(字符类型)
2.1 赋值
# 语法 set key value
127.0.0.1:6379> set redis redis
OK
2.2 取值
# 语法 get key
127.0.0.1:6379> get redis
"redis"
2.3 其他语法
- 取值并赋值
GETSET key value
- 数字增加
INCRBY key increment
- 数字减少
DECRBY key increment
注意:
数字增加与减少存储的值必须是integer类型,increment表示增减基数。
- 仅当不存在时赋值
setnx key value
2.2 Hash(散列类型)
hash 类型也叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等
其它类型。结构可以参考如下
命令赋值
HSET 命令不区分插入和更新操作,当执行插入操作时 HSET 命令返回 1 ,当执行更新操作时返回 0 。
2.2.1 设置一个字段值
# 语法 HSET key field value
127.0.0.1:6379> hset user name lin
(integer) 1
2.2.2 设置多个字段值
# 语法 HMSET key field value [field value ...]
127.0.0.1:6379> hmset user name lin age 12 sex man
OK
2.2.3 当字段不存在时赋值
# 语法 HSETNX key field value
127.0.0.1:6379> hsetnx user age 30 # 如果user中没有age字段则设置age值为30,否则不做任何操作
(integer) 0
2.2.4 获取一个字段值
# 语法 HGET key field
127.0.0.1:6379> hget user age
"12"
2.2.5 获取多个字段
# 语法 HMGET key field [field ...]
127.0.0.1:6379> hmget user age sex
1) "12"
2) "man"
2.5.6 获取所有字段
# 语法 HGETALL key
127.0.0.1:6379> hgetall user
1) "name"
2) "lin"
3) "age"
4) "12"
5) "sex"
6) "man"
2.5.7 删除字段
HDEL key field [field ...]
2.3 List(列表类型)
Redis 的列表类型( list 类型)可以 存储一个有序的字符串列表 ,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。列表类型内部是使用双向链表( double linked list )实现的,所以向列表两端添加元素的时间复杂度为0(1) ,获取越接近两端的元素速度就越快。这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的。
2.3.1 命令
- LPUSH key value [value …]
往链表左边塞值 - RPUSH key value [value …]
往链表右边塞值 - LRANGE key start stop
获取列表中的某一片段。将返回start
、stop
之间的所有元素(包含两端的元素),索引从0
开始。索引可以
是负数,如:“-1
”代表最后边的一个元素。 - 操作
127.0.0.1:6379> lpush list1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> rpush list1 1 2 3 4 5
(integer) 10
127.0.0.1:6379> lrange list1 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
6) "1"
7) "2"
8) "3"
9) "4"
10) "5"
2.3.2 LPOP/RPOP/LLEN
-
lpop key
弹出列表最左边的值 -
rpop key
弹出列表最右边的值 -
llen key
获取列表中元素的个数
根据list的数据特性,可用作于消息队列等场景设计。
2.3 Set(集合类型)
集合类型,其中的数据是不重复且没有顺序
- 集合类型与列表类型差异
结合类型 | 列表类型 | |
---|---|---|
存储类型 | 2^32 - 1 | 2^32 - 1 |
有序性 | 无序 | 有序 |
唯一性 | 是 | 否 |
集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等,由于集合类型的 Redis 内部是使用值为空的散列表实现,所有这些操作的时间复杂度都为 0(1) 。
Redis 还提供了多个集合之间的交集、并集、差集的运算。
2.3.1 SADD/SREM(添加/删除)
- SADD key member [member …]
添加元素 - SREM key member [member …]
删除元素
127.0.0.1:6379> sadd set 1 2 3
(integer) 3
127.0.0.1:6379> srem set 1
(integer) 1
2.3.2 SMEMBERS(获取集合中所有元素)
- SMEMBERS key
获取集合中所有元素 - SISMEMBER key member
判断元素是否在集合中 - 演示操作
127.0.0.1:6379> smembers set
1) "2"
2) "3"
3) "4"
127.0.0.1:6379> sismember set 1
(integer) 0
127.0.0.1:6379> sismember set 2
(integer) 1
2.3.3 其他
- SINTER key [key …]
集合的交集运算 - SUNION key [key …]
集合的并集运算
2.4 Zset(有序集合类型)
2.4.1 介绍
在 set 集合类型的基础上,有序集合类型为集合中的每个元素都 关联一个分数 ,这使得我们不仅可以完成插入、删除和判断元素是否存在在集合中,还能够获得分数最高或最低的前N个元素、获取指定分数范围内的元素等与分数有关的操作。
- 有序集合与列表类型的相似点:
- 二者都是有序的。
- 二者都可以获得某一范围的元素。
- 有序集合与列表类型的异同点:
- 列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度会变慢。
- 有序集合类型使用散列表实现,所有即使读取位于中间部分的数据也很快。
- 列表中不能简单的调整某个元素的位置,但是有序集合可以(通过更改分数实现)
- 有序集合要比列表类型更耗内存。
2.4.2 新增-ZADD
ZADD key score member [score member ...]
向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到
集合中的元素个数,不包含之前已经存在的元素。
2.4.3 获取-ZRANGE/ZREVRANGE
# 按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素)
ZRANGE key start stop [WITHSCORES]
# 按照元素分数从大到小的顺序返回索引从start到stop之间的所有元素(包含两端的元素)
ZREVRANGE key start stop [WITHSCORES]
注意: 如果需要获得元素的分数的可以在命令尾部加上 WITHSCORES 参数
2.4.4 获取元素的分数-ZSCORE
ZSCORE key member
2.4.5 删除元素-ZREM
删除元素。移除有序集合key中的一个或多个成员,不存在的成员将被忽略。
当key存在但不是有序集类型时,返回一个错误。
ZREM key member [member ...]
2.4.6 其他指令
- 获得指定分数范围的元素
ZRANGEBYSCORE key min max [WITHSCORES]
- 增加某个元素的分数
# increment 增加的分数值
ZINCRBY key increment member
- 获得集合中元素的数量
ZCARD key
3 通用命令
3.1 del
删除
DEL key
3.2 exists
确认一个key 是否存在
exists key
3.3 expire(重要)
Redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即:到期后数据销毁。
# 设置key的生存时间(单位:秒)key在多少秒后会自动删除
EXPIRE key seconds
# 查看key生于的生存时间
TTL key
# 清除生存时间
PERSIST key
# 生存时间设置单位为:毫秒
PEXPIRE key milliseconds
3.4 rename-重命名
# 重命名key
rename oldkey newkey
3.5 type
显示指定key的数据类型
type key
3.6 删除所有key指令
//删除当前数据库中的所有Key
flushdb
//删除所有数据库中的key
flushall