Redis数据库服务器

Redis数据库服务器

数据库的作用:数据仓库(存储大量的数据)

1.关系型数据库 :存储数据时采用表来存储数据,表和表之间是可以建立起关联关系,关系型数据库中除了表的概念外,还有视图,索引,触发器,存储过程,事务...... 关系型数据库在操作时,采用的时sql语句(命令)来操作数据库

2.非关系型数据库:存储在计算机的缓存中,没有表的概念,以 "键值对" 的方式来存储数据。

而非关系型数据库是没有sql语句的

key1 ------------------ value1

key2 ------------------ value2

key3 ------------------ value3

1.NoSQL引言

NoSQL(not only sql),意思为不仅仅是sql,泛指非关系型数据库。

2.为什么使用NoSQL?

    随着互联网网站的兴起,传统的关系型数据库在应付动态网站,特别是高并发和超大规模的纯动态网站已经显得力不从心,暴露了很多难以克服的困难。如 商城网站中对商品信息进行频繁查询、热搜商品排行的统计、订单超时问题以及微信的朋友圈(音频、视频的存储)等使用关系型数据库实现就会显得非常复杂。NoSQL这个技术门类的出现,更好的解决了这些问题。

3.NoSQL的四大分类

3.1 键值(key-value)存储数据库

# 1.说明:
- 这一类的数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据
​
# 2.特点
- 对于IT系统的优势在于简单、易部署
- 只对部分值进行更新时,效率低
​
# 3.相关产品
- Redis (内存中)
- SSDB  (硬盘中)

3.2列存储数据库

# 1.说明
- 这部分数据库通常是用来应对分布式存储的海量数据
​
# 2.特点
- 键仍然存在,但它的特点是指向了多个列。这些列由列家族来安排
​
# 3.相关产品
- HBase(用列来存储数据的)

3.3 文档型数据库

# 1.说明
- 它是一种跟键值存储类似的数据库,该数据的类型模型是模板化的文档,比如JSON 
​
# 2.特点
- 以文档形式存储
- 查询效率高
​
# 3.相关产品
- MongoDB

3.4 图形数据库

# 1.说明
-  以灵活的图形模型,并且能扩展到多个服务器上 (二进制数据的处理)
​
# 2.相关产品
- Neo4J、InfoGrid

4.NoSQL的应用场景

  • 数据模型比较简单

  • 需要灵活性更强的IT系统

  • 对数据库性能要求较高

  • 不需要数据的高度一致性(离不开关系型数据库)

5.什么是Redis?

  • 内存型非关系型数据库 (读写快)

6.Redis的特点

# 1.高性能的key-value内存型数据库
​
# 2.支持丰富的数据类型
string(字符串) ;2、hash(哈) ;3、list(列表) ;4、set(集合) ;5、5orted set (有序集
台)  zset类型
​
# 3.Redis支持持久化(可以将内存中的数据持久化到硬盘中)
​
# 4.Redis单线程,单进程(线程安全)

7.Redis 的安装

# 1.准备环境
- vmware workstation
- centos 7.+
​
# 2.下载源码包
    http://download.redis.io/releases/redis-4.0.10.tar.gz
    
# 3.将下载后的源码包上传到linux系统中并解压缩
​
# 4.安装gcc (用来编译C语言的依赖库)
- yum install -y gcc
​
# 5.进入到redis源码包的解压目录执行如下命令进行编译
- make MALLOC=libc
​
# 6.编译完成后执行如下命令安装Redis
- make install PREFIX=/usr/local/software/redis
​
# 7.进入Redis安装目录下bin目录中,启动Redis服务器(默认端口 6379)
- cd /usr/local/software/redis/bin
- ./redis-server   启动Redis服务器
​
# 8.客户端连接redis服务器端
- 克隆新会话,进入redis安装目录的bin目录中启动客户端并连接Redis服务器端
- cd /usr/local/software/redis/bin
- ./redis-cli -h 192.168.xxx.xx -p 6379
- 本地直接指向./redis-cli即可

8.Redis细节及key的指令操作

8.1Redis启动服务的细节

# 1.redis启动服务的细节
- 注意:直接使用./redis-server方式启动是redis-server这个shell脚本的默认配置

# 2.如何在启动Redis时使用默认配置文件启动?
- 注意:在安装完redis后安装目录中没有任何配置文件,需要在源码目录中复制配置文件redis.conf 到安装目录,步骤如下:

# 2-1:进入源码目录中,复制redis.conf文件到redis安装目录中
- cp redis.conf /usr/local/software/redis
# 2-2:进入redis安装目录中,查看配置文件
- cd /usr/local/software/redis
- ls
- 修改配置vim ./redis.conf    把6379修改为6380
# 2-3:进入安装目录的bin目录,加载配置启动
- ./redis-server ../redis.conf

