数据库之Redis

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

数据库之Redis

1、NoSQL的简介

NOSQL(NoSQL=Not OnlySOL)意为反 SOL 运动是一项全新的数据库革命性运动2000 年的就有人提出发展至 2009 年趋势越发高涨。它是指运用非关系型的数据存储相对于铺天盖地的;关系型数据库运用这一概念无疑是一种全新的思维的注入。

随着互联网 web2.0 网站的兴起传统的关系数据库在应付 web2.0 网站特别是超大规模和高并发的SNS 类型的 web2.0纯动态网站已经显得力不从心暴露了很多难以克服的问题而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSOL 数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战尤其是大数据应用难题。

分类举例应用场景数据模型优点
键值(key-valueTokyo/Cabinet/Tyrant,Redis. VoldemortOracle BDB内容缓存主要用于处理大量数据的高访问负载也用于一些日志系统等等。Key 指 向 Value的键值对通常用hash table 来实现查找速度快
列存储数据库Cassandra HBaseRiak分布式的文件系统以列簇式存储将同一列数据存在一起查找速度快可扩展性强更容易进行分布式扩展
文档型数据库CouchDB.MongoDbWeb 应用(与Key-Value 类似Value 是结构化的不同的是数据库能够了解 Value 的内容)Key-Value 对应的键值对Value 为结构化数据数据结构要求不严格表结构可变不需要像关系型数据库一样需要预先定义表结织
图形(Graph)数据库Neo4J.InfoGridInfinite Graph社交网络推荐系统等。专注于构建关系图谱图结构利用图结构相关算法。比如最短路径寻址N 度关系查找等

NoSQL的特性

NoSOL 是 key-value 形式存储和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求比如说遵循 SOL标准、ACID 属性、表结构等等。

NoSQL的特点

  • 非关系型的、分布式、开源的、水平可扩展的
  • 处理超大量数据
  • 击碎了性能瓶颈
  • 对数据高并发读写
  • 对海量数据的高效率存储和访问
  • 对数据的高扩展性和高可用性

2、redis的简介与安装

redis简介

Redis 是一个开源的,先进的 key-value 存储。它通常被称为数据结构服务器,因为键可以包含 string(字符串) 、hash (哈希) 、list (链表) 、set (集合) 和set (sorted-set–有序集合)。这些数据类型都支持 push/pop、add/remove 及取交集并集和差集及更丰富的操作。

Redis 和Memcached 类似它支持存储的 value 类型相对更多与 memcached 一样为了保证效率数据都是缓存在内存中区别是 Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件并且在此基础上实现了 master-slave(主从)同步。

redis的安装

官网地址https://redis.io/

Redis服务器源码安装redis过程

#关闭防火墙与selinux
[root@Node3 ~]# systemctl stop firewalld
[root@Node3 ~]# systemctl disable firewalld

#准备好源码包
[root@Node3 ~]# ls redis-2.8.6.tar.gz 
redis-2.8.6.tar.gz

#安装好gcc和gcc-c++
[root@Node3 ~]# yum -y install gcc gcc-c++

#解压包
[root@Node3 ~]# tar -xf redis-2.8.6.tar.gz 
[root@Redis-Server redis-2.8.6]# 

#预编译、编译、安装
	#指定一下安装的位置否则redis会直接安装到/usr/local/bin目录下
[root@Redis-Server redis-2.8.6]# make PREFIX=/usr/local/redis install

#创建一个存放配置文件的目录
[root@Redis-Server redis-2.8.6]# mkdir /usr/local/redis/etc
	#然后把配置文件复制过去-->注意这里的路径就是源码包里面的redis.conf
[root@Redis-Server redis-2.8.6]# cp redis.conf  /usr/local/redis/etc/

#修改配置文件-->使redis可以后台启动
[root@Redis-Server redis]# cd /usr/local/redis/
[root@Redis-Server redis]# vim etc/redis.conf 
..........
 37 daemonize yes			#后台启动

#然后启动redis--->redis的启动需要指定配置文件--否则就会产生一些告警
[root@Redis-Server redis]# /usr/local/redis/bin/redis-server  /usr/local/redis/etc/redis.conf 

#做一个软链接-->方便后续命令的tab键使用
[root@Redis-Server redis]# ln -s /usr/local/redis/bin/* /usr/bin/

redis的连接

/usr/local/redis/binn/redis-cli 连接的命令

  • -h IP指定连接的redis服务器
  • -p 6379指定redis服务器的端口
  • -a 密码使用密码登陆
  • -n 数据库号指定连接哪一个数据库
  • –rawredis支持存储中文
#连接
[root@Redis-Server redis]# /usr/local/redis/bin/redis-cli -h 192.168.75.133
192.168.75.133:6379> 

#退出连接
[root@Redis-Server redis]# /usr/local/redis/bin/redis-cli shutdown

[root@Redis-Server redis]#pkill -9 redis

3、redis常用命令演示

string类型以及操作

string是最简单的类型一个 key 对应一个 valuestring 类型是二进制安全的。redis 的 string 可以包含任何数据。

#设置key对应的值是string
127.0.0.1:6379> set name liangjiawei
OK

#获取键值
127.0.0.1:6379> get name
"liangjiawei"

#设置键值的时候是否存在-->setnx
127.0.0.1:6379> SETNX name liangjiawei
(integer) 0
127.0.0.1:6379> get name
"zhangsan"

#同时设置/获取多个-->mset
127.0.0.1:6379> mset age 18 sex man
OK
127.0.0.1:6379> mget name age sex
1) "zhangsan"
2) "18"
3) "man"


