Redis缓存数据库

Posted zszitman

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis缓存数据库相关的知识,希望对你有一定的参考价值。

第一章 

1.1NoSQL简介

传统关系型系统中的事务控制是一个很好的机制,但是本身有一个最大的缺点,处理速度慢。单节点的数据库即使再厉害,你所在的服务器的硬件性能再好,你也无法承受几亿条数据。

Nosql=Not Only SQL 不仅仅是SQL

特点:

采用数据集存储

动态结构定义

存储精简

可扩展性强

适合云计算

关系型数据库:

利用ACID保证数据完整性

行列的规范化存储

存储数据量小

结构化查询

 

首先在实际的开发中,关系型数据库不能被替代,因为它存储的数据都是结构化的数据,但是一些操作频繁较高的数据呢?在所有的电商平台上都会存在有一个购物车功能,那么现在的技术开发要求考虑PC端、移动端数据通用。

传统关系型数据库依然要进行保留,因为依然要保留原始的结构化数据,而NoSQL要负责处理那些高并发的用户操作。

NoSQL数据库分类

键值key-value存储数据库,采用hash表结构存储。

列存储数据库,应分布式存储的海量数据,采用列族的形式存储

图形数据库

对象存储,通过类似面向对象语言的语法操作数据库

xml数据库,高效的存储XML数据,并支持XML的内存查询语法

1.2认识Redis

 

首先Redis提供给用户的只是一个源代码的开发程序包。

Redis特点:

异常快速:Redis是非常快的,每秒可以执行大约11万设置操作,8万每秒的读取操作。

支持丰富的数据类型,StringListSetSorte SetHash

原子性操作:所有的Reids操作都是原子的,从而确保当两个客户同时访问Redis服务器得到的是更新后的值。

MultiUtility工具:Redis是一个多功能适用的工具。

Redis执行的数据块,支持的数据类型多,但是并不是只有Redis具备这样的特点,Redis是属于缓存数据库的第二代产品,而第一代是Memcached

面试题:

RedisMemcached区别:

RedisMemcached支持更多的数据类型

Redis支持主从结构,可以实现数据备份。

Redis支持数据持久化,可以将数据保存到磁盘上,重启数据依然可用。

 

第二章 Redis的安装与配置

2.1Redis编译与安装

1、将Redis开发包上传到系统中

Tar xzvf srv/ftp/redis-3.2.9.tar.gz -C /usr/local/src/

2、进入到Redis源代码所在的安装目录

3、进行程序的编译处理make 

4.编译完成之后要进行Redis安装 make install

5Redis数据库属于内存缓存数据库,那么你现在是一台单独的Redis服务器,则应该考虑将所有的可用内存都分配给Redis

2.2Redis数据库配置

Redis数据库,主要的配置文件就是redis.conf,所有的配置项一定要在此出完成

1Redis支持持久化功能的数据库,所以其一定会有一个用于数据库存储的目录,那么Redis在存储的时候有三类文件需要保存:Redis运行时的pid,相关处理日志,Redis的数据文件。

2、修改Redis的配置文件redis.conf

配置端口号:port 6379

配置Redis是否为后台运行

设置进程保存路径

设置日志保存目录

该数据库支持的数据库数量

保存数据文件目录

3、启动Redis

第三章 Redis数据操作

3.1redis-benchmark测试与操作命令

范例:模拟1000一个客户端进行数据处理

/redis-benchmark -h 127.0.0.1 -p 6379 -c 1000 -n 10000

-h 连接服务器的地址 -p端口号 -c客户端数量 -d每一次操作的数据长度 -n每一个用户发出的请求数量

3.2字符串操作

Redis中有一个特别重要的命令keys,可以进行全部数据的列出

set key keyvalue    get key

情况仓库:flushdb

不覆盖设置内容:setnx key keyvalue

设置数据的保存时间:setex key time keyvalue

查看当前有效时间:ttl key

key取消过期时间:persist key

设置多个keymset key value key2 value2

追加内容:append key value

取得key的内容长度:strlen key

删除指定的数据内存:delete key key2 key3

 

set username-jmldn hello

get username-mldn

 

3.3Hash数据操作

存放Hash类型:hset key username zsz

hset key age 28

取数据:hget key age

hash与对象转化

设置不重复的数据:hsetnx key name zsz

批量设置:hmset key name zsz age 28

判断某个key的某个属性是否存在:hexists key age

取得成员个数:hlen key

 删除指定的key的内容:hdel key age

取得所用的hash keyhkeys key

取得所用的keyvaluehgetall key

取得全部的valuehvals key

3.4数字操作

自增:incr key

set num 100 incr num

自增nincrby num n

自减:decr key

自减ndecrby key n

进行Hash类型的数字操作:hincr key age 1

 

3.5List数据操作

创建一个描述关键字的List集合:lpush key value1 value2 value3 value4

进行指定范围的链表数据输出:lrange key 0 2

全部输出:lrange key 0 -1

右入栈:rpush key value1 value2 value3

在指定元素前追加内容:linsert key before value1

在指定元素后追加内容:rinsert key after value2

如果此时你存放的内容有重复数据以第一个为准

 

修改指定索引数据:lset key 0 value5

删除数据:lrem key 1 value6

保留指定范围的数据:ltrim key 0 10

元素从栈顶出栈:lpop key

元素从栈底出栈:rpop key

将移除的数据放到另一个集合:rpoplpush key key2

取得指定索引的数据:lindex key 8

取得集合个数:llen key

 

3.6Set数据操作 无序、弹出为自动删除

用来实现数据的集合对比处理:实现数据的交集、并集、差集。

向集合追加新元素:sadd key value1 value2 value3 value4

查询set集合:smembers key

删除集合元素:srem key value1

