崇之他和她

导航

day03302redis悲观锁乐观锁

reids

nosql ont only sql

当数据量庞大,请求变得越来越多,仅仅mysql 是无法解决所有的压力,

redis 五种基本类型 string list Hash set zset

nosql 没有固定查询语言

  • redis KVj键值对型 缓存

  • MongoDB 文档型 基于分布式文件存储

  • Hbase 大数据 列存储型

  • Noe4j 图片关系 (社交网络,广告推荐)

redis 内存存储,持久化 rdb aof

每秒读8万次 写11万次

Linux下安装redis

  • 官网下载gz文件

  • 上传到linux服务器

  • ls 查看上传的安装包

  • mv gz文件名 opt 移动安装包到opt目录

  • cd opt 进入opt 文件 ls 查看

  • tar -zxvf 文件名gz 解压安装包

  • cd redis-6.0.10 进入安装文件

  • yum install gcc-c++ 安装gcc环境 只需要支持编译c++,那么我就只装一个c++的gcc前端

  • make 命令配置所有所需要的文件

  • 如果make报错

    • 是因为gcc版本过低(GCC是C++的运行环境,是因为redis就是c语言写的)

      更新gcc版本:

      //升级gcc

      yum -y install centos-release-scl

      yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils //临时将此时的gcc版本改为9

      scl enable devtoolset-9 bash //永久改变

      .最后重新make

  • make install 检查 输出install make[1] src ....安装成功

  • redis 默认安装路径 usr local bin

  • 创建新文件夹mkdir new 赋值redis.conf 到new cp /opt/redis-6.0.10/redis.conf new

  • vim redis.conf 修改启动文件 daemonize 配置 改为yes 后台方式启动 光标移动到修改位置 i 命令进入INSTER模式 修改文本

  • esc 退出模式 :x 保存退出

pwd 查看当前目录路径

  • redis-server redis.conf

  • redis-cli 连接redis

  • select num 切换num库

redis 基本命令

STRING类型操作

  • flushall 清空所有库数据 flushdb 清空当前库

  • set key get key append key 追加 keys * 查看所有key

  • exists key 判断key是否存在 move key 移出 键值对

  • expire key second 设置second 秒过期 ttl key 查看过期时间

  • type key 查看key类型

  • incr key 自增1 decr key 自减1 incrby num 设置增量

LIST类型操作 有序可重复集合

list 可当作队列 堆栈

lpush list one 向list 中添加元素one lpop list 从list中取出 后进先出 lpush + rpop 可实现后进后出 取出的元素消失

lrange list 0 -1 查询0 到结束 list 中的所有元素

SET类型操作 无序不重复集合

sadd myset 00 增加元素在set中 smembers myset 查看所有值

srandmember myset 拿到set中的随机一个元素 spop 随机取出元素 取出后元素消失

Hash 类型操作

hset myhash key value , hget my hash key 存取 对象为 k v 键值对

hgetall myhash 拿到所有 键值对

ZSET类型操作 有序不重复

zadd myzset score one 向myzset中添加 序号为score 的元素 one

实现排序 zrangebyscore myzset -inf +inf 小到大排序

查询所有元素 zrange myzset 0 -1

悲观硕 和乐观锁

  • 悲观锁 只要调用都要经过锁

  • 乐观锁 调用不会上锁 只在更新时判断version标签是否被修改过 未修改将新的version与数据一起更新到库 修改过重新获取 更新

  • redis 中用watch key 监视 键值对的更新

    • eg: 同时开两个cli 连接操作同一个对象 cli 1 执行 set money 100 ,set out 0 watch money 监视 money 变化 decrby money 10 , incrby out 10

      在 cli2 修改money set money 1000

      回到cli1 执行exec 提交数据失败 unwatch 解除锁监视 watch money 重新上锁监视 再操作

posted on 2021-02-25 19:49  崇之他和她  阅读(64)  评论(0编辑  收藏  举报