redis部署和基本操作

一、什么是redis

1.1、Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSIC编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:

(1)、基于内存运行,性能高效

(2)、支持分布式,理论上可以无限扩展

(3)、key-value存储系统

(4)、开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

1.2、相比于其他数据库类型,Redis具备的特点是:

(1)、C/S通讯模型

(2)、单进程单线程模型

(3)、丰富的数据类型

(4)、操作具有原子性

(5)、持久化

(6)、高并发读写

(7)、支持lua脚本

1.3、哪些大厂在使用Redis?

微博、阿里巴巴、百度、美团、搜狐等

二、Redis的数据类型及主要特性

Redis提供的数据类型主要分为5种自有类型和一种自定义类型,这5种自有类型包括:String类型、哈希类型、列表类型、集合类型和有序集合类型。

2.1、String类型:

它是一个二进制安全的字符串,意味着它不仅能够存储字符串、还能存储图片、视频等多种类型, 最大长度支持512M。

对每种数据类型,Redis都提供了丰富的操作命令,如:

(1)GET/MGET

(2)SET/SETEX/MSET/MSETNX

(3)INCR/DECR

(4)GETSET

(5)DEL

2.2、哈希类型

该类型是由field和关联的value组成的map。其中,field和value都是字符串类型的。Redis是一个键值的集合。每个hash可以存储2的32次方-1个键值对

Hash的操作命令如下:

(1)HGET/HMGET/HGETALL

(2)HSET/HMSET/HSETNX

(3)HEXISTS/HLEN

(4)HKEYS/HDEL

(5)HVALS

2.3、列表类型

该类型是一个插入顺序排序、可以重复的字符串元素集合, 基于双链表实现。可以添加一个元素到列表的头部(左边)或者尾部,列表最多可存储2的32次方-1个元素

List的操作命令如下:

(1)LPUSH/LPUSHX/LPOP/RPUSH/RPUSHX/RPOP/LINSERT/LSET

(2)LINDEX/LRANGE

(3)LLEN/LTRIM

2.4、集合类型 

Set类型是一种无顺序集合, 它和List类型最大的区别是:集合中的元素没有顺序, 且元素是唯一的。

Set类型的底层是通过哈希表实现的,其操作命令为:

(1)SADD/SPOP/SMOVE/SCARD

(2)SINTER/SDIFF/SDIFFSTORE/SUNION

Set类型主要应用于:在某些场景,如社交场景中,通过交集、并集和差集运算,通过Set类型可以非常方便地查找共同好友、共同关注和共同偏好等社交关系。

2.5、有序集合类型 

ZSet是一种有序集合类型,每个元素都会关联一个double类型的分数权值,通过这个权值来为集合中的成员进行从小到大的排序。与Set类型一样,其底层也是通过哈希表实现的。

ZSet命令:

(1)ZADD/ZPOP/ZMOVE/ZCARD/ZCOUNT

(2)ZINTER/ZDIFF/ZDIFFSTORE/ZUNION

 

三、为什么使用 Redis?

3.1、Redis 是开源的内存中的数据结构存储系统,它可以用作数据库、数据缓存和消息中间件。

3.2它支持多种类型的数据结构,如 字符串strings, 散列 hashes, 列表 lists, 集合 sets, 有序集合 sorted sets 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。

3.3、Redis 还内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)

3.4、支持数据的备份,即 master-slave 模式的数据备份。

3.5、运行时数据和状态都保存在内存中,支持数据的持久化。

可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用等等。

四、Redis在项目中的应用场景

4.1、缓存数据

最常用,对经常需要查询且变动不是很频繁的数据 常称作热点数据。

4.2、消息队列

相当于消息订阅系统,比如ActiveMQ、RocketMQ。如果对数据有较高一致性要求时,还是建议使用MQ。

4.3、计数器

比如统计点击率、点赞率,Redis具有原子性,可以避免并发问题。

4.4、电商网站信息

大型电商平台初始化页面数据的缓存。比如去哪儿网购买机票的时候首页的价格和你点进去的价格会有差异。

4.5、热点数据

比如新闻网站实时热点、微博热搜等,需要频繁更新。总数据量比较大的时候直接从数据库查询会影响性能。

五、Redis配置文件

5.1、配置参数(/etc/redis/6379.conf)

①bind:监听的主机地址

②port:端口

③daemonize yes:启用守护进程

④pidfile:指定PID文件

⑤loglevel notice:日志级别

⑥logfile:指定日志文件

5.2、key相关命令

①keys:获取符合规则的键值列表

②exists:判断键值是否存在

③del:删除当前数据库的指定key

④type:获取key对应的value值类型

⑤rename(覆盖)/renamenx(不覆盖):重命名

⑥dbsize:查看当前数据库中key的数目

5.3、redis-benchmark测试工具

① -h:指定服务器的主机名

② -p:指定服务器端口

③ -c:指定并发连接数

④ -n:指定请求数

⑤ -d:以字节的形式指定SET/GET值的数据大小

⑥ -q:强制退出Redis,仅显示query/sec值

 

六、Redis部署

6.1、解决安装环境,解压安装包,make编译

yum install -y gcc gcc-c++ make

cd /opt

tar zxvf redis-5.0.7.tar.gz -C

cd /opt/redis-5.0.7/

make

make PREFIX=/usr/local/redis/ install

6.2、创建软连接

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

6.3、设置Redis配置文件

 

 

6.4、查看服务器状态,服务已开启

[root@server1 utils]# netstat -anpt | grep 6379

tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      59173/redis-server 

 

6.5、开启服务,登录数据库

[root@server1 utils]# service redis_6379 restart

Stopping ...

Waiting for Redis to shutdown ...

Redis stopped

Starting Redis server...

[root@server1 utils]# redis-cli -h 127.0.0.1 -p 6379

127.0.0.1:6379>

 

 

6.6、可以绑定本机IP地址用于登录数据库

进入Redis数据库

 

 

行尾输入bind绑定本机IP地址

 

 

重启服务,登录数据库

//重启服务

service redis_6379 restart    

Stopping ...

Redis stopped

Starting Redis server...

 

//登录数据库

[root@localhost ~]# redis-cli -h 20.0.0.10 -p 6379    //-h指定地址,-p指定端口

20.0.0.10:6379>

数据库解决中文乱码问题—raw

[root@server1 src]# redis-cli -h 20.0.0.10 -p 6379 --raw

 

 

6.7、数据类型

string(字符串)是redis的最基本类型

 

 

删除

 

 

Hash(哈希字典),适合存储对象

String类型有局限性:假设有User对象以JSON序列化的形式存储到Redis中,User对象有id,username、password、age、name等属性。

存储的过程如下: User对象 =》json(string) =》 redis

如果在业务上只是更新age属性,其他的属性并不做更新我应该怎么做呢? 如果仍然采用上边的方法在传输、处理时会造成资源浪费,而hash可以很好的解决这个问题。

User “{“username”:”gyf”,”age”:”80”}”

 

 

 

List列表

最先填入的数据排在最后,最后填入的数据排在第一

列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段

 

 

Set类型(无序且唯一)

集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等,由于集合类型的Redis内部是使用值为空的散列表实现,所有这些操作的时间复杂度都为0(1)。

增加/删除元素

 

 

获得集合中的所有元素

 

 

判断元素是否在集合中

 

 

Zset(有序集合)

 

posted @ 2020-11-12 16:18  escape丶丶  阅读(1269)  评论(0)    收藏  举报