索引
redis存在5种基本数据类型和三种特殊类型
String类型
取值赋值
关键词:set get append strlen
set key value #基本使用设置值
get key
append key abc #追加值
strlen key #获取字符串长度
例:
加减操作
increment 自增1 decrement 自减
incrby 固定增量 自定义
decrby 固定减量 自定义
#值++
incr key
#值--
decr key
#增长指定的长度
incrby key number
#减少指定的长度
decrby key number
例:
范围操作 range
getrange key index1 index2 获取当前指定范围 如果最大长度 index2 可替为-1
getrange k3 2 5
2=初始下标
5=末尾下标
5=-1时==以下标2到末尾的范围
替换操作
setrange key offset index 内容 ##offset 偏移量 指定位置开始替换
SETRANGE k3 2 4444444
2=初始偏移的下标
后面index是要替换的内容
判断是否存在
#set with expire #如果存在设置消失时间及信息值
EXISTS key #判断值是否存在
setex key time v #既能增加过期时间还能够重新指定新的值,如果当前key不存在创建一个新的key和值并指定过期时间
ttl key #查看key的过期时间(秒)
#set if not expire #如果不存在 默认会创建一个新的,存在不操作 / 及判断存在不存在同时也能根据结果进行进一步操作
setnx key v
批量值操作
more set
mset k1 v1 k2 v2 #存
mget k1 k2 #取
关于对象的存储
set key value
#例如:set user {id:1,name:zhangsan,age:20}
如果多个对象存储时可能会遇上同一个对象存储两个,当两个key相同时第二次存储会覆盖第一次数据
建议:key可以用id代替
例如:
set 1 {id:1,name:zhangsan,age:20}
set 2 {id:2,name:zhangsan2,age:21}
取值赋值操作
getset 先取值,再赋值
关于浮点类型的增减操作
关键词: incrbyfloat 不支持直接+1-1操作 支持固定增减量操作
incrbyfloat key 浮点数字
删除操作
del key
List列表类型
list列表类型,特点:所有的命令操作都是使用l开始。 和链表/队列比较相似,可以通过首尾进行操作。
基本赋值和取值操作
默认左侧插入值: lpush l意思 list
右侧插入值:rpush r意思 right
查询数据:lrange key start end
获取长度 llen key
lpush student zhangsan wangwu lisi #添加一个list列表
lpush student liubei #从左侧插入数据
rpush student zhangfei #从右侧插入数据
lrange student 0 -1 #查询这个student列表中的全部数据
llen student #获取这个list列表的长度
list结构的删除数据操作
删除整个list列表
del key #这种是直接将整个列表都删除 del删除删除任意类型
删除list列表中的某一些数据
关键词:pop 弹出 抛出
语法:
lpop count 左侧弹出
# 没给count值,默认左 弹出1 返回的信息是弹出的值
lpop stu
# count 提供值,可以弹出多个,返回值就是弹出的值得列表
lpop stu 10
rpop count 右侧弹出
# 没给count值,默认右 弹出1 返回的信息是弹出的值
rpop stu
# count 提供值,可以弹出多个,返回值就是弹出的值得列表
rpop stu 10
查询删除指定值 list remove
关键词:lrem key count value ---- 默认从左侧开始查询并删除
lpush student wangwu zhaoliu zhangsan lisi wangwu tianqi zhangsan
zhangsan #添加一个list列表(有多个zhangsan)
lrem stu 2 zhangsan #count正数 从左向右删除 count负数, 从右向左删除
索引相关 index
通过索引获取数据
lindex key index
lindex student 0 #获取下标为0的数据
截取列表中一部分值
trim 在Java和脚本中是去掉前后空格,本身意思 修剪、整理。 在redis中作用域截取部分值,截取完成只保留获取的内容。
ltrim student 1 4 #截取列表中的第1到第4下标的数据
列表中替换值
lset
lset student 1 wangwu #把下标为1的数据替换成wangwu
Set集合类型
特点: 无序、不能重复 所有命令 s 开头
基本操作
通过测试:重复的值无法添加成功,并且值得顺序也不是固定的。
添加值:
sadd student
查询值:
smembers student
删除整个集合:
del student
删除集合中的某个值:
srem key value
其他操作
判断当前集合中是否存在指定的值 s is member 是否是成员
语法 sismember key v
sismember student zhangsan
查看当前集合中值个数 s card
语法:scard key
scard student
随机获取和随机删除
随机获取: srandmember [ s random member ]
语法:srandmember key count
srandmember student 1
随机删除: spop
语法: spop key count
spop student 1
特殊操作
差集 diff 差异 只返回第一个集合的差值
sadd zb1 zhangsan lisi wangwu xiaoming xiaohong
sadd zb2 zhangsan wangwu dasima xiaohuang
sdiff zb1 zb2
sdiff zb2 zb1
交集 sinter 交集
sinter zb1 zb2
并集 s union 联盟 工会 ---- 去重复
sunion zb1 zb2
Hash类型(map结构)
key-value(map) 比较适合对象类型的数据存储 key -(key-value)
基础语法
存值:
hset student k1 v1 k2 v2 ......
取值:
hget student k1 #只能取一个值
hmget student k1 k2 k3 ... #可以取多个
获取全部的值 hgetall 名称k
hgetall student
通过值的key删除指定的数据
hdel student k3
读取当前hash表(map集合)中数据的个数
hlen student
其他用法
判断是否存在
hexists student k1
读取所有的key ----- 1w条数据 取某一些特定的数据,取到所有key 循环 取值 判断 筛选。
hkeys student
取所有的value — 案例:Java中想将redis中的hash结构转化为set结构
hvals student
Zset
有序不重复集合,在set的基础上多增加一个值 set k1 * v1 (zset k1 排序的值(score) v1)
有序不可重复的set集合
主要使用方向:工资、班级成绩等等之类的数据。 或者 权重处理 0 普通 1 重要
基本语法
增加
zadd emps 8000 {id:1,name:zhangsan,sal:8000}
zadd emps 5000 {id:2,name:lisi,sal:5000}
zadd emps 12000 {id:3,name:wangwu,sal:12000}
查询
zrange emps 0 -1 #查询 - 默认升序
zrandmember emps 1 #随机读取
删除数据
删除整个key :del key
zrem emps {id:2,name:lisi,sal:5000}
del emps
zset 复杂查询
#显示所有信息,从小到大 (范围) -inf 负无穷 +inf正无穷
语法:** z range by score** key min max — min max使用的是排序字段的值
zrangebyscore emps 8000 10000 #范围
zrangebyscore emps -inf +inf #正无穷大,负无穷大
升序操作(默认的就是升序)
# 根据当前排序结果取所有数据
zrangebyscore emps -inf +inf
# 根据当前排序结果取所有数据 并显示排序字段
zrangebyscore emps -inf +inf withscores
# 根据当前排序结果取所有数据 并显示排序字段 并截取某一部分值
zrangebyscore emps -inf +inf withscores limit 0 1
# 取排序字段值大于**的数据
zrangebyscore emps 8000 +inf
# 取排序字段值小于**的数据
zrangebyscore emps -inf 8000
降序操作
z rev range k start stop start stop取索引的范围。
#降序显示
zrevrange emps 0 -1
根据当前排序(降序)结果取所有数据
zrevrangebyscore emps +inf -inf
geospatial 地理位置
语法:
geoadd key 精度 纬度 名称
geoadd maps 116.22518499110029 39.951383565611934 xuejiaao
查询指定位置的经纬度 GEOPOS
geopos maps xuejiaao
查询两地点之间的距离 GEODIST
geodist key 地点1 地点2 单位(默认 米)
geodist maps xuejiaao hongyun M
查询附近的城市(定位) GEORADIUS
georadius maps 116.22518499110029 39.951383565611934 1500 KM
查询附近的城市(定位)–显示到中间的距离 GEORADIUS
关键词: withdist
georadius maps 116.22518499110029 39.951383565611934 500 KM withdist
查询附近的城市(定位)–显示他人精准信息 GEORADIUS
关键词:withcoord
georadius maps 116.22518499110029 39.951383565611934 500 KM withdist withcoord
查询附近的城市(定位)–显示他人精准信息 并指定返回个数 GEORADIUS
关键词: count
georadius maps 116.22518499110029 39.951383565611934 500 KM withdist withcoord count 1
GEO RADIUS BY MEMBER 通过元素(非坐标)定位信息
georadiusbymember maps hongyun 10 KM
Geohash 返回hash值 作用是将二维写的经纬度转化为一维的字符串,字符串越像表示距离越近
geohash maps hongyun
HyperLogLog基数统计
添加基础数据
> pfadd clazz zhangsan lisi wangwu zhaoliu tianqi
获取总数
pfcount clazz
合并 – 规则 将后面的数据合并到第一个指定的key中–合并之后也是默认去重复。
pfmerge clazz stu
Bitmaps位图
首先增加基础数据 setbit
setbit kq 1 1
查看某一天的打卡记录 getbit
getbit kq 1
统计打卡的天数 bitcount
bitcount kq