set key value
get key
ttl key
# 命令:
expire
# 从键头部插入
lpush key value
# 获取列表长度
llen
# 操作
lpush users hua
lpush users zhang
lrange users 0 -1
# 显示:
# 1 zhang
# 2 hua
# 尾部插入
# 删除:
del users
# 重新插入:
rpush users zhang
rpush users hua
lrange users 0 -1
# 显示:
# 1 zhang
# 2 hua
set users hua EX 200
ttl users
# 基本命令:
# 设置值:(表 - 字段 - 值)
hset key field value
# 取值:
hget key field
hset news101 news_id 101
hset news101 news_title testtitle
hget news101 news_id
hgetall news101
# 显示
# 1) "news_id"
# 2) "101"
# 3) "news_title"
# 4) "testtitle"
# 更新写法:
# 获取所有
hgetall key
# 获取所以keys
hkeys key
# 获取所有 vals
hvals keys
hmset news102 news_id 102 news_title testtitle2
hmget news102 news_id news_title
# (初始没有 views 也会自增1)
hincrby news102 views 1
zadd key score member
# 举例:
zadd news 19 news101:
# 理解为名为news(模块)这个集合,加入一个元素叫news101,score是19
# 一个系统模块很多,都要用单独的集合名称
# 如果2条新闻,保存点击量
zadd news 12 news101
zadd news 31 news102
# 查看 从第一条到最后一条
zrange news 0 -1
# 取前三名:
zrange news 0 2
# 带分数查看
zrange news 0 -1 withscores
# 查看排名(0 就是第一位)
zrank news news101
# 倒序
zrevrange news 0 -1 with score
# 给指定元素加分
# 返回加完之后的值,没有则新增
zincrby news 1 news101
# 查询分数:
zscore news news101
# 排行榜的各种套路:
zrange news 0 -1
# 根据指定分数看排行榜:
zrangebyscore news 15 22
zrevrangebyscore news 22 15
# 以上加上score可以查看score
# A客户端
subscribe news
# (news指频道,可以随意写),此时界面会卡住
# B客户端
publish news content
#(代表向news频道发布内容)
# 保存缓存过期时间:不设置expire,那可以手动完成缓存的清理
# 不管是新闻内容还是新闻点击量,一律不做expire
# 插入缓存时,专门做一个 sorted set存放时间戳
zadd newscache xxxx 101
zadd newscache xxxx 102
zadd newscache xxxx 103
zadd newscache xxxx 104
# 过程:
# 在程序中预设一个过期值,比如200秒
# 如果之前设置的时间戳 + 200秒 <= 当前时间戳,则代表过期
# 则需要:
# 1. 删除 hash 里的 news 值(hnews101)
# 2. 删除 sorted set 里的点击量值(重点:点击量回写)
# 3. 删除 newscache 里对应的值(zrem key number)
# 重点:redis 事务和 mysql 不一样,不支持回滚,命令:multi,exec,discard 和 watch
# 这里说明:multi,exec
# multi(开启事务)
# 命令1
# 命令2
# 。。。
# exec
# 获取要清除的 key
# zrangebyscore newscache 0 当前时间戳-200秒
# 插入数据:
zadd stock 12 prod101
# 解决方法之一:
setnx
# 表示对某个key设置值,如果key不存在,则设置成功,返回1
# 如果key存在,则设置失败返回0
# 以下代码:反复去设置 key=lock 的值,好比在争抢一个锁
while(!setnx("lock", "xx")) {
// 休眠
usleep(100000)
}
// 做业务
del("lock", "xx") // 释放锁,其它请求可以进入
# 设置一个锁的时间是30秒,处理完逻辑,del
set name hua EX 30 NX
multi exec discard watch
watch age
multi
set name zhang
exec