Redis学习1

Nosql

现在处于大数据时代.

大数据一般的数据库无法进行分析处理的

大数据时代的3V:主要是描述问题的

1.海量Voume

2.多样Variety

3.实时Velocity

大数据时代的3高,主要是对程序的要求

1.高并发

2.高可扩

3.高性能(保证用户体验和性能)


NoSQL的四大分类

KV键值对:

  • 新浪:Redis
  • 美团:Redis+Tair
  • 阿里,百度:Redis+memecache

文档形数据库:

MongoDB(一般必须要掌握)

  • MongoDB,是一个基于分布式文件存储的数据库,C++编写,主要用来处理大量的文档
  • MongoDB,是一个介于关系型数据库和非关系型数据中中间的产品,MongoDB是非关系型数据库中功能最丰富,最像关系型数据库的

ConthDB

列存储数据库

  • HBase
  • 分布式文件系统

图关系数据库

myfriends

  • 他不是存图形,放的是关系,比如:朋友圈社交网络,广告推荐!
  • Neo4j,infoGrid

Redis

Redis是什么?

Redis(Remote Dictionary Server) ,远超字典服务,开源的,用c语言编写,支持网络,基于内存可持久化的日志型,Key-Value数据库.并提供多种语言的API.

redis会周期性的把更新的数据写入磁盘或者修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步

免费和开源!当下最热门的NoSql技术之一,也被称为结构化数据库.

Redis能干嘛?

1.内存存储,持久化,内存中是断电即失,所以持久化很重要(rdb,aof)

2.效率高,可以用于高速缓存

3.发布订阅系统

4.地图信息分析

5.计时器,计数器(浏览量等)

特性

1.多样的数据类型

2.持久化

3.集群

4.事务

.......

学习中需要用到的东西

redis中文:http://redis.cn/

redis推荐都是再linux服务器上搭建的,基于linux学习


redis官网:https://redis.io/

redis中文官网:http://redis.cn/

linux安装redis,我将redis安装在阿里云服务器的centos7.x系统上,用xshell6连接服务器,xftp6传送数据

先下载redis6.0 用xftp将安装包放入linux系统中(我放在opt目录) 运行安装包

redis6需要gcc5.3以上版本

centos7还是4.8.5

安装scl源
yum install centos-release-scl scl-utils-build

安装gcc9

yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

scl enable devtoolset-9 bash

gcc -v查看版本

解压源码包

tar zxvf redis-6.0.5.tar.gz

然后全程 y

配置文件在 /opt/redis-6.0.5

我们备份配置文件 到/home中

然后修改/home中的redis-conf

vim redis-conf

    requirepass xxxxxxxxxx    # 设置访问密码
    注释掉 bind 127.0.0.1    # 设置redis为任何ip都可访问,如需设置指定ip,则添加bind
    protected-mode no    # 设置为no,否则不能保证全网段进行访问
    daemonize yes    # 设置为yes,保证以守护进程的方式运行redis
运行文件在/opt/redis-6.0.5/src中

我们复制redis-server,redis-cli到/usr/local/bin中

然后输入redis-server /home/redis.conf启动服务

我这里还没有修改ip,只能本机访问

用redis-cli -p 6379测试连接

如果设置了密码,输入 auth  [密码]  来验证密码

shutdown关闭连接

exit退出


redis-benchmark

redis自带的压力测试工具

//测试:100个并发连接 100000请求
redis-benchmark -h localhost -p 6379 -c 100 -n 100000

set请求测试

对10w个请求进行测试

100个并发客户端

每次写入3个字节

只有1台服务器来处理这些请求,单机性能

每秒平均处理82236.84次请求


基础知识

redis默认16个数据库

默认使用的是第0个

127.0.0.1:6379> select 3  //切换到第3个数据库
OK
127.0.0.1:6379[3]> DBSIZE //返回当前数据库的 key 的数量
(integer) 0

查看所以的key: keys *

清除当前的数据库: flushdb

清除全部数据库的内容: flushall

Redis是单线程的!

明白Redis是很快的,官方表示,Redis是基于内存操作的,CPU不是Redis性能瓶颈

Redis的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了.

Redis是c语言写的,官方提供的数据为100000+的QPS,完全不必同样是使用key-vale的Memecache查!

Redis为什么单线程还这这么快?

1.误区:高性能的服务器一定是多线程的

2.误区2:多线程(CPU上下文会切换!)一定比单线程效率高!

CPU>内存>硬盘的速度

核心:redis是将所以的数据全部放在内存中的,所以用单线程操作就是效率最高的,多线程(cpu上下切换:耗时的操作!)对于内存系统来说,若干没有上下文切换效率就是最高,多次读写都在一个cpu上的,在内存情况下,就是最佳方案

127.0.0.1:6379> keys *  //获得当前数据库的所以key
1) "id"
2) "age"
3) "name"
127.0.0.1:6379> exists name    //判断name这个key是否存在
(integer) 1
127.0.0.1:6379> exists name1
(integer) 0
127.0.0.1:6379> exists age
(integer) 1
127.0.0.1:6379> move name 1    //移除name这个key
(integer) 1
127.0.0.1:6379> exists name
(integer) 0
127.0.0.1:6379> keys *
1) "id"
2) "age"
127.0.0.1:6379> set name wangtao  //设置name-wangtao 这个key
OK
127.0.0.1:6379> keys *
1) "id"
2) "age"
3) "name"
127.0.0.1:6379> get name     //获得name这个key的value
"wangtao"
127.0.0.1:6379> expire name 10  //设置name这个key在10秒后删除
(integer) 1
127.0.0.1:6379> ttl name        //获得name这个key还能存活的时间
(integer) 1                     //还能存活1秒
127.0.0.1:6379> ttl name        
(integer) -2                    //已经不在数据库中
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> ttl age
(integer) -1                    //一直存在,没有设置key的存活时间
127.0.0.1:6379> ttl ag
(integer) -2
127.0.0.1:6379> 

查看key的类型:


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值