文章目录

  • 一、Redis初入门及介绍
  • 1.1 基本介绍
  • 1.1.1 介绍
  • 1.1.2 特性
  • 1.1.3 使用场景
  • 1.1.4 版本信息
  • 1.2 简单安装
  • 1.2.1 下载源码
  • 1.2.2 解压
  • 1.2.3 编译
  • 1.2.4 检查
  • 1.2.5 配置
  • 1.2.6 启动
  • 1.3 启动、停止、连接
  • 1.3.1 启动
  • 1.3.2 停止
  • 1.3.3 连接
  • 1.4 REDIS的通信模型
  • 1.4.1 通信模式
  • 1.4.2 为什么快?
  • 1.4.3 弊端
  • 1.5 REDIS数据结构和相关命令
  • 1.5.1 字符串String
  • 1.5.2 哈希(Hash)
  • 1.5.3 列表
  • 1.5.4 集合
  • 1.5.5 有序集合(ZSET)
  • 1.5.6 Redis全局命令
  • 1.5.7 redis数据库管理


一、Redis初入门及介绍

1.1 基本介绍

1.1.1 介绍

  • redis是一种基于键值对(key-value)数据库,其中value可以为string、hash、list、set、zset等5种数据结构,可以满足很多应用场景。还
    提供了键过期,发布订阅,事务,流水线等附加功能

1.1.2 特性

  • 协议简单,单线程,速度快
  • 数据结构丰富
  • 持久化
  • 分布式,高可用
  • 支持多语言客户端

1.1.3 使用场景

  • 缓存数据库
  • 排行榜
  • 计数器应用
  • 社交网络
  • 时间轴、队列应用场景设计
  • 购物车开发与设计实战
  • Redis与Lua模拟抢红包实战
  • 网站投票设计与开发实战

1.1.4 版本信息

  • redis-server --version查看版本
  • 版本号第二位为奇数,为非稳定版本(2.7、2.9、3.1)偶数为稳定版本(2.6、2.8、3.0),当前奇数版本是下一个稳定版本的开发版本,
    如2.9是3.0的开发版本

1.2 简单安装

1.2.1 下载源码

  • wget http://download.redis.io/releases/redis-4.0.13.tar.gz

1.2.2 解压

  • tar xzf redis-4.0.13.tar.gz

1.2.3 编译

cd redis-4.0.13  
    make
    可能需要安装make和gcc
    sudo apt install make
    sudo apt install gcc
    make报错,则执行:sudo make MALLOC=libc即可

1.2.4 检查

  • 进入src下面多了4个可执行文件,放在一起统一管理
执行:
         sudo mkdir bin
         sudo mv ./src/redis-server ./bin/      --- 启动redis
         sudo mv ./src/redis-cli ./bin/         --- redis命令行客户端
         sudo mv ./src/redis-sentinel ./bin/    --- 启动哨兵
         sudo mv ./src/redis-benchmark  ./bin/  --- 基准测试工具
         sudo mv ./redis-check-aof ../bin/      --- AOF持久化文件检测和修复工具
         sudo mv ./redis-check-rdb ../bin/      --- RDB持久化文件检测和修复工具
         sudo mv ./redis-trib.rb ../bin         --- cluster集群构建工具

1.2.5 配置

5.修改redis.conf配置
    #以守护进程方式运行  
    daemonize yes  
    #dump.rdb路径  
    dir /usr/local/redis  
    #修改appendonly为yes,每次更新操作后进行日志记录   
    appendonly yes  
    //查看配置文件注释,为了安全默认redis绑定的是127.0.0.1,因此默认只能在本机连接redis
    //可以配置protected-mode no
    bind 192.168.12.114
    requirepass 123456

1.2.6 启动

cd /opt/redis/redis-4.0.13 
  ./bin/redis-server ./redis.conf

1.3 启动、停止、连接

1.3.1 启动

redis-server.exe   redis.windows.conf   --maxheap 200m  //windows下
    sudo ./bin/redis-server ./redis.conf

1.3.2 停止

./bin/redis-cli -p 6379 -a 123456 shutdown

1.3.3 连接

./bin/redis-cli -p 6379  -a 123456

1.4 REDIS的通信模型

1.4.1 通信模式

服务端单线程,客户端发送执行–>进入服务端指令队列–>指令执行–>响应

1.4.2 为什么快?

  • 单线程避免线程切换开销
  • 纯内存访问速度快
  • RESP协议简单
  • C语言性能比较高

1.4.3 弊端

  • 单个指令执行时间长会阻塞其他的待执行指令

1.5 REDIS数据结构和相关命令

1.5.1 字符串String

value不超过512MB大小

  • 设置:set name test ex 10 //10秒后过期 px 10000 毫秒过期
  • setnx name test //不存在键name时,返回1设 置成功;存在的话失败0
  • 获取:get name //存在则返回value, 不存在返回nil
  • 批量设置:mset country china city beijing
  • 批量获取:mget country city address //key不存在获取之后为nil
  • 自增:incr age //必须为整数自加1,非整数返回错误,无age键从0自增返回1
  • 自减:decr age //整数age减1
  • 增加:incrby age 2 //整数age+2
  • 减少:decrby age 2//整数age -2
  • 浮点型:incrbyfloat score 1.1 //浮点型score+1.1
  • 追加:set name hello; append name world //追加后成helloworld
  • 字符串长度:set hello “世界”;strlen hello//结果6,每个中文占3个字节
  • 字符串截取:set name helloworld ; getrange name 2 5//返回 llow

