redis基础篇

目录

基本操作

Redis基本数据类型

String字符串

操作命令

应用场景

Hash哈希

操作命令

应用场景

List 列表

操作命令

应用场景

set集合

操作命令

应用场景

Zset 有序集合

操作命令

应用场景


基本操作

默认有 16 个库(0-15),可以在配置文件中修改,默认使用第一个 db0。

切换数据库:select 0

清空当前数据库:flushdb

清空所有数据库:flushall

存值:set qingshan 2673

取值:get qingshan

查看所有键:keys *

获取键总数:dbsize

查看键是否存在:exists qingshan

删除键:del qingshan jack

重命名键:rename qingshan pengyuyan

查看类型:type qingshan

Redis基本数据类型

redis的数据类型有String、Hash、Set、List、Zset、Hyperloglog、Geo、Streams。

String字符串

可以用来存储字符串、整数、浮点数。

操作命令

设置多个值(批量操作,原子性):mset qingshan 2673 jack 666

设置值,如果 key 存在,则不成功:setnx qingshan  此操作可以实现分布式锁,客户端A在setnx key时成功则获取到锁,处理完业务逻辑后使用del key释放锁。不成功说明该key已存在,锁被其他客户端持有。

如果释放锁失败导致其他客户端获取不到锁,那么可以加过期时间:SET key value [EX seconds] [PX milliseconds] [NX|XX]      set lock1 1 EX 10 NX

  • EX second:设置键的过期时间为second秒
  • PX millisecond:设置键的过期时间为millisecond毫秒
  • NX:只在键不存在时,才对键进行设置操作
  • XX:只在键已经存在时,才对键进行设置操作
  • SET操作成功完成时,返回OK,否则返回nil

获取多个值:mget qingshan jack

获取值长度:strlen qingshan

字符串追加内容:append qingshan good

获取指定范围的字符:getrange qingshan 0 8

(整数)值递增:incr qingshan      incrby qingshan 100

(整数)值递减:decr qingshan       decrby qingshan 100

应用场景

缓存热点数据、分布式锁setnx、全局ID INCRBY、计数器INCR

Hash哈希

包含键值对的无序散列表。value 只能是字符串,不能嵌套其他类型。

Hash 与 String 的主要区别

  • 把所有相关的值聚集到一个 key 中,节省内存空间
  • 只使用一个 key,减少 key 冲突
  • 当需要批量获取值的时候,只需要使用一个命令,减少内存/IO/CPU 的消耗

操作命令

hset h1 f 6
hset h1 e 5
hmset h1 a 1 b 2 c 3 d 4

hget h1 a
hmget h1 a b c d
hkeys h1
hvals h1
hgetall h1

hget exists h1
hdel h1
hlen h1

应用场景

string可以做的,hash都可以做;购物车:key:用户 id;field:商品 id;value:商品数量。

List 列表

存储有序的字符串(从左到右),元素可以重复。可以充当队列和栈的角色。

操作命令

元素增减:

lpush queue a
lpush queue b c

rpush queue d e
lpop queue
rpop queue

blpop queue
brpop queue

取值

lindex queue 0
lrange queue 0 -1

应用场景

用户 消息时间线  timeline:因为 List 是有序的,可以用来做用户时间线

消息 队列:

List 提供了两个阻塞的弹出操作:BLPOP/BRPOP,可以设置超时时间。
BLPOP:BLPOP key1 timeout 移出并获取列表的第一个元素, 如果列表没有元素
会阻塞列表直到等待超时或发现可弹出元素为止。
BRPOP:BRPOP key1 timeout 移出并获取列表的最后一个元素, 如果列表没有元
素会阻塞列表直到等待超时或发现可弹出元素为止。
队列:先进先出:rpush blpop,左头右尾,右边进入队列,左边出队列。
栈:先进后出:rpush brpop

set集合

String 类型的无序集合,最大存储数量 2^32-1(40 亿左右)。

操作命令

添加一个或者多个元素:sadd myset a b c d e f g

获取所有元素:smembers myset

统计元素个数:scard myset

随机获取一个元素:srandmember key

随机弹出一个元素:spop myset

移除一个或者多个元素:srem myset d e f

查看元素是否存在:sismember myset a

应用场景

抽奖:随机获取元素  spop myset

点赞 、签到、打卡:

  • 这条微博的 ID 是 t1001,用户 ID 是 u3001。
  • 用 like:t1001 来维护 t1001 这条微博的所有点赞用户。
  • 点赞了这条微博:sadd like:t1001 u3001
  • 取消点赞:srem like:t1001 u3001
  • 是否点赞:sismember like:t1001 u3001
  • 点赞的所有用户:smembers like:t1001
  • 点赞数:scard like:t1001
  • 比关系型数据库简单许多。

商品 标签:用 tags:i5001 来维护商品所有的标签。

  • sadd tags:i5001 画面清晰细腻
  • sadd tags:i5001 真彩清晰显示屏
  • sadd tags:i5001 流畅至极

Zset 有序集合

操作命令

添加元素:zadd myzset 10 java 20 php 30 ruby 40 cpp 50 python

获取全部元素:zrange myzset 0 -1 withscores    zrevrange myzset 0 -1 withscores

根据分值区间获取元素:zrangebyscore myzset 20 30

移除元素:zrem myzset php cpp

统计元素个数:zcard myzset

分值递增:zincrby myzset 5 python

根据分值统计个数:zcount myzset 20 60

获取元素 rank:zrank myzset java

获取元素 score:zsocre myzset java

应用场景

排行榜:

id 为 6001 的新闻点击数加 1:zincrby hotNews:20190926 1 n6001
获取今天点击最多的 15 条:zrevrange hotNews:20190926 0 15 withscores

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值