初识Redis

前言

Redis:非关系型数据库,缓存型数据库。

关系型数据库:

关系型是一个结构化的数据库,他的记录方式是行和列(列声明对象的,行记录对象的属性)   

表与表之间是有关联的,使用sql语句,来对指定的表,库,进行增删改查

在创建表时,我们是设计好了表的结构,按照表的结构来存储数据,数据与表结构不匹配,存储数据库,会失败

非关系型数据库:

nosql   not only sql

不需要定义库,也不需要定义表的结构,直接记录即可,而且每条记录都可以有不同的数据类型,字段(字段个数)Redis key:value 键值对形式存储,每个键之间没有直接关联,库与库之间互相独立

非关系型数据库和关系型数据库的区别:

  1. 数据的存储方式不同
  2. 扩展方式,性能上的提升,关系型数据库靠的是本机性能。非关系型数据库,可以横向扩展,加入节点服务器的方式提高性能
  3. 对事物的支持性,mysql支持事务,原子性,隔离性,一致性,持久性非关系型数据库Redis也支持事务,但是稳定性和处理能力都不如关系型数据库

非关系型数据库得主要场景:

  1. 操作的扩展性
  2. 海量的数据处理

Web2.0:核心,交互

纯动态网站的三高问题:

  1. 对数据库高并发读写的需求
  2. 对海量数据提高效率存储与访问的需求
  3. 对数据的高可扩展性与高可用性的需求

常见的缓存需求场景:

数据库缓存

Web页面缓存

CPU和硬盘之间的缓存

关系型数据库:

库-----表----------行, 列------------>存储数据

非关系型数数据库:

库------集合------>键值对

他不需要手动的创建库和集合

Redis是什么:

开源的,使用C语言编写的NQL数据库

Redis:基于内存运行的,支持持久化(数据恢复),采用的就是key-values(键值对)的存储形式,目前在分布式架构中是非常重要的一环

生产时常见的架构:

Redis的工作特点:

Redis服务器程序,是一个单进程模式,既一个主进程工作,也就是说在一台服务器上可以启动多个Redis(端口号不要冲突),Redis的实际处理速度是完全依靠主进程的执行效率,服务器只部署了一个Redis进程,多个客户端访问,可能会导致Redis处理能力下降

如果部署了多个Redis进程,虽然提高了Redis并发处理能力,但是会给服务器的CPU很大的压力

一台服务器,一般部署3个Redis进程(根据情况来看,高并发,要部署多个,一般的情况,单进程够用)

Redis的特点:

  1. 具有极高的读写速度,数据读取每秒110000次,写入数据每秒可以执行81000的写入
  2. 支持丰富的数据类型
  3. 支持持久化,平常的数据都是保存在内存中,持久化可以写入到磁盘中,既可以保存到本地,也可是实现备份
  4. 原子性。Reid所有的操作都是原子性
  5. 支持主从模式---MAster--slave模式

Redis快的原有是什么

  1. Redis是纯内存结构,避免了磁盘的i/o的耗时
  2. 核心模块是什么单进程,减少了线程切换和回收线程的时间
  3. I/o的多路复用机制,每一个执行线路都可以同时执行读和写,高并发的效率大大提高

*特殊说明*:Redis的读写仍然是单进程处理。

安装Redis

依赖环境:

yum install -y gcc gcc-c++ make

编译:

安装:

make PREFIX=/usr/local/redis install

./install_server.sh

/usr/local/redis/bin/redis-server

Selected config:

Port           : 6379 #默认侦听端口为6379

Config file    : /etc/redis/6379.conf #配置文件路径

Log file       : /var/log/redis_6379.log #日志文件路径

Data dir       : /var/lib/redis/6379 #数据文件路径

Executable     : /usr/local/redis/bin/redis-server #可执行文件路径

Cli Executable : /usr/local/bin/redis-cli #客户端命令工具

#把redis的可执行程序文件放入路径环境变量的目录中便于系统识别

