一.Redis数据类型
参考资料:http://www.redis.cn/topics/data-types.html
相关命令参考: http://redisdoc.com/
Redis 是一种基于内存的开源数据结构存储系统,支持多种数据类型,每种数据类型都有自己特定的操作命令。
-
String(字符串):
特点:最基本的数据类型,可以存储字符串、整数或者浮点数。
用途:常用于缓存、计数器、计分等场景。 -
Hash(哈希):
特点:存储了键值对集合,适合存储对象。
用途:存储和获取对象的多个字段值,比如存储用户信息、商品信息等。 -
List(列表):
特点:链表结构,可以包含多个字符串元素,支持栈和队列操作。
用途:适合用于消息队列、最近联系人列表、新闻流等场景。 -
Set(集合):
特点:存储字符串的无序集合,元素唯一。
用途:适合做唯一值的存储,比如用户的标签、点赞用户列表等。 -
Sorted Set(有序集合):
特点:和集合类似,但每个元素都关联一个分数(score),可以根据分数进行排序。
用途:适合做排行榜、范围查询等,比如积分排行榜、最热门文章等。
1.字符串string
字符串是所有编程语言中最常见的和最常用的数据类型,而且也是redis最基本的数据类型之一,而且redis 中所有的 key 的类型都是字符串。常用于保存 Session 信息场景,此数据类型比较常用
格式·:SETkeyvalue [EX seconds] [PX milliseconds] [NX|XX]时间复杂度: O(1)将字符串值 value 关联到 key 如果 key 已经持有其他值, SET 就覆写旧值,无视类型。
当 SET 命令对一个带有生存时间(TTL)的键进行设置之后,该键原有的 TTL 将被清除。从 Redis 2.6.12 版本开始, SET 命令的行为可以通过一系列参数来修改:
EX seconds :将键的过期时间设置为 seconds 秒。执行 SET key value EX seconds 的效果等同于执行 SETEX key seconds value 。PX milliseconds :将键的过期时间设置为 milliseconds 毫秒。执行 SET key value PX milliseconds 的效果等同于执行 PSETEX key milliseconds value 。NX :只在键不存在时,才对键进行设置操作。执行 SET key value NX 的效果等同于执行 SETNX key value 。
XX :只在键已经存在时,才对键进行设置操作。
示例:
1.判断类型 type
type
TYPE key1 #判断类型
2.设置自动过期 ex
ex
SET title ceo ex 3#设置自动过期时间3s OK
3.key不存在时设置,相当于添加 setnx
4.修改(key需要存在) xx 相当于update
5.删除key del
6.批量设置多个key mset
批量获取多个key mget
7.追加数据 append
8.返回字符串key对应值的字节数 strlen
9.判断key是否存在
10.查看超时时间
ttl key #查看key的剩余生存时间,如果key过期后,会自动删除
-
-1#返回值表示永不过期,默认创建的key是永不过期,重新对key赋值,也会从有剩余生命周期变成永不过期
-
-2#返回值表示没有此key
-
num #key的剩余有效期
11.重新设置key的过期时间
EXPIRE 重新设置过期时间
PERSIST 永远不过期
127.0.0.1:6379> set name cxk ex 20 #建立一个key,过期时间为20秒
OK
127.0.0.1:6379> ttl name
(integer) 19
127.0.0.1:6379> expire name 1000 #重新设置过期时间为1000秒
(integer) 1
127.0.0.1:6379> ttl name
(integer) 998
127.0.0.1:6379> persist name #永远不过期
(integer) 1
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379>
2.列表list
列表是一个双向可读写的管道,其头部是左侧,尾部是右侧,一个列表最多可以包含2^32-1(4294967295)个元素,下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,元素值可以重复,常用于存入日志等场景,此数据类型比较常用
-
有序
-
可重复
-
左右都可以操作
生成列表并插入数据
命令 | 解释 例子 |
---|---|
lpush | 从左边添加数据 例子:lpush name zhou wu zheng wang |
rpush | 从右边添加数据 例子: rpush car benz bmw |
llen | 获取列表长度 例子: llen 列表名称 |
lindex | 获取单个元数 例子: lindex name 0 ; lindex name -1 |
lrange | 获取多个元素 例子: lrange name 0 3 第1个到第三个元素 |
lset | 修改列表元素 例子: lset name 2 feng 将name的第二个元素改为feng |
lpop | 删除列表元素 例子: lpop name 删除左边第一个 |
rpop | 删除列表元素 例子: rpop name 删除右边第一个 |
ltrim | 对列表修剪, 例子: ltrim name 1 2 只留下编号为 1 2 的文件 |
del | 删除列表 例子:del name |
LPUSH和RPUSH都可以插入列表
LPUSHkeyvalue [value …]
时间复杂度: O(1)
将一个或多个值 value 插入到列表 key 的表头如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头:比如说,对空列表
mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a ,这等同于原子性地执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令。如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。当 key 存在但不是列表类型时,返回一个错误。
RPUSH key value [value …]
时间复杂度: O(1)
将一个或多个值 value 插入到列表 key 的表尾(最右边)如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c ,等同于执行命令 RPUSH mylist a 、
RPUSH mylist b 、 RPUSH mylist c 。如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。当 key 存在但不是列表类型时,返回一个错误。
示例:
新建列表
127.0.0.1:6379> lpush name zhou wang qiu sun
(integer) 4
127.0.0.1:6379> type name
list
127.0.0.1:6379> llen name
(integer) 4
127.0.0.1:6379> lrange name 0 -1
1) "sun"
2) "qiu"
3) "wang"
4) "zhou"
#数据是从右往左添加的,所以看到的是sun开始
#从左往右边加 数据
127.0.0.1:6379> rpush name xu wu zheng han
(integer) 8
127.0.0.1:6379> lrange name 0 -1
1) "sun"
2) "qiu"
3) "wang"
4) "zhou"
5) "xu"
6) "wu"
7) "zheng"
8) "han"