key(键)的常用操作
keys
查看当前库中所有的key
在生产环境中不要直接使用,因为查询过程属于阻塞状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 例: set k1 10 set k2 20 set k3 30
keys 输出(阻塞) k1 k2 k3
redis-cli --scan "*" 输出(非阻塞、推荐) k1 k2 k3
支持通配符: * ? []
|
exists
用来判断某个键是否存在
1 2 3 4 5 6 7 8 9
| exists key
exists k1 返回 1
exists k1 k2 k4 返回 2
|
type
查看key对应value的类型,比如string list等
del
删除已存在的key,如果不存在会忽略
expire
给key设置几秒的过期时间,如果成功返回1,不存在返回0
1 2 3
| expire k2 20
让k2在20秒后过期自动删除
|
ttl
返回key剩余的过期时间
如果没有设置,返回-1
如果不存在,返回-2
persist
移除key的过期时间,使其永不过期
如果移除成功返回1
如果key不存在或没有设置过期时间返回0
String字符串操作
String是Redis最基本的类型,一个key对应一个value,因为string是二进制的,所以可以存放任何数据,最大支持512M数据
set
设置存储值,如果已经存储了值,就会重写旧值
get
获取key的值,如果不存在,返回nil
append
将给定的value追加到key值末尾
如果没有这个key,就新建一个key给他赋值
1 2 3 4
| append k1 20 get k1 输出 1020
|
strlen
获取key的字符串值的长度,如果不是字符串string,则返回一个错误
strlen k1
setex
可以用一条命令就设置value与过期时间
setex key time valu setex k4 10 40
setnx
在key不存在时设置key的值
setnx k1 10
返回0,失败
setnx k5 50
返回1,成功
getrange
get range从字符串提取出区间内的值
1 2 3 4 5
| set k10 wangsheng getrange k10 2 4 输出 wangsheng的2-4位 即ang
|
setrange
set range修改字符串中,区间内的值
1 2 3 4 5
| set k10 wangsheng setrange k10 1 xhy 输出 1指wangsheng第一位开始 即wxhysheng
|
incr
将key的值(数字)加一
如果不存在这个key,则先置零,然后加1,就是1
如果不为数值则返回错误
decr
将key的值(数字)减一
如果不存在这个key,则先置零,然后减1,就是-1
如果不为数值则返回错误
incrby/decrby
格式:incrby/decrby key step
将key存储的数字按照step的值进行加减
如果不为数值则返回错误
mset
一次性设置多个key/value
mset k1 10 k2 20 k3 30
mget
一次性获得多个key的value
mget k1 k2 k3
如果有key不存在则返回nil
getset
取得一个key后,将新的值赋值给key
1 2 3 4 5
| getset k1 20 返回 10 get k1 20
|
List列表——排行榜
List是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部或者尾部,其底层是一个双向链表
lpush/rpush
从左(头部)或者右边(尾部)插入一个值或多个值
1 2 3 4 5 6 7 8
| lpush key1 value1 value2 value3 rpush...
例: lpush k1 v1 v2 v3 rpush k1 v4 v5 v6 此时这个v1列表是一个双向链表: v3 v2 v1 v4 v5 v6
|
lrange
返回list中start与end之间的元素
格式:lrange key start end
start和end都是下标,list的下标从0开始,-1表示最后一个元素
以上面的做比方
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| lrange k1 0 2 返回 v3 v2 v1
lrange k1 0 -1 也就是取出所有值,返回 v3 v2 v1 v4 v5 v6
|
lpop/rpop
和python的pop差不多,将元素弹出并且返回,不赘述了
lindex
跟python里的index也差不多,通过index下标,来获取key里元素的值
1 2 3 4
| lindex key index lindex k1 0 返回 v3
|
llen
获取列表长度
lrem
从左开始删除元素
根据value删除相同的元素
1 2 3 4
| lrem key count value lrem k1 2 v1 指从左开始删除 k1中2个v1元素
|
linsert
插入,在列表中value值前边或后边插入一个新值
1 2 3 4 5 6 7
| linsert key before/after value newvalue 例: linsert k1 before v1 v5 在v1前面插入一个v5
linsert k1 after v2 v5 在v2后面插入一个v5
|
lset
对指定索引的值进行修改
lset k1 0 v0
将k1中索引为0的元素修改为v0
Set集合——兴趣标签、共同好友
set是字符串的无序集合,也就是集合,和python中的差不多,相同元素自动去重
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| sadd 添加元素到集合中 sadd k1 v1 v2 v3
smembers 取出集合的所有元素 smembers k1
sismember 判断集合中是否有x元素 如果有返回1否则返回0 sismember k1 x
scard 返回集合有多少个元素 scard k1
srem 删除集合中的元素x和y srem k1 x y
spop 随机删除一个元素并弹出 spop k1
srandmember 随机取出n个元素(不会删除) srandmember k1 2 ↑随机取出k1中的2个元素
smove 将x元素从a集合移动到b集合 smove a b x 如果a中不存在x元素,则返回0
sinter 返回两个集合的交集 sinter k1 k2
sunion 返回两个集合的并集 sunion k1 k2
sdiff 返回两个集合的差集元素 sdiff k1 k2
|
Hash
Hash是一个键值对的集合
Hash 是一个 String 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
Hash类型与python中字典(键值对)类型的数据比较相似,只不过hash类型中使用的是field和value,字典中使用的是key和value
在字典中查询一个value往往需要指定key,而在redis中查询一个filed需要同时指定key和filed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| hset 给key的filed进行复制 hset key field value
hget 获取filed的value,指定key和field hget key field
hmset 批量设置哈希的字段及值 hmset key field1 value1 field2 value2……
hexists 判断是否存在field hexists key field
hkeys 获取所有field
hvals key 获取所有的value
hincrby 增加一个key中的filed的value值 hincrby key field increment 例: hincrby k1 age 10 就是给k1中age对应的值+10,, 例: hincrby k1 money -1000 就是给k1中money对应的值减1000
hdel 删除一个或多个字段 hdel key field1 field2……
hsetnx 给hash中不存在的字段赋值,相当于追加 hsetnx key field value
如果哈希表不存在,创建新哈希表并执行hsetnx 如果字段已经存在于哈希表中,操作无效。 如果 key不存在,创建新哈希表并执行hsetnx
|
Zset
Zset与Set非常相似,是一个没有重复元素的String集合。不同之处是Zset的每个元素都关联了一个分数
Zset可以通过一个分数来对元素进行排序,是有序集合,这个分数决定了Zest中元素的索引位置
(和hash这种字典结构的不同,他只要往里加元素就行)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| zadd 将一个或多个元素和分数加入有序集key中 zadd key score1 value1 score2 value2…… 如果key不存在,自动创建
zrange 根据索引返回集合中的元素 zrange k1 0 -1 返回所有元素 zrange k1 0 -1 withscores 返回集合中所有元素,并携带元素分数
zrangebyscore 根据元素分数,返回所有集合中的元素,并且按照从小到大排序 zrangebyscore k1 200 400 返回k1中,200-400分之间的元素递增排序
zincrby 为元素的分数累加一个值 zincrby k1 50 java 给集合k1的java元素加上50分
zrem 删除集合下的元素 zrem k1 wangsheng 删除集合k1下的wangsheng元素
zcount 统计分数区间中元素的个数 zcount k1 100 300 统计100分到300分中间元素的个数
zrank 返回vlaue在集合中的排名 zrank key value
|
Bitmaps
是一种二进制的存储方式,只有0和1
Redis提供了Bitmaps这个 “数据结构” 可以实现对位的操作
合理地使用位能够有效地提高内存使用率和开发效率。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| setbit 设置bitmaps setbit key offset value
可以增加很多个字节组 例: 王盛5月份的出勤情况,1号到5号全都正常出勤 setbit wangsheng:5 1 1 setbit wangsheng:5 2 1 setbit wangsheng:5 3 1 setbit wangsheng:5 4 1 setbit wangsheng:5 5 1
getbit 获取bitmaps 例: 获取王盛5月1日的考勤情况 getbit wangsheng:5 1 返回 1
bitcount 统计bitmap中1出现的次数 例: 统计王盛5月、7月的出勤情况 bitcount wangsheng:5 7
bitop and/or 将多个两个bitmaps通过交集 或 并集的方式合并为新的bitmaps bitop and k3 k1 k2 通过求交集将k1 k2合并成k3 bitop or k3 k1 k2 通过求并集将k1 k2合并成k3
使用场景 活跃天数、签到、活跃用户、布隆过滤器
|


