文章目录
- 一、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 *