redis常用命令笔记

1、解压redis安装包

命令:tar -zxvf redis-6.2.7.tar.gz

2、编译

命令:make

3、指定安装路径

命令:make PREFIX=/usr/local/redis install

4、复制配置文件到安装路径

命令:cp redis.conf /usr/local/redis/

5、修改redis配置文件

命令:vim redis.conf

redis管理控制台 redis控制台命令_redis

6、文件中显示行号

命令::set nu

7、修改 daemonize no 让redis在后台运行,不占据当前终端

命令:daemonize yes

redis管理控制台 redis控制台命令_redis_02

8、启动redis服务

命令:./redis-server …/redis.conf

redis管理控制台 redis控制台命令_redis管理控制台_03

9、查看redis端口 检查是否启动成功

命令:netstat -tunpl | grep 6379

redis管理控制台 redis控制台命令_php_04

10、连接本地的redis服务

命令:./redis-cli

redis管理控制台 redis控制台命令_缓存_05

11、关闭redis服务

命令:pkill redis-server

redis管理控制台 redis控制台命令_数据库_06

12、安全认证

修改配置文件:vim redis.conf

去掉文件前面注释:requirepass 123456

redis管理控制台 redis控制台命令_redis_07


输入登录密码:auth 123456

redis管理控制台 redis控制台命令_php_08

13、redis的PHP扩展安装

下载地址:http://pecl.php.net/package/redis
版本选择:__phpinfo();__查看PHP版本信息

  1. PHP Version 7.4.28
  2. Architecture x64
  3. PHP Extension Build API20190902,TS,VC15

14、Windows下安装扩展

  1. php_redis.dll 复制到 C:\wamp\bin\php7\ext(这里是我自己的PHP安装路径)
  2. extension=php_redis.dll 修改PHP配置文件,引入扩展
  3. 重启一下nginx 使用phpinfo();再次查看

15、Linux下安装扩展

下载地址:http://www.redis.cn/

选择客户端;选择PHP

安装解压缩工具:yum -y install unzip zip

解压缩扩展文件:unzip phpredis-develop.zip

进入解压后的文件夹:cd phpredis-develop

redis管理控制台 redis控制台命令_缓存_09


在当前目录生成一个配置文件:/usr/bin/phpize

redis管理控制台 redis控制台命令_redis管理控制台_10


指定PHP的路径:./configure --with-php-cnotallow=/usr/bin/php-config

redis管理控制台 redis控制台命令_php_11


生成一个扩展文件:make && make install

redis管理控制台 redis控制台命令_数据库_12


编译后测试:make test

redis管理控制台 redis控制台命令_缓存_13


修改PHP配置文件:vim /etc/opt/remi/php74/php.ini

增加该配置:extensinotallow=/usr/lib64/php/modules/redis.so

杀掉进程:pkill php-fpm

重启PHP服务:/opt/remi/php74/root/usr/sbin/php-fpm

16、快照持久化配置

快照持久化的文件名字为 dump.rdb
修改配置文件:vim /usr/local/redis/redis.conf

  1. save 3600 1
  2. save 300 100
  3. save 60 10000
    解释:3600秒内超过1个key被修改 就发起快照保存

    启动aof持久化方式,将用户执行的增删改‘命令’备份到文件中,还原时重新执行一遍命令
  4. appendonly yes
  5. appendfilename “appendonly.aof”
  6. 两秒钟写入磁盘一次 appendfsync everysec

    以上两种方式都开启,会以aof为准
    aof持久化优化 文件重写优化文件大小合并重复或多余的命令
  7. 文件大小比上次重写增长了100%时重写 auto-aof-rewrite-percentage 100
  8. 文件超过64M时重写 auto-aof-rewrite-min-size 64mb

    手动执行重写操作命令:bgrewriteaof
    修改允许外网访问redis客户端
  9. protected-mode no
  10. 这一行屏蔽掉 bind 127.0.0.1 -::1

17、redis基本使用命令

  1. 查看所有键:keys *
  2. 判断键是否存在:exists name 1代表存在0代表不存在
  3. 删除指定键:del name 1代表删除成功
  4. 设置键的过期时间10秒:expire name 10
  5. 返回一个键剩余多久失效:ttl name -1表示永久有效
  6. 返回键的类型:type name
  7. 切换到1号数据库:select 1 默认有0-15号数据库
  8. 返回当前数据库中键的个数:dbsize
  9. 手动保存快照 做持久化:bgsave
  10. 清空键:flushdb