从集合中随机弹出一个数据:spop key

两个集合的差集:diff key1 key2 (key1-key2)

将差集放到另一个集合中:sdiffstore key1 key2 key3

交集:sinter key1 key2

将交集保存到指定的集合中:sinterstore key1 key2 key3

并集:sunion key1 key2 

将并集保存到指定的集合中:sunionstore key1 key2 key3

弹出数据到另外的集合中:smove key1 key2 value1

返回集合个数:scard key

判断指定的集合中是否包含指定的元素:sismember key value1

随机返回key中的数据 返回的数据个数 不删除:srandmember key number

 

 

 

3.7SortedSet数据操作

增加数据:zadd key 分数 内容

取出有序集合内容:zrange key 0 -1 withscores

删除有序集合数据:zrem key 内容

数据增长:zincrby key 分数 内容

返回集合中指定元素的索引值:zrank key 内容

反转数据:zrevrank key 内容

反转后取得数据:zrevrange key 开始分数 结束分数 withscores

根据索引取得指定范围的数据:zrangebyscore key 开始分数 结束分数 withscore

取得集合中指定分数范围的数量:zcout key 开始分数 结束分数

取得指定集合中的元素个数:zcard key

根据下标排序,删除指定范围的数据:zremrangebyrank key 0 1 5

 

3.8Redis数据类型总结

Redis严格来讲由于其处理速度很快,某种程度上已经不完全属于数据库的支持了,所以对于数据类型:

1、基本类型:string int 基本类型的基本操作更加适合用户进行短期的数据存储,因为在实际开发中,可以进行各种复杂的操作,而且字符串也可以描述各种数据的含义。那么在实际的开发中,可以利用此类型实现nginx的集群数据保存,springData数据保存。

2hash类型:hash类型更多的情况下是一个结构化的信息,但是这种结构化的信息个人认为不如对象序列化好用,但是至少需要知道hash这样的类型可以进行内容的详细分类;

3List在实际的开发中可以实现消息队列的功能,或者进行缓冲的功能,好多公司不用消息中间件,而用List实现。

4set数据类型:最大的支持功能在于集合的运算上,例如:相似度检测、好友推荐、都可以通过这种方式来完成。

5.SortdSet:主要进行数据的流式分析;

 

第四章 Redis进阶操作

4.1Redis事务处理

Redis本身支持事务处理,但是这种支持的事务处理本身是存在有设计缺陷的,而且与传统的事务处理有些不同,首先看一下Redis中的事务支持命令:

打开事务:multi

取消事务:discard

提交事务:exec

一旦开启了Redis的事务控制,则表示所有的更新操作都要追加到一个更新的队列之中。由于现在在执行完更新之后发现数据本身出现了问题,所以选择了关闭事务,一旦事务关闭之后那么该操作将会回滚到之前的状态。

如果在事务开启状态下进行了更新处理,随后只有执行了exec指令后才表示事务真正的提交,才会影响真实的数据,但是需要提醒的是,Redis设计之初就是不考虑事务的,所以以上的事务只能够说是Redis的玩笑,因为这种设计并不完善。

 

4.2Redis乐观锁

在数据库执行操作的时候,为了保证数据的一致性,A用户更新数据的时候B用户不能够更新。

悲观锁:基于数据库的实现,

乐观锁:基于算法的实现,在数据表上追加一个锁的处理列。

Redis里面直接支持有乐观锁,如果想要观察乐观锁的处理,可以打开两个不同的Session来进行我们的处理。

 

4.3Redis密码配置

1、修改redis. conf配置文件

2、关闭redis服务,重新启动

3、登录redis

Redis-cli -h 127.0.0.1 -p 6379 -a passwd

Auth mldnjava

 

4.4Redis性能监控

 

redis-stat工具监控

1、为了更加清楚的发现redis-stat特点,下面通过建立三个redis运行进程,模拟方式很简单,配置不同的redis端口即可;

2、建立redis数据的保存目录,要求可以保存三个Redis进程:

3、将我们之前的redis.conf配置拷贝三份

4、编辑每一个配置文件,修改端口号、保持密码相同,取消外网访问设置,设置后台运行,设置日志

5、启动redis

6、通过GITHUB下载redis-stat开发包

7、下载下来的redis-stat只有一个指令,如果要想使用这个命令必须使用ruby进行命令的处理。

 

 

第五章 使用java操作Redis数据库

5.1连接Redis数据库

Ok

5.2Jedis数据操作

1.设置字符串数据

1、设置过期时间

3.操作Hash数据

4、操作List数据

 

5.3Jedis连接池

第六章 Redis主从模式

6.1主从模式概述

断电 机房网络故障 服务器崩溃,数据丢失

离线备份 

在线备份:在数据做出任何处理操作的时候都进行及时的备份

主从设计:

6.2.主从模式实现

 

1、如果要进行主从模式的匹配,主服务器上不需要做出任何的变化

2、所有的从服务器配置文件上必须要求明确的设计出对于的主服务器

配置主服务器的IP/端口号 设置主服务器的密码

3、启动所有的服务器

4、登录主服务器查看所有副本信息

5、操作主节点的数据

读写分离 便于备份

主从设计的优点:便于备份

主从设计的缺点:只能够做备份,当出现灾难的时候(主服务器挂了)不无法立即恢复,不能把从服务器当做主服务器用,服务暂停。

以上是关于Redis缓存数据库的主要内容,如果未能解决你的问题,请参考以下文章

Redis 缓存应用实战

Redis缓存雪崩就这么简单

用redis 做为数据缓存,怎么能把redis中的数据定时更新到mysql中

redis-- 缓存(redis作为缓存使用)

查看redis缓存某个key里面有多少数据

Redis缓存雪崩和缓存穿透缓存预热缓存降级