Redis学习笔记(二)API
通用结构
- keys 键数 keys * 显示出所有键数 keys [pattern] keys 命令一般不再生产环境中使用
- dbsize 计算key的总数 可在线上使用的
- exists key名 判断是否存在 0不存在 1存在
- del key名 [key名...] 0不存在 1成功
- expire key seconds 设置过期时间 key在seconds秒后过期 查询过期时间 ttl key 去掉过期时间 persist key
127.0.0.1:6379> set hello world OK 127.0.0.1:6379> expire hello 20 (integer) 1 127.0.0.1:6379> ttl hello (integer) 15 127.0.0.1:6379> get hello "world" 127.0.0.1:6379> ttl hello (integer) -2//过期 -1不存在过期时间 127.0.0.1:6379> get hello (nil) - type key 类型
数据类型
数据结构与内部编码
 单线程
 类型
字符串类型string
value不能大于512m,最好不超过100k
场景:
缓存
计数器
分布式锁
命令:
get
set
del
---
incr key 自增1,如果key不存在,为1
decr key 自减1,如果key不存在,为-1
incrby key k 自增k,key不存在为k
decr key k 自减k,key不存在则为-k
---
set key value 不管key是否存在,都设置
setnx key value key不存在,才设置
set key value xx key存在,才设置
---
mget key1 key2 批量获取
mset key1 value2 key2 value 2 批量设置
n次get=n次网络时间+n次命令时间
1次mget = 1次网络时间+n次命令时间
---
getset key newvalue 设置新的value,并返回旧的value
append key value 将value追加到旧的value
strlen key 返回字符串的长度(注意中文)
---
incrbyfloat key 3.5 增加key对应的值3.5
getrange key start end 获取字符串指定下标所有的值
setrange key index value 设置指定下标所有对应的值

实战
1.浏览量:
incr userid:pageview(单线程无竞争)转化成json序列化
2.缓存视频的基本信息(数据源在数据库伪代码)

3.分布式id计数器
哈希类型hash
相当于小的redis
 命令:
hget key field 获取hash key对应的field的value
hset key field value 设置hash key 对应field的value
hdel key field 删除hash key对应field的value
例:
hset user:1:info age 23
hget user:1:info age
hgetall user:1:info
hdel user:1:info age
---
hexists key field 判断hash key 是否有field
hlen key 获取hash key field的数量
例:
hexists user:1:info name
hlen user:1:info
---
hmget key field1 field2 批量获取field的值
hmset key field1 value1 field2 value2
例:
hmset user:2:info age 30 name xx
hget user:2:info age name
---
hgetall key o(n) 返回hash key所对应的field和value
hvals key o(n) 返回hash key所对应的field和value
hkeys key o(n) 返回hash key所对应的field
例:
hgetall user:2:info
---
hsetnx key field value 设置hash key 对应field的value(如果field已经存在,则失败)
hincrby key field intCounter hash key对应的field的val自增intCounter
hincrbyfloat key field floatCounter 自增浮点数

实战:
1.用户的访问量
hincrby user:1:info pageview count
2.缓存视频的基本信息

列表类型list
特点: 有序 可重复 左右两边插入弹出 命令: 插 rpush key value1 value2... o(n) 从列表的右端插入值 lpush key value1 value2... o(n) 左端 linsert key before|after vlaue newValue o(n) 在list指定的值前|后插入newValue 删 lpop key o(1) 从左边弹出一个 rpop key o(1) 从右边弹出一个
 ltrim key start end o(n) 按照索引范围修剪列表 ltrim key 1 5 查 lrange key start end (包含end) o(n) 获取列表指定索引范围的所有item 右->左 -1--- lindex key index o(n) 获取列表指定索引的item llen key o(1) 获取列表长度 改 lset key index newValue o(n) 设置列表指定索引值为newValue
 blpop key timeout o(1) lpop阻塞版本,timeout是阻塞超时时间,0为永不堵塞 brpop key timeout 实战: 1.微博列表 tip 1. lpush+lpop = stack 2. lpush+rpop = queue 3. lpush+ltrim = capped collection 4. lpush + brpop = message queue 集合类型set
特点: 无序/无重复/集合间的操作 sinter 两者的相同 sdiff 两者的不同 sunion 两者的全部 命令: 添加 sadd key element o(1) 向集合key中添加element(如果element已存在,添加失败) 删除 srem key element o(1) 将集合中element移除scard user:1:follow (= 4) 计算集合的大小 sismember user:1:follow it (= 1(存在)) 判断it是否在集合中 srandmember user:1:follow count (= his) 从集合中挑选count个元素 spop user:1:follow (= sports) 从集合中随机弹出一个元素 smembers user:1:follow (= music his it) 获取集合中所有元素 ---
 集合间的命令 sdiff user:1:follow user :2:follow 差集 sinter user:1:follow user :2:follow 交集 sunion user:1:follow user :2:follow 并集 sdiff|sinter|sunion + store destkey... 将差交并的结果保存到destkey中
 实战: 抽奖 有序集合类型zset

 命令: score可重复/element不能重复 添加 zadd key score element(可以是多对) o(logN) 添加score 和element 删除 zrem key element(可以是多对) o(1) 删除元素 zscore key element o(1) 返回元素的分数 zincrby key increScore element 增加或减少元素的分数 zincrby user:1:ranking 9 mike zcard key o(1) 返回元素的个数
 zrange key start end [WITHSCORES] o(log(n)+m) 返回指定索引范围内的升序元素[分值] n,总的个数 m,统计的个数 zrange user:1:ranking 1 3 withscores





 实战: 排行榜 本站文章如未注明出处均为原创,转载请注明出处,如有侵权请邮件联系站长。