第一章 redis学习的简单介绍和简单的功能使用
有学习的小伙伴可以一起讨论有问题可以问我,微信 15321502296
REDIS
介绍:属于非关系型数据库,key values 是一种nosql 数据库
redis概念:Redis基于key-value(键值对)的非关系型数据库,基于内存工作
Redis在大并发量情况下内存使用率平缓(稳定,支持持久化)并且Redis还支持主从复制,memacahe的性能强读写量大.
它支持的五种数据结构,非常重要。
string(字符串) 内部编码 3 种raw int embsrt
hash(哈希) 内部编码 hashtable ziplist
list(列表) 内部编码 linkedlist ziplist
set(集合) 内部编码 hashtable inset
zset(有序集合) 内部编码 skiplist ziplist
BITMAPS (位图) GEO (地理信息的定位)
redis 会将所有数据存放在内存中,所以读写速度惊人
redis 会将内存的数据利用快照和日志形式保存在硬盘上。(持久化)
redis 支持事务,发布订阅,键过期,流水线,lua语言,哨兵等。
2008 年开始 : LOOGG发布出来
redis使用的企业有
: 阿里 、腾讯、百度、搜狐、优酷、美团、小米、唯品
字符串
数字(整数,浮点数)
二进制文件(图片 视频 音频)
512M
set key value [ex sconds]
[px millliseconds] [nx|xx]
redis 快的原因
1.纯内存访问100纳秒
2.非阻塞的I/O epoll模型
3.单线程避免了线程的切换和竞态产生的消耗 所以消耗的是锁
Redis特性:
1.速度快
因为使用C语言写的实现的距离短,
基于单线程,
源代码.开发
2.基于键值对的数据结构的服务器
类似于java 里的 map , Python 里的 dict(字典) ,键值对 key value ,
get key时显示value
3.丰富的功能
键过期的功能,实现缓存功能
发布订阅 实现消息系统
支持Lua功能(lua用于编写全新的命令): 可以创建Redis的命令
支持事物(脚本)
pipeline流水线
- 安全稳定(高性能方面安全稳定)
源代码少,单线程,不宜懒其他系统
5.客户端的语言多
6.持久化(持久化就是把内存上的东西转到磁盘上
通过RDB和AOF实现)
7.主从复制
8.高可用和分布式(2.8实现高可用用于解决单节点故障, 3.0实现的分布式 用于集群)
setinel 自动转移
Redis可以做什么?
1.缓存服务器
2.排行榜的系统
3.计数器应用
4.社交网络
5.消息列队
6.可以部署在windows上
Redis不能做什么?
1.冷热数据 需要分开存储
数据库(不是不能,而是不用于做数据库,Redis不适合,需要太多内存)
2.尽量避免把冷数据部署在Redis上
热数据:需要频繁操作的数据
冷数据:不需要频繁操作的数据
redis 不适合 大规模数据 :
小规模数据
注意 : 1、切记不要把 redis当 黑盒 (类似于超频)使用
开发和运维业务不能串在一起
2、要阅读源代码
内部编码的好处 :
可以改进内部编码
多种内部变法实现不同场景发挥各自的优势
单线程 :全部用来处理意见是,高效
redis 解压包中 src的 绿色 客户执行 命令
redis-cli :redis 客户端的执行命令
redis-check-rdb : rdb持久化文件的检查或修复工具
redis-sentinel :启动 redis的 哨兵
redis-server : 启动redis
redis-check-aof :aof持久化文件的检查或修复工具
redis-benchmark:redis的 基本测试工具
vm.overcommit_memory = 1
0表示内核将检测是否有足够的可用内存供应进程使用
1不管需要多少内存多允许申请
2只允许分配物理内存和交换内存的大小
prot : 端口
logfile : 日志文件
loglevel erbose : 日志级别 :debug\verbose\notice\waring
日志输出方式 : logfile stdout
redis内string模式命令(反馈1成功0不成功):
1.ping 检测网络是否连通
2.keys * 查看所有键
3.shutdown 关闭 选save保存并关闭 或 nosave
4.set 设置键
5.dbsize 查看键的总数
6.exists key 检查键是否存在反馈1存在反馈0不存在
7.del 删除键 可以同时删除多个用空格隔开
8.expire key seconds 键过期
9.ttl 查看过期时间剩余多少(-1代表存在没设置过期时间,-2代表键不存在,正数代表剩余多少时间)
大于0的整数 : 键剩余的过期时间
-1 :键没设置过期时间
-2 : 键已经过期 不存在
10.type 查看键的数据类型
11.rpush 创建列表
12.object encoding 查看内部编码
13.set key value [ex sconds] 为键设置一个秒级的过期时间
[px milliseconds] [nx|xx] nx是添加 xx是替换或跟新
14.mset 批量设置
15.mget 批量查看
16.incr 只不是整数时 返回错误
值是整数时 返回自增之后的结构
键不存在 按照值为0自增 结果为1
17.decr key设置自减
incrby key increment 设置数的自增
decrby key incerment 设置数的自减
incrbyfloat key increment 小数的自增
18.append key value 追加值
19.strlen key 字符串的长度
20.setrange key offset value 设置指定位置的字符
位置变量从0开始算第一位是0 第二位是1以此类推
21.getset key value设置并返回原值
22.getrange key start end 获取部分字符串
Redis 简单的小命令 redis key 代表 :具体的键名
1、退出:先shutdown、后exit
2、Keys* :查看所有的键
3、查看所有键的总数:dbsize
4、监测键存不存在 :exists key
存在返回 1
不存在返回 0
5、删除键 del +具体键名
可以删除多个
删除存在的键返回 1
删除不存在的键返回 0
6、键过期 :EXPIRE key seconds
TTL key
-1 :代表键存在且没设置过期时间
-2:已经过期或者不存在的键
7、键的数据结构类型 :
rpush 列表 创建
type key :查看键的类型 是列表还是其他的
object encoding 查看数据的内部编码
数据类型的结构:
String :raw、int、embsrt
Hash : hashtabl、ziplist
List :linkedlist、ziplist
Set :hashtable、inset
Zset :skiplist、ziplist
单线程 : 速度快,想家教一样,效率高。避免了线程切换,和资源竞争的资源消耗
坏处 :
多线程 : 像学校一样,总会有人不会;多个进程堵塞一个交通口。效率低。
redios 快的原因
1、纯内存访问100纳秒
2、非阻塞的I/O线程 epoll 模型
3、单线程 避免了线程的切换和静态
所产生的消耗
其他数据结构类型都是建立在字符串之上
字符串:
数字(整数、和浮点数)
二进制文件 (图片、音频、视频)
最大不能超过512 MB
7、set :设置键 set +名字 +内容 加*
key :名字·
value :值
set key value [ ex sconds]
[ px milliseconds] [nx|xx]
[ ex sconds] :为键设置一个秒级的过期时间
[ px milliseconds] : 帮键设置一个 毫秒的 过期时间
[nx] :键必须不存在才可以设置成功,用于添加
[xx] : 键存在才可以设置的,用于更新
Setex key seconds value
Setnx key value
mset :批量设置
mget : 批量查看
记数 incr 自增键
值不是整数 返回错误
值是整数 返回自增之后的结果
键不存在 按照值为0自增 结果 1
decr key
Incrby key increment
decrby key increment
incrbyfloat key increment
8、追加值
append key value
字符串的长度
Strlen key offset value
设置指定位置的字符
getset key value
设置并返回原值
获取部分字符串
更改字符
set redis pest
setrange redis 0 b
获取部分字符串0 开始
getrange key 起始数字(0) 开始 结束数字
get redis
getrange redis 0 1
有学习的小伙伴可以一起讨论有问题可以问我,微信 15321502296