跳到主要内容

基本数据类型

1. 字符串(string)

redis中所有的key的类型都是字符串 常用操作:

# 添加一个key
set key1 value1
# 添加一个key,并设置自动过期时间
set name1 jack1 ex 3
# 批量设置多个key
mset key1 value1 key2 value2

# 获取一个key的值
get key1

# 获取key值的长度
strlen key1

# 查看key是否存在,如果存在则返回1,若不存在则返回0
exists key1

# 删除一个key
del key1

# 查看key的过期时间
ttl name1

# 设置key的过期时间
expire key1 86400

# 取消key的过期时间
persist key1

# 追加数据
append key1 append # key1的值从value1变成value1append

# 数值递增
set num 10
incr num # num的值变成11

# 数值递减
set num 10
decr num # num的值变成9

2. 列表

列表是一个双向可读写的管道,其头部是左侧,尾部是右侧。一个列表最多可以容纳2^32 -1 个元素。

常用基本操作:

# 生成列表list1并插入数据, 最后的john将在最左侧
lpush list1 jack tom john

# 查看类型
type list1
# 结果为 list

# 向列表追加数据
lpush list1 ash
rpush list1 banshee

# 获取列表长度
llen list1

# 获取列表指定位置数据
rpush list2 zhao qian sun li
## 从头部获取第1到第2数据
lrange list2 1 2
## 从头部开始获取第2个数据
lrange list2 2 2

# 移除列表数据
## 删除最后一个
rpop list1
## 删除第一个
lpop list1
序号命令及描述
1BLPOP key1 [key2] timeout移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
2BRPOP key1 [key2] timeout移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
3BRPOPLPUSH source destination timeout从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
4LINDEX key index通过索引获取列表中的元素
5LINSERT key BEFORE | AFTER pivot value在列表的元素前或者后插入元素
6LLEN key获取列表长度
7LPOP key移出并获取列表的第一个元素
8LPUSH key value1 [value2]将一个或多个值插入到列表头部
9LPUSHX key value将一个或多个值插入到已存在的列表头部
10LRANGE key start stop获取列表指定范围内的元素(lrange key 0 -1 为从头到尾)
11LREM key count value移除列表元素
12LSET key index value通过索引设置列表元素的值
13LTRIM key start stop对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
14RPOP key移除并获取列表最后一个元素
15RPOPLPUSH source destination移除列表的最后一个元素,并将该元素添加到另一个列表并返回
16RPUSH key value1 [value2]在列表中添加一个或多个值
17RPUSHX key value为已存在的列表添加值

3. 集合(Set)

set是string类型的无序集合,集合中的成员是唯一的,不能重复,可以在两个不同的集合中对数据进行对比并取值。

常用操作:

# 生成集合
sadd set1 v1
sadd set2 v2 v4

# 追加数值
sadd set1 v2 v3

# 查看集合中的所有数据
smembers set1

# 获取集合的差集
## 属于set1而不属于set2的数据
sdiff set1 set2

# 获取集合的交集
sinter set1 set2

# 获取集合的并集
sunion set1 set2
序号命令描述
1SADD key member1 member2向集合添加一个或多个成员
2SCARD key获取集合的成员数
3SDIFF key1 key2返回给定所有集合的差集
4SDIFFSTORE destination key1 key2返回给定所有集合的差集并存储在 destination 中
5SINTER key1 key2返回给定所有集合的交集
6SINTERSTORE destination key1 key2返回给定所有集合的交集并存储在 destination 中
7SISMEMBER key member判断 member 元素是否是集合 key 的成员
8SMEMBERS key返回集合中的所有成员
9SMOVE source destination member将 member 元素从 source 集合移动到 destination 集合
10SPOP key移除并返回集合中的一个随机元素
11SRANDMEMBER key count返回集合中一个或多个随机数
12SREM key member1 member2移除集合中一个或多个成员
13SUNION key1 key2返回所有给定集合的并集
14SUNIONSTORE destination key1 key2所有给定集合的并集存储在 destination 集合中
15SSCAN key cursor MATCH pattern COUNT count迭代集合中的元素

4. 有序集合(sorted set)

有序集合类似普通集合,成员不能重复,不同的是每个元素都会关联一个double类型的分数,redis根据分数对成员进行从小到大的排序。有序集合中,成员唯一,但分数可以重复。

常用操作:

# 生成有序集合
zadd zset1 1 v1
zadd zset1 2 v2
zadd zset1 3 v3 4 v4

# 显示有序集合中所有的key
zrange zset1 0 -1
# 显示所有Key和分数
zrange zset1 0 -1 withscores

# 获取集合的长度
zcard zset1

# 基于索引返回数值
zrange zset1 1 3
zrange zset1 4 7
zrange zset1 5 5

# 获取某个数值的索引
zrank zset1 v2

5. 哈希

hash是一个string类型的field和value的映射表,适用于存储对象。

常用基本操作:

# 生成hash key
hset hash1 name tom age 18

# 获取hash key的字段值
hget hash1 name

# 删除一个hash key的字段
hdel hash1 age

# 获取hash表中所有key
hkeys hash1

# 获取hash表中所有key及其value
hgetall hash1
序号命令描述
1HDEL key field2 field2删除一个或多个哈希表字段
2HEXISTS key field查看哈希表 key 中,指定的字段是否存在。
3HGET key field获取存储在哈希表中指定字段的值/td>
4HGETALL key获取在哈希表中指定 key 的所有字段和值
5HINCRBY key field increment为哈希表 key 中的指定字段的整数值加上增量 increment 。
6HINCRBYFLOAT key field increment为哈希表 key 中的指定字段的浮点数值加上增量 increment 。
7HKEYS key获取所有哈希表中的字段
8HLEN key获取哈希表中字段的数量
9HMGET key field1 field2获取所有给定字段的值
10HMSET key field1 value1 field2 value2同时将多个 field-value (域-值)对设置到哈希表 key 中。
11HSET key field value将哈希表 key 中的字段 field 的值设为 value 。
12HSETNX key field value只有在字段 field 不存在时,设置哈希表字段的值。
13HVALS key获取哈希表中所有值
14HSCAN key cursor [MATCH pattern] [COUNT count]迭代哈希表中的键值对。

补充:redis底层的数据结构

redis底层数据结构一共6种,分别是:简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组。

  • 字符串 -> 简单动态字符串
  • 列表 -> 双向链表 + 压缩列表
  • 哈希 -> 压缩列表 + 哈希表
  • 集合 -> 哈希表 + 整数数组
  • 有序集合 -> 压缩列表 + 跳表

键和值用哈希表结构组织,一个哈希表保存所有键值对。一个哈希表就是一个数组,数组中的每个元素称为一个哈希桶。每个哈希桶保存了键值对数据,其中的元素保存的不是值本身,而是指向具体值的指针。