- 克隆新会话
- ./redis-cli -p 6380 --raw

- 也可以
- ./redis-cli -h 192.168.xxx.xx -p 6380  --raw


[root@localhost bin]# vim /usr/lib/firewalld/services/ssh.xml
[root@localhost bin]# systemctl restart firewalld.service

8.2Redis中库的概念

# 1.redis中的库用来存放数据的基本单元,1个库中可以存放key-value的键值对

# 2.redis中每一个库都有一个唯一名称,编号从0开始,默认库的个数为16个,意味着库的名称是从0~15,默认使用的数据库是 0 

# 3.切换库
- select 库名称
- 例:select 1 

# 4.redis中清除库的指令
- 4.1:FLUSHDB  清除当前库中数据
- 4.2:FLUSHALL 清除所有库中的数据

8.3.Redis中key的指令操作

# 1.查询库中所有的key
  keys *
  
# 2.添加key
  set key value     			例:set name ztf
  
# 3.删除key
  del key1 key2 .. keyn      	 例:del name age birthday
  
# 4.判断指定的key是否存在,存在返回1,不存在则返回0
  exists key       				例:exists name
  
# 5.设置key的生存时间(s),设置成功返回1(秒为单位)
  expire key seconds             例:expire name 5
  
# 10.查看key的过期时间(超时时间)返回秒,返回-1为永久key,返回-2为不存在key,返回其他指超时时间
   ttl key 					    例:ttl name
 
# 9.设置key的生存时间(ms),设置成功返回1 (毫秒为单位)
   pexpire key milliseconds
   
# 11.查看key的过期时间(超时时间)返回毫秒
   pttl key 					例:pttl name
  
# 6.通配符
	*  匹配任意多个字符
	? 匹配一个字符               例:keys n?me
	[] 指定范围
	
# 7.移动key到指定的库
   move key database  			例:move name 2
  
# 8.获取中文数据时需要更改客户端连接方式,添加后缀 --raw 
   ./redis-cli -p 6379 --raw

# 12.随机返回一个key(幸运抽奖)
   RANDOMKEY
   
# 13.重命名key
   rename oldkey newkey   		 例:rename name names
  
# 14.查询key的类型,返回none代表查找的key不存在
	type key				    例:type names

9.Redis中的数据类型(5中数据类型)

redis中的数据类型和java中数据类型是完全不一样的(两码事)

redis中的数据类型类似于java中的集合框架

9.1 string类型(redis中最基本的数据类型)

# key - value  均为 string类型
# string类型常用指令
1.set:设置一个key/value
	例:set name ztf
2.get:根据key获取对应的value
	例:get name
3.mset:一次性可设置多个key/value
	例:mset name ztf age 18 height 1.75
4.mget:一次性可获取多个key的value
	例:mget name age height
5.getset:获取原始key的值,同时设置新值
	例:getset name ztf2
6.strlen:获取对应key存储的value的长度
	例:strlen name
7.append:为对应的key的value追加内容
	例:append name 22
8.getrange(索引0开始):截取value的内容   -1代表末尾
	例:getrange name 0 2
9.setex:添加数据并且设置key的有效期(以秒为单位)
	例:setex sex 10 boy
10.psetex:添加数据并且设置key的有效期(以秒为单位)(毫秒)
	例:psetex sex 10 boy
11.setnx原子操作:如果redis中存在key则不做任何操作,否则就增加数据
	例:setnx name zhangsan  
	NOTE:如果存在name这个key,则返回0,数据未发生改变,如果不存在name这个key,则做添加数据的操作
12.msetnx原子操作:如果redis中存在多个key则不做任何操作,否则就增加数据
	例:msetnx name zhangsan age 18
13.decr:对字符串是数值型的值依次减1
	例:decr age
14.decrby:根据提供的数据做相应的减法操作
	例:decrby age 10    依次减10
15.incr:对字符串是数值型的值依次加1
	例:incr age
16.incrby:根据提供的数据做相应的加法操作(整数)
	例:incrby age 2     依次加2
17.incrbyfloat:根据提供的数据做相应的加法操作(小数)
	例:incrbyfloat age 0.5

9.2 list类型

9.2.1 内存存储模型

# 相当于java中的list集合,元素有序,且可以重复
9.2.2 常用操作指令
# key:string  value:list
# list类型常用指令
1.lpush:创建一个列表并设置多个值(从左边添加值)
	例:lpush lists zhangsan lisi xiaoming
2.lrange:获取某一下标区间内的元素
	例:lrange lists 0 -1   获取lists中下标从0到末尾的值
3.llen:获取list列表的长度
	例:llen lists
4.rpush:创建一个列表并设置多个值(从右边添加值)
	例:rpush lists wangwu maliu
