×

redis 数据库编程

Redis Api的使用和理解之字符串

feihu1996 feihu1996 发表于2020-05-17 15:38:54 浏览24 评论0

抢沙发发表评论

二、字符串类型

1、字符串键值结构

1.1 对于Redis来说,所有的key都是字符串

1.2 字符串键值类型的value实际可以是多种类型

纯字符串

数字字符串

  • 内部会做一个转换,将字符串转换为一个整型甚至是浮点型
  • 实现计数操作

二进制字符串: 实现位图功能

1.3 字符串键值类型的value不能大于512MB

2、使用场景

  • 缓存
  • 计数器
  • 分布式锁
  • ......

3、命令

3.1 get

get key

获取key对应的value

时间复杂度为O(1)

3.2 mget

mget key1 key2 ...

批量获取key对应的value

原子操作

时间复杂度为O(n)

n次get vs 1次mget

  • n次get
    • n次网络时间
    • n次命令时间
  • 1次mget
    • 1次网络时间
    • n次命令时间

如果要使用mget依次获取100万个键值,建议分成1000次执行,每次获取1000个键值

3.3 set

set key value

不管key是否存在,都设置

时间复杂度为O(1)

setnx key value

key不存在,才设置

时间复杂度为O(1)

设置成功,返回OK

key存在,返回0

set key value xx

key存在,才设置

时间复杂度为O(1)

设置成功,返回OK

key不存在,返回nil

setex

set命令和expire命令的组合

3.4 mset

mset key1 value1 key2 value2 .....

批量设置key-value

时间复杂度为O(n)

3.5 incr

incr key

key自增1,如果key不存在,自增后get(key)=1

时间复杂度为O(1)

3.6 decr

decr key

key自减1,如果key不存在,自减后get(key)=-1

时间复杂度为O(1)

3.7 incrby

incrby key k

key自增k,如果key不存在,自增后get(key)=k

时间复杂度为O(1)

3.8 decrby

decrby key k

key自减k,如果key不存在,自减后get(key)=-k

时间复杂度为O(1)

3.9 getset

getset key newvalue

set key newvalue并返回旧value

时间复杂度为O(1)

3.10 append

append key value

将value追加到旧的value

时间复杂度为O(1)

3.11 strlen

strlen key

返回字符串的长度

一个中文字符长度是2

时间复杂度为O(1)

  • 在redis内部,会对字符串的长度进行一个实时更新
  • 不需要遍历完整的字符串

3.12 incrbyfloat

incrbyfloat key 3.5

增加key对应的值3.5

通过传递负值可以实现自减

时间复杂度为O(1)

3.14 getrange

getrange key start end

获取字符串指定下标所有的值

时间复杂度为O(1)

3.15 setrange

setrange key index value

设置指定下标所对应的值

时间复杂度为O(1)

4、实战

4.1 记录网站每个用户个人主页的访问量

incr userid:pageview

单线程,无竞争

Redis天然适合做计数器

4.2 缓存视频的基本信息(数据源在MySQL中)

set videoId json.stringify(data)

client通过videoId向app server发起请求

app server通过videoId向redis发起请求

如果redis中存在对应的视频基本信息,则直接返回给app server,app server返回给client

如果redis中不存在对应的视频基本信息,app server则通过videoId向db server发起请求,db server将数据返回给app server,app server返回给client,同时将数据放进redis

4.3 分布式id生成器

假设有3个app service,呈分布式部署

每个app service都想从redis中获取一个自增id

  • 并发请求
  • 不会重复

可以使用redis做到原子级单线程

  • incr id
  • 原子操作

群贤毕至

访客