Redis数据结构
五种数据类型
- 字符串(String)
- 字符串列表(list)
- 有序字符串集合(sorted set)
- 哈希(hash)
- 字符串集合(set)
Key定义的注意点
- 不要过长,一般不超过1024字节
- 不要过短,过段会降低redis查找效率
- 最好有统一的命名规范
存储String
在redis中以二进制 方式存储,存入和获取的数据相同
Value最多可以容纳的数据长度为512M
- 存储String常用命令:
- 赋值
set keys values
- 取值
get keys
- 删除
del keys
- 数值增减
incr keys
(递增)
decr keys
(递减)
如果keys存在,且可以转换为整数类型,则进行递增或递减,如果是字符串类型无法转换为整数,则会报错,如果可以说不存在,则会创建keys并为其赋值为0,在进行递增递减操作 - 扩展命令
incrby keys values
(如果keys存在,则为keys增加指定values值 的数,如果不存在,则会创建keys并为其赋值为0,再进行增值)
decrby keys values
(如果keys存在,则为keys减少指定values值的数,如果不存在,则会创建keys并为其赋值为0,再进行减值)
append keys values
(字符串追加,再keys后面追加字符串values;如果keys不存在,则创建keys,其值就是values)
- 赋值
存储Hash
可以看成是String Key和String Value的map容器
每一个Hash可以存储4294967295个键值对
- 存储Hash常用命令:
- 赋值
hset 键值对 keys values
(单个赋值)
hmset 键值对 keys1 values1 keys2 values2
(多个赋值) - 取值
hget 键值对 keys
(单个取值)
hmget 键值对 keys1 keys2
(多个取值)
hgetall 键值对
(取值键值对中的所有keys和values) - 删除
hdel 键值对 keys1 keys2
(删除指定keys)
del 键值对
(删除整个键值对) - 增加数字
hincrby 键值对 keys values
(键值对中指定keys增加values值) - 自学命令
hexists 键值对 keys
(判断键值对中keys是否存在,如果存在返回 1,否则返回0)
hlen 键值对
(获取键值对中有几个属性)
hkeys 键值对
(获取键值对中有几个key)
hvals 键值对
(获取键值对中有几个value)
- 赋值
存储list
arrayList使用数组方式
LinkedList使用双向链接方式
双向链表中增加数据
双向链表中删除数据
- 存储list常用命令:
- 两端添加
lpush keys value1 value2 value3
(左添加)
rpush keys value1 value2 value3
(右添加) - 查看列表
lrange keys start end
(列出keys键值,从start开始,到end结 束,0代表第一位,-1代表最后一位,-2代表倒数第二位) - 两端弹出
lpop keys
(左弹出,左边弹出第一位,即删除左边第一位)
rpop keys
(右弹出,右边弹出第一位,即删除右边第一位) - 获取列表元素个数
llen keys
(获取keys元素个数) - 扩展命令
lpushx keys values
(如果keys存在,则在其左边添加字符values)
rpushx keys values
(如果keys存在,则在其右边添加字符values)
lrem keys count values
(删除keys中指定的值,count如果大于0,则从keys最左边开始删除count个数的values;如果等于0,则删除全部的values;如果小于0,则从keys最右边开始删除count个数的values)
lset keys subscript values
(更改keys的subscript角标处为values字符)
linsert keys before value1 value2
(在第一个value1的前面插入value2)
linsert keys after value1 value2
(在第一个value1的后面插入value2)
rpoplpush keys1 keys2
(将keys1的右边一位弹出,并压入keys2的左边)
- 两端添加
存储Set
和List类型不同的是,Set集合中不允许出现重复的元素
Set可包含的最大元素数量是4294967295
- 存储set常用命令:
- 添加/删除元素
sadd keys value1 value2 value3
(添加元素)
srem keys value1 value2
(删除元素) - 获得集合中的元素
smembers keys
(查看指定keys中有哪些元素)
sismember keys values
(判断keys中是否有指定的values元素) - 集合中的差集运算
sdiff key1 key2
(显示key1和key2的不同部分) - 集合中的交集运算
sinter key1 key2
(显示key1和key2的相同部分) - 集合中的并集运算
sunion key1 key2
(将key1和key2合并显示) - 扩展命令
scard keys
(获取keys中的元素数量)
srandmember keys
(随机返回keys中的一个元素)
sdiffstore key3 key1 key2
(将key1和key2不同的部分存入key3)
sinterstore key3 key1 key2
(将key1和key2相同的部分存入key3)
sunionstore key3 key1 key2
(将key1和key2合并存入key3)
- 添加/删除元素
- 存储Set使用场景
- 跟踪一些唯一性数据
- 用于维护数据对象之间的关联关系
存储Sorted-Set
-
Sorted-Set和Set的区别
Sorted-Set中的每一个成员都会有一个分数与之关联,redis通过该分数对集合中的成员进行从小到大的排序
Sorted-Set中的成员在集合和的位置是有序的
-
存储Sorted-Set常用命令:
- 添加元素
zadd keys 分数 value1 分数 value2
(添加元素,注意元素前面要加 上对应的分数,比如60、70、100等,如果添加的元素已经存在,则会更 新其分数) - 获得元素
zscore keys values
(获得指定元素的分数)
zcard keys
(获得keys中的元素个数) - 删除元素
zrem keys value1 value2
(删除指定元素) - 范围查询
zrange keys start end
(查询start到end范围的元素)
zrange keys start end withscores
(查询start到end范围的元素及其分数)
zrevrange keys start end withscores
(按照从大到小的顺序排序)
zremrangebyrank keys start end
(按照位置范围进行删除)
zremrangebyscore keys start end
(按照分数范围进行删除,注意start和end是分数大小) - 扩展命令
zrangebyscore keys start end withscores limit start end
(查 询分数范围的元素及其分数大小,并利用limit进行分页)
zincrby keys values 元素
(增加指定元素values值)
zcount keys start end
(显示start到end之间的元素个数)
- 添加元素
-
Sorted-Set使用场景
- 如大型在线游戏积分排行榜
- 构建索引数据