什么是redis
redis是使用C语言编写的,是一个开源高性能内存中键值对数据结构存储系统。它可以做缓存,数据库,中间件。它支持的键值对数据结构有:String,list,set,hash,zset,Bitmaps,Hyperloglogs,Geospatia等。
redis有哪些优缺点
优点
- 读写性能强
- 数据结构丰富
- 支持数据持久化 忘记了
- 支持事物 忘记了
- 支持主从复制 忘记了
缺点:
- 存储容量受物理内存影响(不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上) 忘记了
- 不具有自动容错和恢复功能(所有有了哨兵)
- 不适在线扩容,如果集群到达一定数量,redis在线扩容会变得复制。
Redis特点
- Redis支持数据的持久化,可以将内存中的数据保存在硬盘中,重启的时候再次加载进行使用。
- Redis不仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
- Redis支持数据备份,即master-slaver模式的数据备份
Redis的优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性
Redis与其他的key-value存储区别
- Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
- Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
安装redis
-
下载redis*64解压包
-
将redis压缩包放到/opt文件下-》解压redis压缩包
-
配置环境安装-》yum install gcc-c++
-
环境安装成功后-》输入命令make-》之后在输入make install命令
-
进入redis默认安装路径: /usr/local/bin 将redis配置文件复制到当前目录下
-
修改redis配置文件
-
修改成功后保存退出
-
启动redis服务:redis-server fconfig/redis.conf
-
连接redis服务:redis-cli -p 6379
[root@iZf8z85vg3kifrag7rh2e9Z bin]# redis-cli -p 6379
127.0.0.1:6379> ping
PONG如果想知道该服务是否启动 可以查看对应redis进程 ps -ef|gerp redis
127.0.0.1:6379> set name kuangsheng
OK
127.0.0.1:6379> get name
“kuangsheng”
127.0.0.1:6379> keys *- “name”
127.0.0.1:6379> shutdown 关闭服务
not connected> exit 退出
清除数据库内容
# 启动服务 [root@iZf8z85vg3kifrag7rh2e9Z bin]# redis-server fconfig/redis.conf [root@iZf8z85vg3kifrag7rh2e9Z bin]# redis-cli -p 6379 # 选中数据库三 数据库有16个数据库 127.0.0.1:6379> select 3 OK # 查看数据库3大小 127.0.0.1:6379[3]> dbsize (integer) 0 127.0.0.1:6379[3]> set name zeng OK 127.0.0.1:6379[3]> dbsize (integer) 1 # 查看数据库3所有key 127.0.0.1:6379[3]> keys * 1) "name" # 清除当前数据库所有内容 127.0.0.1:6379[3]> flushdb OK 127.0.0.1:6379[3]> dbsize (integer) 0 127.0.0.1:6379[3]> set name zeng OK 127.0.0.1:6379[3]> dbsize (integer) 1 127.0.0.1:6379[3]> select 0 OK # 清除所有数据库中的内容 127.0.0.1:6379> flushAll OK 127.0.0.1:6379> select 3 OK 127.0.0.1:6379[3]> dbsize (integer) 0 127.0.0.1:6379[3]> dbsize (integer) 0 # expire设置已有key过期时间 127.0.0.1:6379[3]> set name zeng OK 127.0.0.1:6379[3]> expire name 15 # 设置15后name过期 (integer) 1 127.0.0.1:6379[3]> ttl name # 还有12秒过期 (integer) 12 127.0.0.1:6379[3]> ttl name (integer) 10 127.0.0.1:6379[3]> ttl name (integer) 6 127.0.0.1:6379[3]> ttl name # 还有12秒过期 (integer) 2 127.0.0.1:6379[3]> ttl name # 当=0时表示设置的key过期 (integer) -2 127.0.0.1:6379[3]> dbsize (integer) 0 127.0.0.1:6379[3]>
redis为什么这么快
在讨论redis为什么这么快之前,我们先来了解redis为什么是单线程
redis简介
reids是一个开源的内存中的数据结构存储系统,他还可以做缓存,数据库,中间件
redis支持的数据结构有:String(字符串) ,hash(散列), list(列表), set(集合), zset(有序集合),范围查询,Bitmaps,Hyperloglogs,Geospatial(地理空间),索引半径。
redis还内置了Rep
- “name”