Redis理解与使用(一)

 

目录

通用命名

数据结构和内部编码 

单线程

为什么那个快

注意

String

键值结构

应用场景

命令

实战

总结

Hash

键值结构

命令

 实战

总结

 List

键值结构

命令

 实战

总结


 

通用命名

  • 查找键,参数支持正则 (一般不在生产环境中使用) O(n)
KEYS pattern
  • 判断键是否存在,如果存在返回1,不存在返回0   O(1)
EXISTS key [key ...]
  • 查看键对应的value的类型  O(1)
TYPE key
  • 删除键及对应的值  O(1)
DEL key [key ...]
  • 设置过期时间,以秒为单位
  • 创建时没有设置过期时间则一直存在,直到使用使用DEL移除  O(1)
EXPIRE key seconds
  • 查看有效时间,以秒为单位  -1代表没有过期时间 -2代表已经过期  O(1)
TTL key
  • 去掉key的过期时间  O(1)
persist key

 

  • 计算key的总数  O(1)
dbsize

数据结构和内部编码 

单线程

为什么那个快

  1. 纯内存
  2. 非堵塞IO
  3. 避免线程切换和静态消耗

注意

  • 一次只运行一次命令
  • 拒绝长(慢)命令
    • keys, flushall, flushdb, slow lua script, mutil/exec, operate,big value(collection)
  • 其实不是单线程
    •  fysnc file descriptor
  •  close file descriptor

String

键值结构

  • string是redis最基本的类型
  • 最大能存储512MB数据
  • string类型是二进制安全的,即可以为任何数据,比如数字、图片、序列化对象等

值可以为字符串 数字 二进制 或者 json字符串

应用场景

 

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

命令

设置

  • 设置键值 O(1)
set key value
  • 设置键值及过期时间,以秒为单位 
SETEX key seconds value
  • 设置多个键值 O(n)
MSET key value [key value ...]

获取

  • 根据键获取值,如果不存在此键则返回nil
GET key
  • 根据多个键获取多个值
MGET key [key ...]

运算

  • 要求:值是数字
  • 将key对应的value加1
INCR key
  • 将key对应的value加整数
INCRBY key increment
  • 将key对应的value减1
DECR key
  • 将key对应的value减整数
DECRBY key decrement

其它

  • 追加值
APPEND key value
  • 获取值长度  (中文长度如果是utf8  一个字两个字节)
STRLEN key

 

扩展

 

 

实战

 计数器:通过incr userid:pageview(单线程无竞争) 来实现

 缓存:

伪代码,先从reids中读取数据,如果存在直接返回,不存在则查找数据库,找到并将其数列化存到redis当中做缓存,然后返给前端

 

分布式id

incr id (原子操作)   最基本的实现分布式id的原理

总结

 

Hash

键值结构

hash用于存储对象,对象的格式为键值对

key field value   key:键   field 对象的属性 value 属性值

field不能相同,value值可以相同

 

 

命令

设置

  • 设置单个属性
HSET key field value
  • 设置多个属性
HMSET key field value [field value ...]

获取

  • 获取一个属性的值
HGET key field
  • 获取多个属性的值
HMGET key field [field ...]
  • 获取所有属性和值
HGETALL key
  • 获取所有的属性
HKEYS key
  • 返回包含属性的个数
HLEN key
  • 获取所有值
HVALS key

其它

  • 判断属性是否存在
HEXISTS key field
  • 删除属性及值
HDEL key field [field ...]
  • 返回值的字符串长度
HSTRLEN key field

 

 实战

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

    hincrby user:1:info pageview count

2.缓存视频的基本信息(数据源在mysql中),伪代码

   

总结

 List

键值结构

  • 列表的元素类型为string
  • 按照插入顺序排序
  • 在列表的头部或者尾部添加元素

列表时有序的,可重复的,左右两边可进行插入弹出

 

命令

设置

  • 在头部插入数据
LPUSH key value [value ...]
  • 在尾部插入数据
RPUSH key value [value ...]
  • 在一个元素的前|后插入新元素 O(n) 在list指定的值前后插入value  pivot(指定的值)
LINSERT key BEFORE|AFTER pivot value
  • 设置指定索引的元素值
  • 索引是基于0的下标
  • 索引可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素
LSET key index value

获取

  • 移除并且返回 key 对应的 list 的第一个元素
LPOP key
  • 移除并返回存于 key 的 list 的最后一个元素
RPOP key
  • 返回存储在 key 的列表里指定范围内的元素
  • start 和 end 偏移量都是基于0的下标
  • 偏移量也可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素
  • 包头包尾
LRANGE key start stop

其它

  • 裁剪列表,改为原集合的一个子集
  • start 和 end 偏移量都是基于0的下标
  • 偏移量也可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素
  • 包头包尾
LTRIM key start stop
  • 返回存储在 key 里的list的长度
LLEN key
  • 返回列表里索引对应的元素
LINDEX key index

 

 实战

timeLine

总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值