腾讯云配置(三) —— Redis 的安装与使用

一、从NoSQL 说起

NoSQL是Not only SQL的缩写,大意为“不只是SQL”,说明这项技术是传统关系型数据库的补充而非替代。在整个NoSQL技术栈中MemCache、Redis、MongoDB被称为NoSQL三剑客。那么时代为什么需要NoSQL数据库呢?我们来做个对比:

关系型数据库 NoSQL数据库
数据存储位置 硬盘 内存
数据结构 高度组织化结构化数据 没有预定义的模式
数据操作方式 SQL 所有数据都是键值对,没有声明性查询语言
事务控制 严格的基础事务ACID原则 CAP定理

所以NoSQL数据库的最大优势体现为:高性能、高可用性和可伸缩性。

二、Redis 简介

Redis英文官网介绍:

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs and geospatial indexes with radius queries. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

Redis中文官网介绍:

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)

三、Redis 的安装

1、下载 redis 安装包

wget http://download.redis.io/releases/redis-4.0.9.tar.gz

解压 : tar -zxvf 文件名

2、安装C语言编译环境

[建议先拍快照]<br/>

安装环境 : yum install -y gcc-c++

3、修改安装位置

由redis-4.0.2解压目录下 的Makefile文件可知,真正用于配置安装路径的文件是

/src/Makefile

腾讯云配置(三) —— Redis 的安装与使用

[[email protected]_0_16_centos src]# find Makefile
Makefile
[[email protected]_0_16_centos src]# pwd
/opt/redis-4.0.9/src

vim redis解压目录/src/Makefile

修改安装路径

修改前,先进行备份,Makefile.bak 到当前目录

PREFIX?=/usr/local/redis

就Redis自身而言是不需要修改的,这里修改的目的是让Redis的运行程序不要和其他文件混杂在一起

腾讯云配置(三) —— Redis 的安装与使用

4、编译安装

①编译:进入Redis解压目录执行make命令<br/>

[建议先拍快照]<br/>

②安装:make install

5、查看redis可执行文件:

    INSTALL install
