Redis入门
Redis概述
Redis是什么?
Redis(Remote Dictionary Server ),即远程字典服务。
是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis能该干什么?
- 内存存储、持久化,内存是断电即失的,所以需要持久化(RDB、AOF)
- 高效率、用于高速缓冲
- 发布订阅系统
- 地图信息分析
- 计时器、计数器(eg:浏览量)
- 。。。
特性
-
多样的数据类型
-
持久化
-
集群
-
事务
…
Windows安装
环境搭建
推荐使用Linux服务器学习。
windows版本的Redis已经停更很久了…
Windows安装
https://github.com/dmajkic/redis 下载解压即可
如果redis-server.exe服务器点击服务器闪退使用cmd
依次输入以下命令即可连接成功
1. redis-cli.exe
2. shutdown
3. exit
4. redis-server.exe redis.windows.conf
启动客户端redis-cli.exe

ping:测试连接
set name yuan 存值
get name 取值
Linux安装
-
下载redis安装包
-
解压redis安装包,放在
/opt目录下 -
基本环境安装
#进入redis安装目录下执行
yum install gcc-c++
#执行
make
# 然后执行
make install

- redis默认安装路径
/usr/local/bin

- 将redis的配置文件复制到 程序安装目录
/usr/local/bin/yconfig目录下 yconfig新建的目录

- redis默认不是后台启动的,需要修改配置文件!改为yes为后台启动 注: vim redis.conf

- 通过制定的配置文件启动redis服务:redis-server yconfig/redis.conf

- 使用redis-cli连接指定的端口号测试,Redis的默认端口6379

- 查看redis进程是否开启

- 关闭Redis服务
shutdown

Redis性能测试
**redis-benchmark:**Redis官方提供的性能测试工具,参数选项如下:
| 序号 | 选项 | 描述 | 默认值 |
|---|---|---|---|
| 1 | -h | 指定服务器主机名 | 127.0.0.1 |
| 2 | -p | 指定服务器端口 | 6379 |
| 3 | -s | 指定服务器 socket | |
| 4 | -c | 指定并发连接数 | 50 |
| 5 | -n | 指定请求数 | 10000 |
| 6 | -d | 以字节的形式指定 SET/GET 值的数据大小 | 2 |
| 7 | -k | 1=keep alive 0=reconnect | 1 |
| 8 | -r | SET/GET/INCR 使用随机 key, SADD 使用随机值 | |
| 9 | -P | 通过管道传输 请求 | 1 |
| 10 | -q | 强制退出 redis。仅显示 query/sec 值 | |
| 11 | --csv | 以 CSV 格式输出 | |
| 12 | *-l*(L 的小写字母) | 生成循环,永久执行测试 | |
| 13 | -t | 仅运行以逗号分隔的测试命令列表。 | |
| 14 | *-I*(i 的大写字母) | Idle 模式。仅打开 N 个 idle 连接并等待。 |
简单测试
# 测试:100个并发连接 100000请求
redis-benchmark -h localhost -p 6379 -c 100 -n 100000

Redis基础知识
Redis默认有16个数据库 命令:vim redis.conf

默认使用的第0个;
[root@yuan bin]# redis-server yconfig/redis.conf
[root@yuan bin]# redis-cli
127. 0.0.1:6379> config get databases #查看数据库的数量 databases
1) "databases"
2) "16"
127. 0.0.1:6379> select 5 #切换数据库,切换的数据库为第5个
OK
127. 0.0.1:6379[5]> dbsize #查看数据库的大小
(integer) 0
# 不同数据库之间 数据是不能互通的,并且dbsize 是根据库中key的个数。
127. 0.0.1:6379> set name yuan
OK
127. 0.0.1:6379> select 3
OK
127. 0.0.1:6379[3]> get name #不能获取dbdatabase[0] 数据库中的数据
(nil)
127. 0.0.1:6379> keys * 查看当前数据库中所有的key
1) "name"
127. 0.0.1:6379> dbsize # size和key个数相关
(integer) 1
keys * :查看当前数据库中所有的key。
flushdb:清空当前数据库中的键值对。
flushall:清空所有数据库的键值对。
Redis是单线程的,Redis是基于内存操作的。
明白Redis是很快的,官方表示,Redis是基于内存操作,CPU不是Redis性能瓶颈,Redis的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了!所有就使用了单线程了!
Redis 是C语言写的,官方提供的数据为100000+的QPS,完全不比同样是使用key-vale的Memecache差!
Redis为什么单线程还这么快?
1、误区1∶高性能的服务器一定是多线程的?
2、误区2∶多线程(CPU上下文会切换!)一定比单线程效率高!先去CPU>内存>硬盘的速度要有所了解!
核心: redis 是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文会切换︰耗时的操作!! ! ),对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都是在一个CPU上的,在内存情况下,这个就是最佳的方案!|