文章目录
1 Redis key
key在redis中一般是字符串类型,Redis key值是二进制安全的,这意味着可以用任何二进制序列作为key值。
-
键的长度建议小于1024;
-
建议采用:”object-type:id:field”就是个不错的注意,例”user:1000:password;
1.Redis-key的一般操作
set key newval1 [nx|xx] #nx:key存在时,不更新;xx:key存在时更新,不存在时插入
EXISTS key1 #判断key是否存在
DEL key1 #删除key
KEYS k* #搜索key值
KEYS * #查看该库中所有key值(生产环境慎用!!!)
TYPE key #查看key的类型
2.Redis-key的过期时间属性
EXPIRE key1 second #设置key的过期时间,单位s
EXPIREAT key timestamp #设置key的过期时间,以时间戳截止,单位秒时间戳
PEXPIRE key1 milliseconds #设置key的过期时间,单位毫秒
PEXPIREAT key timestamp #设置key的过期时间,以时间戳截止,单位毫秒时间戳
TTL key #以秒为单位返回key的过期时间
PTTL key #以毫秒为单位返回过期时间
2. 五大基本数据类型与方法
2.1 Sting
1. 基本命令
SET key value #新增key:value
get key #或许key对应的value
SETNX key value1 #key不存在时插入value1
STRLEN key #获取key对应的value长度
INCR key #key对应的数据增1,若key不存在则默认从0开始计算
DECR key #key对应的数据减1,若key不存在则默认从0开始计算
INCRBY key 2 #key对应的数据增加给定值,若key不存在则默认从0开始计算
DECRBY key 2 #key对应的数据减少给定值,若key不存在则默认从0开始计算
APPEND key value #指定的value追加到该key原来值(value)的末尾,若不存在key则创建
MSET k1 v1 k2 v2 #批量创建,且批量创建具有yuanzuixing
2.2 List
list类型一般用于构造栈与队列也可以构造为后端的消息队列
1.一般命令
RPUSH l1 1 #从列表l1右添加一个值
LPUSH l1 2 #从列表l左添加一个值
LRANGE l1 0 -1 #查看列表l1所有元素
LLEN l1 #查看列表l1的长度
LPOP l1 #弹出第一个数据
RPOP l1 #弹出最后一个数据
LREM l1 1 5 #删除指定值(可以指定删除数量
LSET l1 3 1 #设置指定位置值
LTRIM l1 0 3 #按照给定范围对list修剪,只保留修剪部分
RPOPLPUSH l1 l1 #将最后一个元素弹出并添加为指定key的第一个元素
LINDEX l1 0 #返回list指定索引的值
LINSERT l1 before/after 4 5 #从左插入给指定位置插入元素
2.阻塞式等待弹出
BLPOP key1 timeout #移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
BRPOP key1 timeout #移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
BRPOPLPUSH source destination timeout #从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
2.3 Hash
- hash类似于python中的dict类型,可以存储一些对象的多个属性
- 例如:user:id1 ==> name:jack age:12 sex:m
HSET k1 f1 v1 f2 v2 #设置哈希数据k1
HGET k1 f1 #获取值
HGETALL k1 #获取k1对应的所有值
HSETNX k1 f1 v2 #设置哈希值,如果f1不存在则成功,存在则报错,该命令具备原子性
HLEN k1 #计算哈希k1的长度
HEXISTS k1 f2 #判断f2是否存在于hash k1 中
HVALS k1 #返回hash k1的所有值
HKEYS k1 #返回hash k1的所有键
HINCRBY k1 f1 1 #对hash f1进行递加1
HINCRBY k1 f1 -1 #对hash f1进行递减1
HDEL k1 f1 #删除hash k1的f1
2.4 set
- set类型又被称为无序集合,集合的成员是唯一的,集合中不会出现重复的元素
- 集合的一般运用场景有:① 比如我们博客网站常常使用到的兴趣标签,把一个个有着相同爱好,关注类似内容的用户利用一个标签把他们进行归并;②共同好友功能,共同喜好,或者可以引申到二度好友之类的扩展应用等;
SADD s s1 s2 s3 s4 s5 #向集合s中增加元素
SRANDMEMBER s #随机返回集合s中的一个元素
SCARD s #查看集合s中的元素个数
SMEMBERS s #查看集合s中的所有元素
SMOVE s l s9 #将集合s中的一个元素移动至集合l
SPOP s #移除并返回集合中的一个随机元素
#集合类型重要操作
SDIFF s l #基于集合s求与l的差集
SUNION s l #求集合s与集合l的并集
SINTER s l #求集合s与l的交集
2.5 zset
- zset类型又被称为有序集合,集合的成员是唯一的,在set元素的基础上增加了一个权重值;
- 集合的一般运用场景有:① 对一定成员内的数据带权重排序,比如视频排行榜;②排序取top10等。
ZADD k1 1 m1
ZADD k1 2 m2
ZADD k1 3 m3 #向有序集合中增加新数据
ZRANGE k1 0 -1 #返回有序集合中指定范围的元素
ZRANGE k1 0 -1 withscores #返回有序集合中指定范围的元素带着权重值
ZCARD k1 #返回有序集合中元素的个数
ZINCRBY k1 1 m5 #对有序集合中的元素进行递增/递减操作
ZCOUNT k1 1 2 #计算一定权重值区间内的元素个数
ZRANGEBYSCORE k1 +inf -inf #返回指定权重范围的元素并按升序排列
ZREVRANGE k1 0 -1 #返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
3. 三种特殊数据类型与方法
3.1 geospatial
- geospatial为地理位置数据类型,可以添加经纬度数据,进行两点直线距离计算,一定范围内数据查找等;
- geo 底层原理是使用 zset来实现的,因此我们也可以使用 zset 的命令操作 geo;
- 一般用于两点距离计算,一定范围内找朋友等;
GEOADD chain:city 116.405285 39.904989 beijing
GEOADD chain:city 121.472644 31.231706 shanghai #添加经纬度数据
GEOPOS chain:city shanghai #查询成员的位置数据<经纬度>
GEODIST chain:city beijing shanghai km #计算两个位置之间的直线距离
GEORADIUS chain:city 120.0 31.0 1100 km #返回指定经纬度范围内一定距离的成员
3.2 HyperLogLog
基数:不重复的元素<该数据类型可以接受一定误差>,优点是固定占用内存12K;适用场景:统计网站的UV等
PFADD k1 a b c d e
PFADD k2 a b c e f #创建基数并添加元素
PFCOUNT k1 #计算k1中的基数
PFMERGE k3 k1 k2 #合并k1 k2
一般适用于统计一定范围内的不重复元素的数量,重复添加时会被自动去重,且占用内存非常小,固定为12K
3.3 bitmap
位:按位存储,操作二进制位进行存储,只有0、1两个数值,只用非常非常非常少的内存;适用于O/1统计计数,如登录/未登录、打卡/未打卡等两个状态的数据统计适合用这种数据类型 ;
SETBIT user:1 0 1 #设置user:1 0位置 bit为1
GETBIT user:1 0 #查看user:1 0位置 的bit值
BITCOUNT user:1 #统计key的bit为1的数量,也可以指定一定偏移区间统计