Redis入门基础数据类型
1 概述
Redis(Remote Dictionary Server),远程字典服务。是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,提供多种语言的API。
redis的使用场景:
- 发布订阅系统
- 地图信息分析
- 计时器、计数器(浏览量)
…
2 基础数据类型
String
String是Redis中最常用的一种数据类型,也是Redis中最简单的一种数据类型。首先,表面上它是字符串,但其实他可以灵活的表示字符串、整数、浮点数3种值。Redis会自动的识别这3种值。
相关操作:
命令 | 说明 |
---|---|
set | 添加 |
get | 获取 |
APPEND | 追加 |
EXISTS | 判断是否存在 |
STRLEN | 获取长度 |
INCR | 自增 |
DECR | 自减 |
GETRANGE | 截取字符串 |
SETRANGE | 替换部分字符串 |
SETEX | 设置过期时间 |
SETNX | 不存在设置 |
List
- 实际上是一个链表,before Node after , left,right 都可以插入值
- 如果key 不存在,创建新的链表
- 如果key存在,新增内容
- 如果移除了所有值,空链表,也代表不存在!
- 在两边插入或者改动值,效率最高! 中间元素,相对来说效率会低一点~
- 消息排队!消息队列 (Lpush Rpop), 栈( Lpush Lpop)!
命令 | 说明 |
---|---|
lpush | 左插入 |
lrange | 查询集合 |
rpush | 右插入 |
lpop | 左移除 |
rpop | 右移除 |
lindex | 查询指定下标元素 |
llen | 获取集合长度 |
lrem | 根据value移除指定的值 |
ltrim | 截取元素 |
rpoplpush | 移除指定集合中最后一个元素到一个新的集合中 |
lset | 更新 |
linsert | 在某元素的前(before)后(after)添加一个元素 |
Set
可实现共同好友、共同关注等需求。
命令 | 说明 |
---|---|
sadd | 添加 |
smembers | 查看所有元素 |
sismember | 判断是否存在 |
scard | 查看长度 |
srem | 移除指定元素 |
srandmember | 抽随机 |
spop | 随机删除元素 |
smove | 移动指定元素到新集合中 |
sdiff | 差集 |
sinter | 交集 |
sunion | 并集 |
Hash
比String更加适合存对象
命令 | 说明 |
---|---|
hset | 添加hash |
hget | 查询 |
hgetall | 查询所有 |
hdel | 删除hash中指定的值 |
hlen | 获取hash的长度 |
hexists | 判断key是否存在 |
hkeys | 获取所有key |
hvals | 获取所有value |
hincrby | 给值加增量 |
hsetnx | 存在不添加 |
zSet
成绩表排序,工资表排序,年龄排序等需求可以用zset来实现!
命令 | 说明 |
---|---|
zadd | 添加 |
zrange | 查询 |
zrangebyscore | 排序小-大 |
zrevrange | 排序大-小 |
zrangebyscore withscores | 查询所有值包含key |
zrem | 移除元素 |
zcard | 查看元素个数 |
zcount | 查询指定区间内的元素个数 |
Geospatial
实际需求中,我们可以用来查询附近的人、计算两人之间的距离等。当然,那些所需的经纬度我们肯定要结合java代码来一次导入,手动查询和录入太过于浪费时间!
注意点1:两极无法直接添加,我们一般会下载城市数据,直接通过java程序一次性导入!
注意点2:有效的经度从-180度到180度。
注意点3:有效的纬度从-85.05112878度到85.05112878度。
注意点4:m 为米。km 为千米。mi 为英里。ft 为英尺。
命令 | 说明 |
---|---|
geoadd | 添加 |
geopos | 查看 |
geodist | 计算距离 |
georadius | 查询附件位置 |
georadiusbymember | 查找指定元素指定范围内的元素 |
geohash | 返回经纬度的hash值 |
Hyperloglog
在Redis中,可能会有一定的误差性。 官方给出的误差率是0.81%。
Hyperloglog的优点: 占用的内存是固定的,2^64个元素,相当于只需要12kb的内存即可。效率极高!
如果在实际业务中,允许一定的误差值,我们可以使用基数统计来计算~效率非常高!比如:网站的访问量,就可以利用Hyperloglog来进行计算统计!
命令 | 说明 |
---|---|
pfadd | 添加数据集 |
pfcount | 统计数据集 |
pfmegre | 合并数据集-自动去重 |
Bitmap
Bitmap 位图,数据结构! 都是操作二进制位来进行记录,就只有0 和 1 两个状态!
实际需求中,可能需要我们统计用户的登陆信息,员工的打卡信息等等。只要是事务的只有两个状态的,我们都可以用Bitmap来进行操作!!!
命令 | 说明 |
---|---|
setbit | 添加 |
getset | 获取 |
bitcount | 统计 |