1.5.2 哈希(Hash)

  • 哈希hash是一个string类型的field和value的映射表,hash特适合用于存储对象
  • 设值:hset key field value
  • 取值:hget key field
  • 删值:hdel key field
  • 计算field: hlen key //返回key对应的hash里面的属性个数
  • 批量设值:hmset key field value field1 value1 field2 value2
  • 批量取值:hmget key field field1 field2
  • 判断是否存在:hexists key field
  • 获取所有field:hkeys key //返回key对应的hash的所有属性
  • 获取所有value:hvals key //返回key对应的hash的所有值
  • 获取所有field与value:hgetall key //返回key对应的hash的所有k-v对
  • 增加1: hincrby key field 1 //字段加一
  • 增加1: hincrbyfloat key field 2 //浮点字段加2

1.5.3 列表

用来存储多个有序的字符串,列表最多可存2的32次方减1个元素,因为有序,可以通过索引下标获取元素或某个范围内元素列表,列表元素可以重复,
列表的索引从1开始,如果队列有3个元素,下标是0,1,2, -1表示队列尾部,-2表示倒数第二,以此类推

  • 左边添加: lpush key c b a //从左向右插入cba,返回3 ,注意这里从左边插入到列表,c会最先加入,a最后加入,因此队列头部是a ,c处于下标为2的位置
  • 右边添加: rpush list1 c b a //从左向右插入cba,返回3 ,这里从右边依次插入c,b,a,因此a在队列尾部的位置,c在倒数第二的位置
  • 获取: lrange list1 0 -1 //从左到右获取列表所有元素 返回 c(0) b(1) a(2) ,
  • 中间添加:LINSERT key BEFORE|AFTER pivot value; linsert list2 before b teacher //在b之前插入teacher, after为之后,
  • 查找指定范围元素:lrange key start end //索引下标特点:从左到右为0到N-1
  • 查找指定位置元素:lindex key index //获取指定位置的元素,类似于获取数组元素
  • 删除左边元素: lpop list2 //把最左边的第一个元素删除,返回该元素
  • 删除右边元素: rpop list2 //把最右边的第一个元素删除,返回该元素
  • 获取长度:llen list2 //返回当前列表长度

1.5.4 集合

保存多元素,不允许有重复元素且无序,一个集合最多可存2的32次方减1个元素,支持增删改查,集合的交集、并集、差集;

  • 集合保存元素:sadd testset kobe james duncan 向集合保存3个不同的元素,返回3,如果再次保存元素有一样的,则同样的不难保存进去
  • 集合元素获取:smember testset //获取user的所有元素,返回结果无序
  • 集合元素删除:srem testset kobe duncan //删除2个则返回2
  • 计算元素个数:scard testset //返回2,计算元素个数
  • 获取集合交集:sinter set1 set2 //获取2个集合的交集

1.5.5 有序集合(ZSET)

和集合特性一致,不能有重复元素,支持排序

  • zadd key [NX|XX] [CH] [INCR] score member [score member …]
  • 有序集合保存元素:zadd zset1 100 james 99 kobe 98 duncan //保存元素时候指定元素的分值,用于排序
  • 增加/减少分值:zadd zset1 incr 1/-1 james //james分值增加1分/减少1分
  • 增加/减少分值: zincrby key 1/-1 james //james增加1分/减少一分,返回修改后的分数
  • 查看:zrange zset1 key start stop //查看指定排名的元素
  • 反向查看:zrevrange zset1 key start stop //查看指定排名的元素,但是是从后面开始数,倒数第一名看做第一名
  • 查看:zrange zset1 key start stop WITHSCORES //查看指定排名的元素和对应的分数
  • 计算元素个数:zcard zset1
  • 获取排名:ZRANK zset1 kobe //获取指定元素的排名,第一名返回0,最后一名返回N-1
  • 获取倒数排名:zrevrank zset1 ducnan //获取指定元素的倒序排名,最后一名返回0,第一名返回N-1 (比如获赞最多的应该是第一名)
  • 删除元素:zrem zset1 james //删除指定元素
  • 查看元素排名:zrank zset1 kobe
  • 查看元素分数:zscore zset1 kobe

1.5.6 Redis全局命令

  • 添加键值对:set key value
  • 删除键:del key
  • 删除当前数据库中的所有Key:flushdb
  • 删除所有数据库中的key(比如16个数据库全部清除):flushall
  • 键修改:set key newValue
  • 键查询:get key
  • 键查看:keys *
  • 键查看(指定前缀) : keys xx* (*是通配符)
  • 键的值类型查看:type key
  • 判断键是否存在:exist key
  • 设置过期时间:expire key seconds
  • 查看过期时间:ttl key
  • 键总数:dbsize

1.5.7 redis数据库管理

  • 选择数据库:select 0
  • 清空当前数据库:flushdb
  • 清空全部数据库:flushall
  • 计算数据库中键值对的个数:dbsize
  • 帮助文档:help set //查看set命令的帮助文档
  • 帮助文档:help @set //查看set相关的操作命令帮助信息及支持版本,其他的比如help @String,help @hash
  • 查看配置:config get keyName
  • 查看全部配置:config get *