我提前存入了两个数据
k:v
、z:c
追加字符串,如果当前可以不存在就相当于 set
APPEND xxx value
STRLEN XXX
INCR XXX
DECR XXX
INCRBY XXX 数值
DECRBY XXX 数值
GETRANGE k 0 3 #截取字符串[0,3] GETRANGE k 0 -1 #获得全部的字符串
SETRANGE k 1 xx
setex ( set with expire )
setex k 10 hello #存入数据 k:"hello" 有效时间 10s
setnx ( set if not exist)
setnx k 11 #如果 k 不存在,存入数据 k:"11"
mset k1 v1 k2 v2 k3 v3
mget k1 k2 k3
msetnx k1 v1 k4 v4 # 该操作是一个原子性操作,一个失败 全部失败
user : {id} : {filed}
mset user:1:name zc user:1:age 20 mget user:1:name user:1:age
getset k v
在redis里面,我们可以把
list
变成,栈、队列、阻塞队列
LPUSH list one # 存入list列表,数据为 one LPUSH list two three # 存入list列表,数据为 two、three
RPUSH list right # 存入list列表,数据为 right
LRANGE list 0 1 # 获取list列表 0 1 数据 LRANGE list 0 -1 # 获取list列表全部数据
LPOP xxx
RPOP xxx
lindex xxx index
llen xxx
lrem list 2 two # 移除list列表中 2 个 two , 移除数量多于现存数量的话,会全部移除 不报错
通过下标,截取指定长度数据,会直接改变原列表
ltrim list 1 2 # 截取list列表,1-2 元素
rpoplpush list list1 # 移除list列表的最后一个元素,将他移动到list1列表中
对于该语句,要满足:
- 存在该list列表
- 列表中指定位置有数据
lset list 0 test #将list列表第0个位置的数据替换为test
LINSERT list before v3 v2 # 在list列表中的v3数据 前 插入v2 LINSERT list after v3 v4 # 在list列表中的v3数据 后 插入v4
set中是不能重复读的
sadd set hello #存入一个数据,存入hello到set集合中 sadd set v1 v2 v3 #存入多个数据,存入v1、v2、v3到set集合中 smembers set #查看set集合中所有数据
sismember set hello #判断hello是否在set集合中 sismember set v1 #判断v1是否在set集合中
scard set
srem set hello #set集合中移除hello
srandmember set #随机获取set集合1个元素 srandmember set 2 #随机获取set集合2个元素
spop set #随机删除1个元素 spop set 2 #随机删除2个元素
smove set set1 v2 #将v2元素从set集合移动到set1集合
sdiff set1 set2 #set1集合和set2集合的差集(set1存在,set2不存在)
sinter set1 set2 #set1、set2集合中的交集,即两者都存在的元素
sunion set1 set2 #set1、set2并集
Map集合,key-may,这个值是map集合,本质和string类型没有太大区别,还是一个key-value
hash更适合存储对象,string更适字符串存储
hset hash k v #存入hash集合,k-v
hget hash k #获取hash集合 k元素对应v
hmset hash k1 v1 k2 v2 #存入hash集合 k1-v1 k2-v2
hmget hash k1 k2 #获取hash集合 k1、k2元素对应v
hgetall hash
hlen hash
hdel hash k #删除hash集合,k字段
hkeys hash
hvals hash
hexists hash k1 #判断hash集合中k1字段是否存在
hincrby hash k 2 #hash集合k字段的v+2 hincrby hash k -1 #hash集合k字段的v-1
hsetnx hash k4 v4 #hash集合中 k4字段不存在的话,存入k4-v4
set集合中 , set k1 v1 ; 它是一个无序不重复集合
zset集合中,zset k1 score1 v1 ; 它是一个有序不重复集合
zadd zset 1 one #添加zset集合元素one,顺序为1 zadd zset 2 two 3 three #添加zset集合元素two、three,顺序为2、3
zrange zset 0 -1 #获取全部集合值 zrange zset 0 1 #获取集合中0-1的值
zcard zset
zrangebyscore zset -inf +inf #从小到大,显示全部数据 zrangebyscore zset -inf 2 #从小到大,显示最小到2的数据 zrangebyscore zset -inf 2 withscores #从小到大,显示最小到2的数据并且带着排序数字
zrevrange zset 0 -1
zcount zset 0 2 #获取0-2的元素数量 zcount zset 0 10 #获取0-10的元素数量,超过现存最大值,会显示全部数量,不会报错
zrem zset two #移除zset集合中two元素
六个命令:
- GEOADD : 添加地理位置
- GEOPOS : 获取指定的城市的精度和纬度
- GEODIST : 查看两者之间的直线距离
- GOERADIUS : 以给定的经纬度为中心,找出某一半径内的元素
- GEORADIUSBYMEMBER :找出位于指定元素周围的其他元素
- GEOHASH :返回一个或者多个位置元素的Geohash表示
中国城市经纬度查询 :http://www.jsons.cn/lngcode/
两极无法直接添加,一般会下载城市数据,通过程序一次性导入
有效的经度介于 -180 度至 180 度之 ; 有效的纬度介于 -85.05112878 度至 85.05112878 度之间。
geoadd china:city 116.405285 39.904989 beijing #加入中国城市地理位置,经、纬度,beijing geoadd china:city 113.665412 34.757975 zhengzhou 125.14904 42.927 xian #加入两条记录
geopos china:city beijing
单位:
- [默认] m : 表示单位为米
- km : 表示单位为千米
- mi : 表示单位为英里
- ft : 表示单位为英尺
geodist china:city beijing shanghai #查看 北京到上海 的直线距离,默认单位为米 geodist china:city zhengzhou xian km #查看 郑州到西安 的直线距离,单位为千米
georadius china:city 110 30 1500 km # 以110,30这个经纬度为中心,寻找1500km内的城市 georadius china:city 110 30 1500 km withdist # 以110,30这个经纬度为中心,寻找1500km内的城市,并显示到中间距离的位置 georadius china:city 110 30 1500 km withdist count 2 # 以110,30这个经纬度为中心,寻找1500km内的城市,只显示两条,并显示到中间距离的位置 georadius china:city 110 30 1500 km withcoord # 以110,30这个经纬度为中心,寻找1500km内的城市,并显示查出城市的定位信息 georadius china:city 110 30 1500 km withcoord count 2 # 以110,30这个经纬度为中心,寻找1500km内的城市,只显示两条,并显示查出城市的定位信息
georadiusbymember china:city beijing 1000 km # 查看北京元素1000km以内的其他元素 georadiusbymember china:city shanghai 500 km # 查看上海元素500km以内的其他元素
将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么则距离越近
geohash china:city beijing shanghai xian
GEO 底层的实现原理其实就是 Zset , 我们可以使用 Zset 命令来操作 GEO
127.0.0.1:6379> zrange china:city 0 -1 # 查看china:city集合中全部元素 1) "hangzhou" 2) "shanghai" 3) "zhengzhou" 4) "beijing" 5) "xian" 127.0.0.1:6379> zrem china:city xian # 移除china:city集合中xian元素 (integer) 1 127.0.0.1:6379> zrem china:city shanghai # 查看china:city集合中shanghai元素 (integer) 1 127.0.0.1:6379> zrange china:city 0 -1 # 查看china:city集合中全部元素 1) "hangzhou" 2) "zhengzhou" 3) "beijing"
基数可以比较大小
A = {1,2,3} = 3 ; B = {1,2,3,4,4} = 4
基数 { 不重复的元素 } = xxx
优点 : 占用的内存固定 , 2^64(long)不同的元素的技术 , 只需要12KB内存 , 如果要从内存角度Hyperloglog首选
0.81%错误率 , 可以忽略不计.
127.0.0.1:6379> pfadd hype a b c d
pfcount hype
pfmerge hype2 hype hype1 #将hype、hype1 合并成 hype2
位存储
Bitmaps位图 , 是操作二进制位来进行记录 , 就只有0和1两个状态
365天 = 365bit ;1字节 = 8bit ;46个字节左右
模拟每周打卡
setbit 名称 日期(0-6) 是否打卡(0没打卡、1已打卡)
127.0.0.1:6379> setbit sign 0 1 #周一 已打卡 (integer) 0 127.0.0.1:6379> setbit sign 1 1 #周二 已打卡 (integer) 0 127.0.0.1:6379> setbit sign 2 0 #周三 未打卡 (integer) 0 127.0.0.1:6379> setbit sign 3 0 #周四 未打卡 (integer) 0 127.0.0.1:6379> setbit sign 4 1 #周五 已打卡 (integer) 0 127.0.0.1:6379> setbit sign 5 1 #周六 已打卡 (integer) 0 127.0.0.1:6379> setbit sign 6 1 #周日 已打卡 (integer) 0 127.0.0.1:6379> getbit sign 0 #查询周一是否打卡 (integer) 1 127.0.0.1:6379> getbit sign 3 #查询周四是否打卡 (integer) 0 127.0.0.1:6379> bitcount sign #查询这周一共打卡几天 (integer) 5
个人博客为:
MoYu's HomePage
MoYu's Gitee Blog