Redis入门
概述
Redis是什么
Remote Dictionary Server——远程字典服务
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
免费开源,当下最热门的NoSQL技术之一,也被人们称为结构化数据库
Redis能干什么
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
每秒写8万次,读11万次
- 内存存储、持久化,内存中是断电即失,所以持久化很重要(RDB、AOF)
- 效率高,可用于高效缓存
- 发布订阅系统
- 地图信息分析
- 计时器、技术去(网站浏览量)
Redis的特性
- 多样的数据类型
- 持久化
- 集群
- 事务
Linux安装Redis
官网下载Redis安装包
使用filezila将安装包上传到Linux的home目录下
将redis安装包移动到
/opt
路径下mv redis-6.0.3.tar.gz /opt解压redis安装包
tar -zxvf redis-6.0.3.tar.gz安装
centos
yum install gcc-c++sudo makeubuntu
sudo make报找不到
cc
错误则安装gccsudo apt install gcc此时执行
make
命令,如果报错,是因为上次编译有残留文件。make distclean运行测试
sudo make test安装redis到
/usr/local/bin
目录sudo make install进入
/usr/local/bin
查看
将redis配置文件复制到当前目录下
mkdir myconfigcp /opt/redis-6.0.3/redis.conf myconfig之后就是用这个配置文件进行启动
redis默认不是后台启动的,修改配置文件
sudo nano redis.conf修改
daemonize no
为daemonize yes
,开启后台启动启动redis服务
使用指定的配置文件启动redis
redis-server myconfig/redis.conf使用redis客户端
-h
:主机-p
:端口redis-cli -p 6379测试存取一个键值对
set key valueget key
查看所有的键
keys *查看redis进程是否开启
ps -ef | grep redis退出redis
shutdown然后
exit同时关闭
redis-server
和redis-cli
ps -ef | grep redis会发现进程已经消失
redis-benchmar性能测试工具
-p
:端口-h
:主机-c
:连接数-n
:并发数测试50个并发链接,每一个链接10w个请求
redis-benchmark -p 6379 -c 50 -n 100000
Redis基础知识
切换数据库
redis默认有16
个数据库,可在配置文件中看到
默认使用第0个数据库,可使用select
进行切换
查看数据库大小
查看当前数据库中所有的key
清空当前数据库
清空所有数据库
Redis是单线程还是多线程
单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程。
redis实际上是采用了线程封闭的观念,把任务封闭在一个线程,自然避免了线程安全问题,不过对于需要依赖多个redis操作的复合操作来说,依然需要锁,而且有可能是分布式锁。
绝大部分请求是纯粹的内存操作(非常快速)
采用单线程,避免了不必要的上下文切换和竞争条件
非阻塞IO - IO多路复用
Redis基于C开发,100000QPS
Redis为什么单线程还这么快?
- 误区1:高性能的服务器一定是多线程的
- 误区2:多线程一定比单线程效率高
redis将所有数据存放在内存中,所以使用单线程操作效率很高,对于内存系统而言如果没有上下文切换效率就很高,多次都写都在同一个CPU上