1. Redis介绍
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。 [1]
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
redis的官网地址,非常好记,是redis.io。(特意查了一下,域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地)
目前,Vmware在资助着redis项目的开发和维护。
2. Redis的安装
解压安装文件
解压好了后
执行make进行编译
编译ok、
进入src目录
Redis-cli 终端操作
Redis-server 启动redis服务的文件
Redis-benchmark压力测试文件
Redis-check-xx 检车备份文件脚本
创建Redis运行目录,并拷贝两个运行文件过去
拷贝配置文件过去
3. 启动Redis服务
前端启动redis服务成功的标志
./redis-server
这时有个问题,当前启动的是不能关的,一关就没了,所以需要进行修改
停止服务Ctrl+z
先停止掉redis服务
使用后台来启动redis服务
vim redis.conf
改成yes保存,设置后台启动redis
再次启动
发现还是前端启动
启动的时候带上配置文件一起启动
查看下redis进程
发现redis已经启动
4. 简单使用
设置了三个变量,这三个变量都存储在内存中
如何读取?
Get!
5. 具体操作
1. Key的操作
在redis里面,出了“ ”和空格 不能作为名字的组成内容外,其他内容都可以作为key的名字部分,名字长度不做要求
换句话来说,就是变量名称
代码 | 作用 |
Exists key | 是否存在 |
Del key1 key2 …. | 删除指定的key |
Type key | 返回给定的key的value类型 |
Key pattern | 返回匹配指定模式的所有的key |
Rename oldkey newkey | 改名字 |
Dbsize | 返回当前数据库的key的数量 |
Expire key seconds | 为key指定过期时间 |
Ttl key | 返回key的过期秒数 |
Select db-index | 选择数据库 |
Move key db-index | 将key从当前数据库移动到指定数据库 |
Flushdb | 删除当前数据库中所有的key |
Flushall | 删除所有数据库中的所有key |
这里举例了一个的使用
2. String类型的操作
String是redis最基本的类型
Redis的string可以包含任何数据,包括jpg图片或者序列化对象
单个value值最大上限是1G字节
代码 | 作用 |
Set key value | 设置key对应的值为string类型的value |
Mset key1 value1…keyN valueN | 一次设置多个key的值 |
Mget key1 key2 … keyN | 一次获取多个key的值 |
Incr key | 对key的值做++操作 |
Decr key | 同上 –操作 |
Incrby key integer | 同incr 加指定值 |
Decrby key integer | 同decr 减指定值 |
Append key value | 给指定key的字符串追加value |
Substr key start end | 返回截取过的key的字符串值 |
3. List链表类型的介绍和使用
List类型其实是一个双向链表
如果想要查询前10个最新的用户,
要一个个查,太消耗资源
List链表示例图:
通过list链表保存登陆系统的最新5个用户信息
新用户进来,旧的用户踢出
链表该如何操作?
代码 | 作用 |
Lpush key string | 在key对应list的头部添加字符串元素 |
Rpop key | 从list的尾部删除元素,并返回删除元素 |
Lien key 返回 key | 对应list的长度,key值不存在返回0,如果key对应类型不是list返回错误 |
Rpush key string | 同上,在尾部添加 |
Lpop key | 从list的头部删除元素,并返回删除元素 |
Ltrim key start end | 截取list,保留指定区间内的元素 |
4. Set集合类型
Redis的set是string类型的无序集合。
Set元素最大可以包含(2的32次方-1)个元素
每个集合中的各个元素不能重复
代码 | 作用 |
Sadd key member | 添加一个string元素到key对应的set集合中,返回成功1 |
Srem key member | 从key对应·set中移除给定元素,成功返回1 |
Smove p1 p2 member | 从p1对应set中移除member并添加到p2对应set中 |
Scard key | 返回set的元素个数 |
Sismember key member | 判断member是否存在set中 |
Sinter key1 key2.。。。 | 返回所有给定key的交集 |
Sunion key1 key2 | 返回所有给定key的并集 |
Sdiff key1 key2.。 | 返回所有给定key的差集 |
Smembers key | 返回key对应set的所有元素,结果是无序的 |
里面有一个key五个元素
接着又添加一个Linken
5. SortSet排序集合类型操作
和set一样,sorted set 也是string元素的集合
不同的是,每个元素都会关联一个权
通过权值可以有序的获取集合中的元素
案例:
利用sort set实现获取最热门的前5帖子学习
排序集合中的每个元素都是值,权的组合
代码 | 作用 |
Zadd key score member | 添加元素到集合,元素在集合中存在则更新对应score |
Zrem key member | 删除指定元素,1成功,0不存在 |
Zincrby key incr member | 按照incr幅度增加对应member的score值,返回score值 |
Zrank key member | 返回指定元素在集合中的排名(下标),集合中元素是安score从小到大排序的 |
Zrange key start end | 类似Irange操作从集合中指定区间的元素,返回的是有序结果 |
Zrevrange key start end | 同上,返回是逆序的 |
Zcard key | 返回集合中元素个数 |
Zscore key elemet | 返回给定元素对应的score |
Zremrangebyrank key min max | 删除集合中排名在给点区间的元素 |
6. 快照持久化
900秒一个Key变化就(快照)保存
300秒十个key变化就(快照)保存
一分钟一万个key变化就(快照)保存
这样控制的好处:
数据修改的频率非常高,备份的频率也高,
数据修改的频率低,备份的频率也低。
快照持久化保存的名字
手动发起快照持久化
如果对本机:
7. AOF持久化
本质:把用户执行的每个“写”指令(添加,删除,修改)都备份到文件中,还原的时候执行具体的“写“指令
开启AOF持久化会清空redis内部数据
开启AOF持久化
配置文件被修改 重启服务
查看redis进程:Ps –A | grep redis
-9强制杀死进程
启动一个新的进程
Aof追加持久化的备份频率
Always 每次收到写指令就立刻强制写入磁盘,很慢,但能保持完全的持久化
Everysec 每秒强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐
No 完全依赖OS 性能最好,持久化没保证
8. 主从模式
为了降低每个redis服务器的负载,可以设置几个,并作主从模式
一个服务器负载“写“
其他服务器负载“读”
主服务器会 自动 同步给从服务器
修改IP地址和端口号