1. 什么是redis
redis是nosql
,key-value数据结构
,非关系型
,可持久化,支持分布式
,实现缓存的内存数据库
.
2.详细介绍
nosql:
not only structrued query language,不仅结构化查询语言,指的是操作redis的命令,统称为nosql,就像操作mysql数据库的语言叫sql.
key-value:
redis处理的是非结构化数据.
结构化数据:
关系型数据库如: mysql, oracle表格数据都是结构化,有规律可循,有结构可做.
非结构化数据":
redis
/mongDB
/hadoop
都是没有整体结构,没有规律.长江的非结构化数据页面系统日志.
非关系型:
由于非结构化数据特点,无法实现数据与数据之间的关系.
redis处理非结构化数据,存储数据格式不是表格是key-value的内存结构,操作redis的语言叫做nosql,不能体现数据间关系,所以叫做非关系型
内存运行:
redis进程基于内存运行,数据存放到内存中.特点:
读写速度快,断电丢失数据.
可持久化:
redis运行时虽然数据存储在内存中,为了防止断电丢失数据,提供了可以将内存数据输出保存在磁盘的方式(rdb aof),一旦出现丢失内存数据时,可以在启动redis时,将磁盘持久化数据重新加载到内存.利用持久化的能力,redis很容易解决容灾问题.降低了使用redis实现缓存功能时-------雪崩的出现
持久化:
将数据存储在磁盘中.
雪崩:
与缓存逻辑有关
redis的内存逻辑
,导致断电丢失,缓存数据丢失,就会瞬间造成系统高并发涌入数据库.数据库有可能无法承受瞬间的并发访问,导致宕机,系统崩溃-----缓存雪崩
redis的持久层能力
,降低缓存出现雪崩的概率
分布式:
分布式结构,有效的提升内存容量上限.
3.安装步骤
- 获取安装包
- 将获取来的安装包放在
/home/resources
文件夹下,在自己定义文件下安装解压包
cd /home/自己定义文件名
cp /home/resources/redis安装包+后缀 ./
- 解压安装tar包
还是在自定义文件名下,执行tar命令-xzvf
tar -xzvf redis安装包+后缀
- 进入redis根目录执行编译和编译安装
cd redis安装包
make && make install
最后看到这个就说明成功了
4. 服务端和客户端运行代码
redis访问使用的结构,非常类似数据库有服务端,客户端.
- 服务端脚本
进行解压之后,执行make编译时候产生了操作redis的脚本命令
开启redis服务端
redis-server
执行完毕后,日志最后一句话: The server is now ready to accept connections on port 6379
2. 客户端脚本
开启redis客户端
redis-cli
如果什么都不加则表示连接本地redis服务端ip 127.0.0.1 端口为6379
-h 写redis的ip地址
-p 写redis服务器所占用的端口
测试使用默认服务端时不要使用-h 登录服务端拒绝访问,服务端开启了保护默认
5. redis五种数据结构和命令
- redis的基础命令
get key
获取key的value值
set key value
设置key和value的值
keys *
表示客户端查看当前redis服务端内存中所有的数据key值.
exists key值
表示要看出的对应的key值数据是否在redis内存中存在.有则返回:1 没有则:0
expire/pexpire key time
设置`秒/毫秒`当过了所设置的时间则就将key值所删除,`set没有写则是永久数据`
ttl/pttl key
显示剩余的`秒/毫秒`
del key
对指定的key进行删除操作
save
redis支持持久化,将内存数据,刷出到持久化文件,内存数据保存在磁盘上.
redis启动时自动加载保存的持久化文件,将数据恢复回来.
save命令的调用,就是将内存数据刷出到持久化文件中保存.
- String类型数据
set key value ex/px time
表示设置超时`秒/毫秒`
set key value nx
表示如果没有相同key值则成功,有则添加失败
set key value xx
表示如果有相同的key值成功,没有则失败
set incr/incrby key
表示将该key属性的value值`自增1或者规定+多少`
set decr/dectby
表示将该key属性的value值`减少1或者规定-多少`
- hash类型
hash在redis中底层是双层map形式存在,key-value是map,value在hash结构中又是一个map.所以他可以对应对象的数据结构.
hset key field value
key为key值,field为第二层key值 value为第二次的value
hget key field
读取某个key的某个属性的value值
hkeys key
读取key值中的第二层key值属性
hvals key
读取key值中的第二层value值
hdel key fild
删除key值中第二层中的key值
- List双向链表
list底层双向链表,可以从头和尾部处理数据,实现队列的结构
lpush/rpush key value
lpush从头部插入数据
rpush从尾部插入数据
lrange key start end
可以对一个list链表中的元素范围内的数据读取返回.
lrange key 起始下标 结束下标.
如果查找所有的 可以 0 -1
lset key index 修改值
对list的某个下标为index的元素值,做修改.
rpop/lpop key
rpop从链表的尾部删除元素,并且将删除的元素值返回
lpop从链表的头部删除元素,将元素值返回(remove)
- set集合
可以将不同,不重复的元素值,放到一个没有顺序概念的集合中,实现value数据在redis的管理
sadd key member
增加元素到集合
srandmember key [count]
随机在key对应set集合中选取count个元素
srem key 元素值
可以对集合中某个元素进行去除的操作,当删除成功,返回1,删除失败返回0
- zset有序集合
在set基础之上,实现了排序的方式,元素也是不可以重复,就是在元素的数据上绑定了一个 评分的数据(实际应用场景中,评分可以不同业务意义,例如点击率,例如播放量,例如投票数量等)
zadd key score member
将一个元素绑定一个分数后,写入有序集合中
zrank/range member [start] [end]
在有序集合中体现排序
zrangebyscore score start end
在 start和end之间所有的元素排序
6. 配置文件
redis提供了一个配置文件模板,在redis根目录redis.conf
6.1 配置文件模板
使用vim redis.conf进入.
61行:将bind 127.0.0.1注释掉,防止限制登录客户端.如果redis服务端只允许使用127.0.0.1登录连接访问的客户端,至允许本地客户端登录.
80行: 将protected-node 安全模式关闭
,redis默认开启安全模式,在安全模式下,即使远程客户端能够连接到redis,也无法操作redis执行各种安全相关要求的命令.
84行:端口配置
,redis默认6379作为redis服务端一个表示内容.
128行:后台启动开启
,默认配置中redis启动后占用控制台显示,开启后将会后台运行,不会在控制台显示处理
150行:pid文件
,在同一个服务器上运行的不同redis服务端pid不一样,不能让他们公用一个pid文件.
163行:指定日志文件名称
.redis启动后默认在目录下生成6379redis.log文件.对应着与端口相同的日志文件
237行:持久化文件dump对应redis端口命令
,在同一个服务器上启动多个redis服务端进程,不能有相互冲突的东西存在.端口号,pid文件,log日志,dump持久化数据.
启动/关闭redis服务端
#开启
redis-server redis.conf
#关闭方法1
redis-cli shutdown
#关闭方法2 查看进程pid然后kill
ps -ef|grep redis
kill Pid