第一章 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流水线

  1. 安全稳定(高性能方面安全稳定)

源代码少,单线程,不宜懒其他系统

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 : 日志级别 :debugverbose oticewaring

日志输出方式 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

原文地址:https://www.cnblogs.com/bingpo-blade/p/9234105.html