ln -s /usr/local/redis/bin/* /usr/local/bin/

Redis的服务控制的命令:

/etc/init.d/redis_6379 stop start restart status

修改配置文件

vim /etc/redis/6379.conf

70行添加本地IP地址

137行

167行

重启

Redis的命令工具:

Redis-server:直接启动Redis,只能启动

Redis-benchmark:检测Redis在本机的运行效率

Reid-cil:命令行工具

Reid-check-aof:检测AOF文件是否正常

Redis-check-rdb:检测rdb文件是否正常

Redis-benchmark:是官方自带的 Redis 性能测试工具,可以有效的测试 Redis 服务的性能。

基本的测试语法:redis-benchmark [选项] [选项值]。

-h 指定服务器的主机名IP地址

-p 指定服务器的端口号

-c 指定并发连接数

-n 指定请求数

-q 强制退出

-d 数据包数

#向 IP 地址为 20.0.0.51、端口为 6379 的 Redis 服务器发送 100 个并发连接与 100000 个请求测试性能

redis-benchmark -h 20.0.0.51 -p 6379 -c 100 -n 100000

#测试存取大小为 100 字节的数据包的性能

redis-benchmark -h 20.0.0.51 -p 6379 -q -d 100

#测试本机上 Redis 服务在进行 set 与 lpush 操作时的性能

redis-benchmark -t set,lpush -n 100000 -q

Redis的数据类型:

  1. 如何进入Redis

redis-cli -h 20.0.0.52 -p 6379 即可登录本地,还可以远程登录

-h 指定IP地址

-p 指定端口号

-a 指定登录密码

redis-cli 直接使用,仅限于本地登录,远程登录还需指定IP地址

Redis 数据库常用命令

set:存放数据,命令格式为 set key value

get:获取数据,命令格式为 get key

# keys 命令可以取符合规则的键值列表,通常情况可以结合*、?等选项来使用。

127.0.0.1:6379> set k1 1

127.0.0.1:6379> set k2 2

127.0.0.1:6379> set k3 3

127.0.0.1:6379> set v1 4

127.0.0.1:6379> set v5 5

127.0.0.1:6379> set v22 5

127.0.0.1:6379> KEYS v* #查看当前数据库中以 v 开头的数据

127.0.0.1:6379> KEYS v? #查看当前数据库中以 v 开头后面包含任意一位的数据

127.0.0.1:6379> KEYS v?? #查看当前数据库中以 v 开头 v 开头后面包含任意两位的数据

# exists 命令可以判断键值是否存在。

127.0.0.1:6379> exists teacher #判断 teacher 键是否存在

(integer) 1 # 1 表示 teacher 键是存在

127.0.0.1:6379> exists tea

(integer) 0 # 0 表示 tea 键不存在

# del 命令可以删除当前数据库的指定 key。

127.0.0.1:6379> keys *

127.0.0.1:6379> del v5

127.0.0.1:6379> get v5

Redis的五大数据类型:

一.string(字符串):

也是Redis最基本的类型,最大能存储512MB的数据,可以存储任何数据,比方说数字,文字,图片,等等

PS:APPEND

APPEND key value追加键值,并返回追加后的长度(若键不存在,则相当于创建)

exists home             

#判断该键是否存在,存在返回1,否则返回0

append home "cat"     

#该键并不存在,因此append命令返回当前Value的长度

append home "dog"    

#该键已经存在,因此返回追加后Value的长度

get home               

#通过get命令获取该键,以判断append的结果

如和查看键值对的类型

type test

Append:APPEND key value追加键值,并返回追加后的长度(若键不存在,则相当于创建)

(若键不存在,则相当于创建)

补充:

INCR/DECR/INCRBY/DECRBY:

INCR key:key值递增加1(key值必须为整数)

DECR key:key值递减1(key值必须为整数)

Set 可以直接覆盖,自增1和自减1

指定增加和减少

(integer) -2 表示已过期

(integer) -1 表示永不过期

GETSET:

GETSET key value:获取key值并返回,同时给key设置新值

SETEX:

setex key seconds value:设置指定key的过期时间为seconds

#设置缓存过期时间,3600秒

EXPIRE mycount 3600

对已有键值对设置生命周期

EXPIRE wang 30

(integer) -2 表示已过期

(integer) -1 表示永不过期

SETNX key value:不存在键的话执行set操作,存在的话不执行

同时打印多个键值对

MSET/MGET/MSETNX:

MSET key value [key value …]:批量设置键-值对

MGET key [key …]:批量获取键值对

获取指定长度的字符

二.list数据类型

概述:列表的元素类型为string,按照插入顺序排序,在列表的头部或尾部添加元素

LPUSH key value [value …]在头部(左侧)依次插入列表元素

LPUSHX key value:键必须存在才能执行,在头部插入元素值并返回并返回列表元素数量

LRANGE key start stop:取从位置索引start到位置索引stop的所有元素(所以以0开始)

创建

查看(倒序)

#取从位置0开始到位置2结束的3个元素。

#取链表中的全部元素,其中0表示第一个元素,-1表示最后一一个元素。

指定查看

正续查看

RPUSH wang4  1 2 3 4 5  #正向排列

查看

指定查看

插入数据,不同的插入方法对应不同的

删除lpop#移除并返回mykey键的第一个元素,即从右往左第一个

获取表的元素LLEN

指定索引下标替换LSET

根据值指定位置在前面添加数据

三.Hash类型(散列类型)

Hash类型用于存储对象,采用hash格式来进行操作,hash格式占用的磁盘空间少,而且一个hash可以存储4294967295个键值对

创建

#给键值为myhash的键设置字段为field1,值为zhang。

 #获取键值为myhash,字段为field1的值。

#myhash键中不存在field2字段,因此返回nil.

查看

如何删除元素

查询全部

#hkeys命令仅获取myhash键中所有字段的名字

 #hvals命令仅获取myhash键中所有字段的值。

删除

四、set数据类型(无序集合)

Set数据类型(无序集合)元素的类型也是string,元素是唯一的,不允许重复,多个集合可以进行并集,交集和差集运算,set当中的元素类型是唯一的,可以跟踪一些唯一性的数据,访问微博的用户名,只要把对应名称Redis set集合可以自动保存唯一性,方便下一次访问

清除所有库的所有内容

Flushall(慎用)

创建SADD wang a a c

查看SMEMBERS wang

#获取Set集合中元素的数量

Scard

查看键值,不允许有重复数据

随机移除

SPOP

指定移除

SERM

smove命令

五、Sorted Set数据类型 (zset、有序集合)

有序集合(zset):有序集合,元素类型也是string,元素唯一,不能重复

每个元素都会关联一个double(小数点)的分数(score,表示权重),可以通过权重的大小。进行排序,元素的权重可以相同

用于一些在线积分的排行榜,可以实时更新用户的分数,可以使用zrange命令回去积分top10的用户,zrank命令通过username来获取用户的排名信息

权重是1,元素是one,权重可以重复,元素不可用重复

创建ZADD

打印所有元素ZRANGE wang 0 -1 withscores

怎么获取位置索引

#获取成员one在Sorted-Set中的位置索引值。0表示第一个位置。

#查看上--条命令是否删除成功

ZCOUNT myzset 1 4

表示权重的范围:1<=score<=4

删除

查看删除之后的结果

查看权重

Set和hset 创建普通类型和hash类型,一般情况下,如无特殊需求,普通的创建方式即可

对一个键进行多字段存储,节省内存,使用hash方式,工作当中set足够

补充:

如何set重命名

如和查看当前库键的数量

Redis的库,库都是创建好的库,16个库

数字排名:0-15 每个数据库之间互相独立,互不干扰

如何切换库

如何把当前库的内容,移到其他库

回到默认库

如何给库创建密码

可以进Redis,但是进不了库

如何进库:

在内申明

在外声明

删除库

总结:

Redis的特点:读写速度快

数据类型:

  1. String
  2. List
  3. Hash对一个键进行多字段操作,要用hash,节省内存空间
  4. 无序集合set  元素不能重复 可以用来定义唯一值
  5. 有序集合zset 元素不能重复,权重可以相同,可以用来排名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值