#做加加值-->指定值的操作-->incrby
127.0.0.1:6379> INCRBY age 5
(integer) 23

#删除一个键值对
127.0.0.1:6379> del age
(integer) 1
127.0.0.1:6379> get age
(nil)

hash类型以及操作

Redis hash 是一个 string 类型的 fied (字段) 和 value 的映射表它的添加、删除操作都是 0(1)平均: hash 特别适合用于存储对象相较于将对象的每个字段存成单个 string类型将一个对象存储在 hash 类型中会占用更少的内存并且可以更方便的存取整个对象。

#创建一个a1的表格
127.0.0.1:6379> hset a1 name liangjiawei
(integer) 1
127.0.0.1:6379> hset a1 age 19
(integer) 1
127.0.0.1:6379> hset a1 sex man
(integer) 1

#然后再创建另外一个a2表格
127.0.0.1:6379> hset a2 name zhangsan
(integer) 1
127.0.0.1:6379> hset a2 age 22
(integer) 1
#获取数值--hget
127.0.0.1:6379> hget a1 age
"19"

#同时获取多个数值
127.0.0.1:6379> HGETALL a1
1) "name"
2) "liangjiawei"
3) "age"
4) "19"
5) "sex"
6) "man"

list类型以及操作

list 是一个链表结构主要功能是 push、pop、获取一个范围内的所有值等等操作中 key 理解为链表的名字。Redis 的 list 类型其实就是一个每个子元素都是 string 类型的双向链表。我们可以通过push、pop 操作从链表的头部或尾部添加删除元素。

#给zhangsan的链表结构添加元素
127.0.0.1:6379> LPUSH zhangsan 18
(integer) 1
127.0.0.1:6379> LPUSH zhangsan man
(integer) 2

#取值-->取zhangsan表格的所有数值
127.0.0.1:6379> LRANGE zhangsan 0 -1
1) "man"
2) "18"

set类型以及操作

set 是集合他是 string 类型的无序集合。Set 是通过 hashtable 实现的对集 、交集、差集。通过这些操作我们可以实现社交网站中的好友推荐和 blog 的 tag 功能。集合不允许有重复值。

#添加一个或者多个元素到集合当中
127.0.0.1:6379> sadd mset 1 2 3 4 5 6
(integer) 6

#查看
127.0.0.1:6379> SMEMBERS mset
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"

#删除
127.0.0.1:6379> SREM maset 2 4 6
(integer) 0

#随机删除
127.0.0.1:6379> SPOP mset
"3"

#scard: 张取集合里面的元素人数
#sdiff: 返回集合 1 与集合 2 的差集。以集合 1 为主

zset类型以及操作

zset 是 set 的一个升级版本它在 set 的基础上增加了一个顺序属性这一属性在添加修改元素的时候可以指定每次指定后zset 会自动重新按新的值调整顺序。可以理解为有两列的 mysql 表一列存的 value一列存的顺序。操作中 key 理解为 zset 的名字。

有序集合的排序方式:

  • 先按照预设设置好的分数进行先后排序
  • 相同分数的值按照值的ASCII码表的顺序排序
#插入数值
127.0.0.1:6379> ZADD zset 2 zhangsan 1 lisi 1 wangwu
(integer) 3

#查看数值排序
127.0.0.1:6379> ZRANGE zset 0 -1
1) "lisi"
2) "wangwu"
3) "zhangsan"

#删除
127.0.0.1:6379> ZREM zset zhangsan
(integer) 1

其他相关命令

#keys: 按照键名查找指定的键。支持通配符(* ?等)
127.0.0.1:6379> keys *set
1) "zset"
2) "mset"

#exists:确认一个键是否存在 (1 表示存在)
127.0.0.1:6379> EXISTS name
(integer) 1

#del: 删除个键(通用)
127.0.0.1:6379> DEL name
(integer) 1

#cxpire: 设置一个键(已存在》 的过期时间如果键已经过期将会被自动删除

#ttl: 以秒为单位返回指定键的剩余有效时间

#select: 选择一个数据库默认连接的数据库是 0可以支持共 16 个数据库。在配置文件中通过databases 16 关键字定义。
127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> 

#move: 将当前数据库的键移动到指定的数据库中
127.0.0.1:6379> MOVE mset 1
(integer) 1

#type: 返回键的类型
127.0.0.1:6379> type zset
zset

#dbsize: 返回当前库中键的数量(所有类型)
127.0.0.1:6379> DBSIZE 
(integer) 5

#info: 获取服务器的详细信息
127.0.0.1:6379> INFO

#flushdb;删除当前数据库中所有的数据
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "mset"
127.0.0.1:6379[1]> FLUSHDB 
OK
127.0.0.1:6379[1]> keys *
(empty list or set)

#flushall:删除所有数据库中的所有数据
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> FLUSHALL
OK
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: redis数据库