make[1]: Leaving directory `/opt/redis-4.0.9/src'
[[email protected]_0_16_centos redis-4.0.9]# cd /usr/local/redis/bin/
[[email protected]_0_16_centos bin]#

注意: 只有执行完 redis  的安装后才会有可执行文件。

6、启动 Redis 服务器

①默认启动

不能使用哦个redis-server来启动,Linux会认为是命令去执行,要使用./redis-server

初始化启动命令 : ./redis-server

停止redis服务器——使用客户端去关闭服务端

[[email protected]_0_16_centos bin]# ./redis-server 
18963:C 20 May 21:48:04.315 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
18963:C 20 May 21:48:04.315 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=18963, just started
18963:C 20 May 21:48:04.315 # Warning: no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 4.0.9 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 18963
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

18963:M 20 May 21:48:04.318 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
18963:M 20 May 21:48:04.318 # Server initialized
18963:M 20 May 21:48:04.318 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
18963:M 20 May 21:48:04.318 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
18963:M 20 May 21:48:04.318 * Ready to accept connections

停止 Redis 服务器

重新创建一个连接作为客户端,在客户端里进行端口号、PID的查询

`同时也是在客户端里进行服务器的关闭,有利于服务器数据的从容保存。`

[[email protected]_0_16_centos ~]# cd ../
[[email protected]_0_16_centos /]# /usr/local/redis/bin/redis-cli shutdown
18963:M 20 May 21:51:30.685 # User requested shutdown...
18963:M 20 May 21:51:30.685 * Saving the final RDB snapshot before exiting.
18963:M 20 May 21:51:30.698 * DB saved on disk
18963:M 20 May 21:51:30.698 # Redis is now ready to exit, bye bye...

② 定制配置启动

【1】准备配置文件

[[email protected]_0_16_centos bin]# cp /opt/redis-4.0.9/redis.conf /usr/local/redis/

【2】修改配置项

[[email protected]_0_16_centos bin]# vim /usr/local/redis/redis.conf 

例:

/daemonize 去查看</br>

将后面的 no 换成 yes,其他两项一样配置

在/usr/local/redis/目录下的Makefile

配置项名称 作用 取值
daemonize 控制是否以守护进程形式运行Redis服务器 yes
logfile 指定日志文件位置 "/usr/local/redis/logs/redis.log"
dir Redis工作目录 /usr/local/redis/data

注意:/redis/logs目录需要我们提前创建好,每次配置好一项,都要进行保存。

【3】让Redis 根据指定的配置文件启动

格式:

redis-server文件路径 redis.conf文件路径

举例:

[[email protected]_0_16_centos redis]# /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf

7、客户端登录

[[email protected]_0_16_centos redis]# /usr/local/redis/bin/redis-cli 
127.0.0.1:6379> 

当前redis 的  IP : 127.0.0.1  、 PORT为 6379

127.0.0.1:6379> ping
PONG
127.0.0.1:6379> exit

四、Redis 五种常用数据结构

1、总体结构

 KEY  -     VALUE

  •    String——字符串
  •    Hash——字典
  •    List——列表
  •    Set——集合
  •    Sorted Set——有序集合

Redis中的数据,总体上是键值对,不同数据类型指的是键值对中值的类型。

2、String类型

Redis中最基本的类型,它是key对应的一个单一值。二进制安全,不必担心由于编码等问题导致二进制数据变化。所以redis的string可以包含任何数据,比如jpg图片或者序列化的对象。Redis中一个字符串值的最大容量是512M。

3、list类型

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。说明它的底层是基于链表实现的,所以它操作时头尾效率高,中间效率低。

腾讯云配置(三) —— Redis 的安装与使用

4、set 类型

Redis 的set 是 String 类型的无序集合。 它是基于哈希表实现的。

5、hash 类型

本身就是一个键值对集合。可以当做Java中的Map<String,Object>对待。

6、zset 类型

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

五、Redis 命令行操作

1、基本操作

① 切换数据库

        Redis默认有16个数据库。
	115 # Set the number of databases. The default database is DB 0, you can select
	116 # a different one on a per-connection basis using SELECT <dbid> where
	117 # dbid is a number between 0 and 'databases'-1
	118 databases 16
	使用select进行切换,数据库索引从0开始
	127.0.0.1:6379> select 2
	OK
	127.0.0.1:6379[2]> select 0
	OK
	127.0.0.1:6379> 

② 查看数据库长度

    127.0.0.1:6379> dbsize
    (integer) 3

2、KEY操作

●KEYS PATTERN
●TYPE KEY
	返回KEY对应的值的类型
●MOVE KEY DB
	把一组键值对数据移动到另一个数据库中
●DEL KEY [KEY ...]
	根据KEY进行删除,至少要指定一个KEY
●EXISTS KEY
	检查指定的KEY是否存在。指定一个KEY时,存在返回1,不存在返回0。可以指定多个,返回存在的KEY的数量。
●RANDOMKEY
	在现有的KEY中随机返回一个
●RENAME KEY NEWKEY
	重命名一个KEY,NEWKEY不管是否是已经存在的都会执行,如果NEWKEY已经存在则会被覆盖。
●RENAMENX KEY NEWKEY
	只有在NEWKEY不存在时能够执行成功,否则失败
●TIME
	返回当前UNIX时间戳
●TTL KEY
	以秒为单位查看KEY还能存在多长时间
●PTTL KEY
	以毫秒为单位查看KEY还能存在多长时间
●EXPIRE KEY SECONDS
	给一个KEY设置在SECONDS秒后过期,过期会被Redis移除。
●EXPIREAT KEY TIMESTAMP
	设置一个KEY在TIMESTAMP指定的时间过期
●PEXPIRE KEY MILLISECONDS
	以毫秒为单位指定过期时间
●PEXPIREAT KEY MILLISECONDS-TIMESTAMP
	以毫秒为单位指定过期的时间戳
●PERSIST KEY
	移除过期时间,变成永久key

3、String操作

●SET KEY VALUE [EX SECONDS] [PX MILLISECONDS] [NX|XX]
	给KEY设置一个string类型的值。
	EX参数用于设置存活的秒数。
	PX参数用于设置存活的毫秒数。
	NX参数表示当前命令中指定的KEY不存在才行。
	XX参数表示当前命令中指定的KEY存在才行。
●GET KEY
	根据key得到值,只能用于string类型。
●APPEND KEY VALUE
	把指定的value追加到KEY对应的原来的值后面,返回值是追加后字符串长度
●STRLEN KEY
	直接返回字符串长度
●INCR KEY
	自增1
●DECR KEY
	自减1
●INCRBY KEY INCREMENT
	原值+INCREMENT
●DECRBY KEY DECREMENT
	原值-DECREMENT
●GETRANGE KEY START END
	从字符串中取指定的一段
●SETRANGE KEY OFFSET VALUE
	从offset开始使用VALUE进行替换
●SETEX KEY SECONDS VALUE
	设置KEY,VALUE时指定存在秒数
●SETNX KEY VALUE
	新建字符串类型的键值对
●MSET KEY VALUE [KEY VALUE ...]
	一次性设置一组多个键值对
●MGET KEY [KEY ...]
	一次性指定多个KEY,返回它们对应的值,没有值的KEY返回值是(nil)
●MSETNX KEY VALUE [KEY VALUE ...]
	一次性新建多个值
●GETSET KEY VALUE
	设置新值,同时能够将旧值返回

4、list 操作

●LPUSH key value [value ...]
●RPUSH key value [value ...]
●LRANGE key start stop
	根据list集合的索引打印元素数据
	正着数:0,1,2,3,...
	倒着数:-1,-2,-3,...
●LLEN key
●LPOP key
	从左边弹出一个元素。
	弹出=返回+删除。
●RPOP key
	从右边弹出一个元素。
●RPOPLPUSH source destination
	从source中RPOP一个元素,LPUSH到destination中
●LINDEX key index
	根据索引从集合中取值
●LINSERT key BEFORE|AFTER pivot value
	在pivot指定的值前面或后面插入value
●LPUSHX key value
	只能针对存在的list执行LPUSH
●LREM key count value
	根据count指定的数量从key对应的list中删除value
●LSET key index value
	把指定索引位置的元素替换为另一个值
●LTRIM key start stop
	仅保留指定区间的数据,两边的数据被删除

5、set 操作

●SADD key member [member ...]  给指定的key添加 set集合元素
●SMEMBERS key   返回集合中的元素
●SCARD key
	返回集合中元素的数量
●SISMEMBER key member
	检查当前指定member是否是集合中的元素
●SREM key member [member ...]
	从集合中删除元素
●SINTER key [key ...]
	将指定的集合进行“交集”操作
	集合A:a,b,c
	集合B:b,c,d
	交集:b,c
●SINTERSTORE destination key [key ...]  
	取交集后存入destination
●SDIFF key [key ...]
	将指定的集合执行“差集”操作
	集合A:a,b,c
	集合B:b,c,d
	A对B执行diff:a
	相当于:A-交集部分
●SDIFFSTORE destination key [key ...]
●SUNION key [key ...]
	将指定的集合执行“并集”操作
	集合A:a,b,c
	集合B:b,c,d
	并集:a,b,c,d
●SUNIONSTORE destination key [key ...]
●SMOVE source destination member
	把member从source移动到destination
●SPOP key [count]
	从集合中随机弹出count个数量的元素,count不指定就弹出1个
●SRANDMEMBER key [count]
	从集合中随机返回count个数量的元素,count不指定就返回1个
●SSCAN key cursor [MATCH pattern] [COUNT count]
	基于游标的遍历
  • 执行交集、并集后分别保存到同一个key中的时候,后者会覆盖前者。

6、hash 操作

●HSET key field value  			    设置主集合的子集合的元素
●HGETALL key      					获取所有子集合的元素
●HGET key field   					获取单个子集合的元素
●HLEN key							返回主集合的元素数量
●HKEYS key							返回主集合的所有子集合的键
●HVALS key							返回所有子集合的值
●HEXISTS key field    			    检查当前集合中是否包含指定的子集合名 
●HDEL key field [field ...]			删除指定子集合
●HINCRBY key field increment        为指定的子集合值增加给定的值
●HMGET key field [field ...]		返回主集合的指定子集合的值
●HMSET key field value [field value ...]    为主集合的子集合赋值,子集合不存在会直接创建一个
●HSETNX key field value					当主集合的子集合不存在时创建子集合,并赋值!
●HSCAN key cursor [MATCH pattern] [COUNT count]

7、zset 操作

●ZADD key [NX|XX] [CH] [INCR] score member [score member ...]  
ZADD scoreset 20 yingyu 30 shuxue 22 shengwu 
●ZRANGE key start stop [WITHSCORES]   返回两个索引之间的set键
●ZCARD key   返回数量
●ZCOUNT key min max
	根据分数在min,max之间查找元素(返回的是set集合的值)
●ZSCORE key member       		根据指定的set键获取值,不存在的键返回nil
●ZINCRBY key increment member    将指定数字与set键的值做加法
●ZLEXCOUNT key min max			  ZLEXCOUNT STUDY [A [AA  获取两个指定区间的值
●ZRANGEBYLEX key min max [LIMIT offset count]
	按照字母顺序在区间内返回member
	min和max使用“[a”表示闭区间,使用“(a”表示开区间
	-表示负无穷
	+表示正无穷
●ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
	在分数的指定区间内返回数据   ZRANGEBYSCORE STUDY  33 130
●ZRANK key member
	先对分数进行升序排序,返回member的排名
●ZREM key member [member ...]  降序排名
●ZREMRANGEBYLEX key min max    
●ZREMRANGEBYRANK key start stop
●ZREMRANGEBYSCORE key min max
●ZREVRANGE key start stop [WITHSCORES]
●ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
●ZREVRANK key member
●ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
●ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
	把指定集合的member取交集,分数会相加
●ZSCAN key cursor [MATCH pattern] [COUNT count]