18、字符串类型(string)

  1. 设置键值对:set name xiaolan
  2. 通过键获取值:get name
  3. 设置键值 失效时间10秒 仅键不存在时能设置成功:set bigname xiaohong ex 10 nx
  4. 同时设置多个键值:mset name xiaolan sex nan 该设置具备原子性
  5. 给键设置为字符串类型 指定生存时间10秒:setex sex 10 nv
  6. 键不存在可设置:setnx sex nv 成功返回1失败返回0
  7. 批量获取键值:mget name sex
  8. 获取长度:strlen sex
  9. 返回旧值 设置新值:getset sex nan
  10. 加一操作:incr sex
  11. 指定增加的数量:incrby sex 3
  12. 减一操作:decr sex
  13. 指定减少的数量:decrby sex 3

19、哈希类型(hash)

里面可以存多个键值

  1. 往h1中加入单个键值:hset h1 name xiaohong
  2. 查看h1中name的值:hget h1 name
  3. 设置多个键值:hmset userid name xiaolan age 12
  4. 获取多个值:hmget userid name age
  5. 获取哈希的全部键值:hgetall userid

20、链表类型(list)

左面头部 右面尾部 可以当做栈或队列使用

  1. 链表头添加元素:lpush userlist xiaolan
  2. 索引方式返回链表全部数据:lrange userlist 0 -1
  3. 链表插入元素:linsert userlist before xiaolan xiaohei
  4. 修改链表某个下标的指定元素:lset userlist 2 xiaofen
  5. 返回链表指定下标的元素:lindex userlist 2
  6. 从链表尾部添加元素:rpush userlist xiaolan
  7. 返回链表长度:llen userlist
  8. 从链表头部弹出元素并删除:lpop userlist
  9. 删除一个对应元素:lrem userlist -1 xiaohei 正数表示从前往后找 负数从后往前找 零表示全删
  10. 保留指定范围的元素:ltrim userlist 1 2
  11. 从链表尾部弹出元素并删除:rpop userlist

(brpop是rpop的阻塞模式) 语法结构:BRPOP key [key …] timeout 弹出列表尾部第一个元素并返回存储它的key,要设置一个超时时间。

21、集合类型(set)

数据是无序且唯一的

  1. 往集合中添加元素:sadd userset xiaolan xiaohong 可添加多个
  2. 获取集合中的元素:smembers userset
  3. 集合差集:sdiff userset usersetname 集合1中存在 集合2中不存在
  4. 集合交集:sinter userset usersetname
  5. 集合并集:sunion userset usersetname
  6. 获取集合中元素的个数:scard userset

22、有序集合(zset)

数据是唯一的

  1. 往集合中添加元素并指定序号:zadd userzset 2 xiaohong 1 xiaolan 3 xiaohei
  2. 添加元素 元素存在则更新顺序:zadd userzset 2 xiaohei
  3. 索引返回集合全部元素 并列出序号:zrange userzset 0 -1 withscores 升序
  4. 索引返回集合全部元素:zrevrange userzset 0 -1 降序
  5. 根据下标范围删除元素:zremrangebyrank userzset 0 2
  6. 返回集合中元素的个数:zcard userzset
  7. 返回指定元素的序号:zscore userzset xiaofen

23、redis主从复制配置

主服务器配置:

  1. 修改外网访问redis客户端
  2. protected-mode yes 改为 protected-mode no
  3. bind 127.0.0.1 -::1 这一行屏蔽掉

从服务器配置:

  1. slaveof 192.168.65.101 6379 配置主服务器IP和端口
  2. masterauth 123456 配置主服务器密码
  3. slave-read-only yes 从服务器的只读模式 默认就开启了
  4. info replication 从服务器检查配置是否正确

24、redis事务操作

  1. 给小白100块:set xiaobai 100
  2. 给小黑500块:set xiaohei 500
  3. 开启事务:multi
  4. 小白减去50块:decrby xiaobai 50 此操作已加入队列 还没有执行
  5. 小黑加上50块:incrby xiaohei 50
  6. 取消事务:discard 不会去执行队列中的事务了
  7. 提交事务:exec 注意:提交事务时 如有语法错误 会自动取消事务,用法错误将不会自动取消事务 提交会成功一半

25、锁操作使用场景

客户机A

  1. 假设抢票只剩一张:set ticket 1
  2. 售价100元:set money 100
  3. 开启事务:multi
  4. 票减一:decr ticket
  5. 钱减100:decrby money 100

客户机B
客户端B把最后一张票买去了:decr ticket

客户机A
就会出现票数不够的 负数情况:exec

解决方法:
watch 命令可以监控一个或多个键 一旦其中一个键被修改或删除 之后的事务就不会执行 监控一直到 exec 命令

  1. 监控剩余票数:watch ticket
  2. 开启事务:multi
  3. decr ticket
  4. 提交时如果监控值发生改变 则会自动取消事务:exec