Redis 简单知识点

redis是一个高性能的key-value数据库,其支持丰富数据类型,支持string,hash,list,set,sorted set等。

一、五种数据类型的使用

1、string 的使用

在实际项目中,最简单的是 SET key value ,其中 value 设为 json 序列化的字符串,但这样在取数据时,会导致只需要 value 中的一部分数据时,需要将整个 json 字符串全部取出来,然后再解析查找,会显得比较麻烦。我们可以使用 MSET 和 MGET 进行批量操作,例如 MSET user:1:name zhangsan user:1:age 18。
此外,文章的浏览次数也可以使用。INCR article:readcount:{文章id} 和 GET article:readcount:{文章id}

2、hash 的使用

上面用户的存储也可使用hash ,HMSET user 1:name zhangsan 1:age 18 和 HMGET user 1:name 1:age 。
商品购物车 ,以用户id为key,商品id为field,数量为value。
HSET cart:{用户id} {商品id} 初始数量。增加商品数量 HINCRBY cart:{用户id} {商品id} 1。购物车商品总数量可用 HLEN cart:{用户id}。

3、list 的使用

微博微信信息流。当一个大V发送完消息后,后台逐渐给每个关注人的列表都添加新的信息。LPUSH msg:{你自己的用户id} 消息id。当你关注的另一个大V发送消息时,也重复LPUSH msg:{你自己的用户id} 新消息id。查询消息使用 LRANGE msg:{你自己的用户id} 0 10。

4、set 的使用

  1. 抽奖
  • 参与抽奖 SADD key {userId},
  • 查看参与抽奖的所有用户 SMEMBER key。
  • 抽取 count 名中奖者 SRANDMEMBER key [count] / SPOP key [count]【注:SPOP 会将元素从 set 中删除】。
  1. 点赞、收藏、标签等
  • 点赞 SADD like:{消息ID} {用户ID}。
  • 取消点赞 SREM like:{消息ID} {用户ID}。
  • 检查用户是否点赞 SISMEMBER like:{消息ID} {用户ID}。
  • 获取点赞的用户列表 SMEMBERS like:{消息ID}。
  • 获取点赞用户数 SCARD like:{消息ID}。
  1. 微信微博的关注
  • 共同关注:SINTER user1set user2set。
  • 我关注的人也关注他:SISMEMBER userset1 {他}。
  • 我可能认识的人:SDIFF 我关注的人的集合 我关注人中某个人的关注人的集合。

5、zset 的使用

排行榜。

  • 点击新闻
    ZINCRBY hotNews:20190722 1 双宋离婚
  • 展示当日排行前十
    ZREVRANGE hotNews:20190722 0 10 WITHSCORES
  • 七日搜索榜单计算
    ZUNIONSTORE hotNews:20190716-hotNews:20190722 7 hotNews:20190716 hotNews:20190717 ... hotNews:20190722
  • 展示当日排行前十
    ZREVERANGE hotNews:20190716-hotNews:20190722 0 10 WITHSCORES

二、分布式锁

1、使用 Redis 的 setnx 命令

简单实现的话,使用 setnx 设置个变量(锁)并且有超时时间,任务完成时删掉这个变量释放掉锁。


2、使用redisson

  1. 引入pom文件
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.11.4</version>
</dependency>
  1. 代码配置
@Bean
public Redisson redisson(){
  //此为单机模式
  Config config = new Config();
  config.userSingleServer().setAddress("redis://127.0.0.1:6379").setDatabase(0);
  return (Redisson)Redisson.create(config);
}
  1. 实际使用
RLock redisLock = redisson.getLock(lockKey);
//注意下方上锁代码会开启一个新线程,来保证锁不会因为超时时间而过期。也可不设置时间,使用默认的30秒。
redisLock.lock(30, TimeUnit.SECONDS);
//...
redisLock.unlock();

扩展:分布式锁可使用zookeeper

扩展链接:
Redis 命令参考
面试题Redis最常被问到知识点总结

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容