Geospatia类型-地理信息
GEO,Geographic,地理信息的缩写。该类型就是元素的二维坐标,在地图上就是经纬度。Redis基于该类型,提供了经纬度设置、查询、范围查询、距离查询、经纬度Hash等常见操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| geoadd 将北京的经纬度和名称添加到china geoadd china 116.405285 39.904989 beijing 将成都和上海的经纬度、名称添加到china geoadd china 104.065735 30.659462 chengdu 121.472644 31.231706 shanghai
geopos 从key中返回指定名称如beijing的位置 geopos china beijing
geodist 返回两个位置之间的距离,可选单位[m|km|ft|mi] geodist china beijing chengdu m 查看北京和成都的距离,以米为单位
georadius 以给定的经纬度为中心,给一个距离,给出范围内包含的位置元素 georadius china 110 30 1200 km
|
Hyperloglog——流量统计、播放数等
做站点流量统计的时候一般会统计页面UV(独立访客:unique visitor)和PV(即页面浏览量:page view)。redis HyperLogLog是用来做基数统计的算法,HyperLogLog的优点是:在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定并且很小的
基数
基数集是将数据集去除重复元素后的产物
Hyperlog可以在超大基数集时快速进行运算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| pfadd 将所有元素参数添加到 Hyperloglog 数据结构中 pfadd book1 uid1 uid2 uid3 给book1添加uid1 uid2 uid3(有uid1 2 3 3个人看了这本书)
pfcount 统计基数的总数(去重后) pfcount book1 统计book1有几个人看了,返回 3 pfcount book1 book2 统计book1和2有几个人看了
pfmerge 将多个Hyperloglog进行合并 pfmerge book book1 book2 将book1看的人和book2看得人合并到book,并且计算 (来计算两个书的活跃人数)
主要用于网站PV统计、UV统计 统计访问量 统计在线数 真实阅读数等
|