6.rpushx:给 “已创建的列表” 中添加值,如果列表不存在则返回0(列表中的key必须存在)
	例:rpushx ages 18
7.lpop:返回并且移除列表左边的第一个元素
	例:lpop lists
8.rpop:返回并且移除列表右边的第一个元素
	例:rpop lists
9.lset:根据指定的索引更改值,索引必须存在
	例:lset lists 3 wangerxiao
10.lindex:根据指定的索引获取对应的列表中的值
	例:lindex lists 3
11.lrem:移除列表中重复元素
	例:lrem lists 2 lisi
12.ltrim:保留列表中特定区间内的值(根据索引)
	例:ltrim lists 0 1
13.linsert:在某一元素之前或者之后插入新的元素
	例:linsert lists after xiaoming 666  在元素xiaoming后插入新的值666
	例:linsert lists before xiaoming 666 在元素xiaoming前插入新的值666

9.3 Set类型

9.3.1 内存存储模型

# 相当于java中的set集合,元素无序(无索引,无下标),且不可以重复

9.3.2 常用命令
# key:string  value:set
# set类型常用指令
1.sadd:为集合添加元素
	例:sadd sets zhangsan lisi wangwu maliu
2.smembers:查看集合中所有元素
	例:smembers sets
3.scard:查看集合中所有元素的个数
	例:scard sets
4.spop:随机返回集合中一个元素,并将该元素中集合中删除
	例:spop sets
5.smove:从一个集合向另一个集合移动元素
	例:
		sadd sets2 18 19 20      - 创建新的set集合
		smove sets sets2 lisi    - 将sets集合中的lisi移动到sets2中
6.srem:从一个set集合中删除指定的元素(可删除多个)
	例:srem sets lisi
7.sismember:判断集合中是否有指定的元素(包含返回1)
	例:sismember sets wangwu
8.srandmember:随机返回元素(可指定返回的元素个数)
	例:srandmember sets2
9.sinter:求多个集合的交集
	例:sinter sets sets2
10.sunion:求多个集合的并集
	例:sunion sets sets2

9.4 Zset类型

9.4.1 内存存储模型

 

# 元素无序,且不可重复,但是可根据一定的条件排序,每个值都带有一个 “分数”
9.4.2 常用命令
# key:string  value:Zset
# Zset类型常用指令
1.zadd:添加一个有序集合元素
	例:zadd names 1 zhangsan 2 lisi 3 wanger
	NOTE: 1  2  3 指每个值的分数,可随意自定义
2.zrange:返回一个范围内的元素
	例:zrange names 0 -1 withscores
	NOTE:0 -1 从开头到末尾 withscores 可查看分数
3.zcard:返回集合中元素的个数
	例:zcard names
4.zrangebyscore:按照分数查找一个指定范围内的元素
	例:zrangebyscore names 0 2 withscores
5.zrank:返回排名
	例:zrank names lisi
6.zrevrank:倒序排名
	例:zrevrank names wanger
7.zscore:显示某一元素的分数
	例:zscore names wanger
8.zrem:移除某一元素
	例:zrem names wanger

9.5 Hash类型

9.5.1 内存模型

 

# 类似于Java中的map类型,相当于map中又嵌套了一个map
# key是string类型  value是一个Map结构(key-value)
9.5.2 常用命令
# Hash类型常用指令
1.hset:设置一个键值对
	例:hset maps name ztf
	maps:redis中的键
	name键 ztf值:redis中键对应的值
2.hget:获得一个key对应的value
	例:hget maps name
3.hgetall:获得所有的键值对(Hash的遍历)
	例:hgetall maps
4.hdel:删除hash中的某一个键值对
	例:hdel hash name
5.hexists:判断hash中某一个key是否存在(存在返回1,不存在返回0)
	例:hexists hash age
6.hkeys:获取hash中所有的键
	例:hkeys hash
7.hvals:获取hash中所有的值
	例:hvals hash
8.hmset:设置多个键值
	例:hmset hash address bj height 1.75
9.hmget:获取多个key的value值
	例:hmget hash name age address
10.hsetnx:设置一个不存在的键的值,如果存在键则不做任何操作,否则就添加数据
	例:hsetnx hash name ztf
11.hincrby:给指定的值做加法运算
	例:hincrby hash age 1
12.hincrbyfloat:给指定的值做加法运算(增加浮点型数据)
	例:hincrbyfloat hash age 1.5

10. Redis开启远程连接

# NOTE:
	Redis服务器默认是没有开启远程连接的,也就是拒绝所有客户端工具访问。
# Redis 开启远程连接的步骤
	1.vim编辑Redis安装目录中 redis.conf 文件,找到 bind 127.0.0.1 修改为 0.0.0.0(允许一切客户端连接)
	2.修改完配置文件后一定要重启Redis服务器,重启时千万记得一定要加载配置文件启动,否则不生效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值