这是官方文档链接
1.五大数据类型
String、List、Hash、Set、Zset
2.String
在redis中使用get/set检索和设置字符串,这个值可以是任何字符串包括了二进制,这样使得可以存储更多类型的文件,但是最大512MB。
getrange 获得key的范围,
getset 覆写key
3.List
官方描述:Redis 列表是通过链表实现的,这意味着即使列表中有数百万个元素,在列表的头部或尾部添加新元素的操作也是在常数时间内执行的。用LPUSH命令在10个元素的列表头添加一个新元素的速度与在1000万个元素的列表头添加一个元素的速度是一样的。
lpush/rpush 左/右插入一个或多个值
Redis 允许我们使用列表作为上限集合,只记住最新的 N 项并使用LTRIM命令丢弃所有最旧的项。
这个LTRIM命令告诉 Redis 只获取从索引 0 到 2 的列表元素,其他所有元素都将被丢弃。
除此之外:
lpop/rpop左边/右边取出 健在值在 键光值亡
rpoplpush 右边取出来插到左边
lrange 取范围值 索引下标 从左到右
lindex 按照索引下标获取元素从左到右
llen 获取长度
linsert key before value newvalue 在value的前面插入newvalue
lrem key n value 从左边删除n个值 从左到右
lset key index vlaue 第n个位置换为value
list底层结构为quicklist,在列表较少的情况下 为ziplist,变多后为quicklist,注意都是双指针。
4.Hash
常用的命令如下:
hset 添加数据
hget 取出
hmset 批量和设置
hexits 查看是否存在
hkeys 查看所有field
hvals 查看所有value
hincyby 给key中的filed 值增量
hsetnx 将key中的filed设为value ------当field不存在
5.Set
set是无序的字符串集合,他的数据结构----dict字典 字典由哈希表实现
常用的命令如下:
sadd 一个或者多个member加入到集合key中
scard 返回key的个数
srem 删除某个元素
srandmerber 随机取出n个值 但是不会删除
smove 把一个元素从一个集合移动到另一个集合
sinsert 返回元素的交集
sunion 返回集合的并集
sdiff 返回差集
6.Zset
官方描述:有序集合是一种类似于集合和哈希混合的数据类型。底层是hash和跳跃表 。与集合一样,有序集合由唯一的、不重复的字符串元素组成,因此在某种意义上,有序集合也是一个集合。然而,虽然集合内的元素没有排序,排序集合中的每个元素都与一个浮点值相关联,称为分数 (这就是为什么类型也类似于散列,因为每个元素都映射到一个值)。此外,有序集合中的元素是按顺序获取的(因此它们不是按请求排序的,顺序是用于表示有序集合的数据结构的特性)。它们根据以下规则排序:
- 如果 A 和 B 是具有不同分数的两个元素,则 A > B 如果 A.score 是 > B.score。
- 如果 A 和 B 的分数完全相同,则 A > B 如果 A 字符串按字典顺序大于 B 字符串。A 和 B 字符串不能相等,因为排序集只有唯一元素。
zset中 每个成员关联一个评分score 被用来排序
zadd key score value 添加score
zincrby key increment value 增加score,返回增加后的score
zrangebyscore key -inf +inf 从小到大排序
zrem key value 删除
zcard key 获取元素个数
7.hyperloglog
可以解决去重和计数的问题,mysql可以用distinct count去重而redis可以用set hsah bitmap,hypeloglog12kb就可以计算2^64个不同的基数,
pfadd 变化了返回1 否则 0,
pfcount 计算数量 计算基数 意思就是重复的不计算pfmerge 合并
8.geospatial
就是一个二维坐标,如geoadd china:city 10. 21 31.23 上海---经纬度,但是超出范围会返回错误,范围是 +180 -180 +85 -85。
geopos 输出经纬度
geodist 两距离的直线距离 单位m km mi ft
georadius 给定的经纬度找出某一半径的元素