Redis安装与数据类型
数据类型分类
存储数据类型分类
- 结构化数据:可以用二维表格形式表述这个数据
- 非结构化数据:不方便以二维表格形式表述的数据类型
根据不同种存储数据类型分类分成两种不同类型的数据库
- sql结构化数据库
里面存储的数据类型是结构化数据。(别称关系型数据库)
一个结构化数据库,创建在关系模型基础上
一般面向于记录
包括Orcale、MySQL、SQL Server、 Microsoft Access、DB2等 - nosql非结构化数据库
里面存储的数据类型是非结构化数据。(别称非关系型数据库)
除了主流的关系型数据库外的数据库,都是非关系型数据库
包括Redis、MongBD、Hbase、CouhDB
非关系新数据库产生背景
High performance 对数据库高并发读写需求
Huge Storage对海量数据高效存储与访问需求
High Scalability对数据库高可扩展性与高可用性需求
Redis简介
Redis基于内存运行并支持持久化
采用key-value(键值对)的存储形式
优点
具有极高的数据读写速度
支持丰富的数据类型
支持数据的持久化
原子性
支持数据备份
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
Redis与Memcached差别
Memcached Redis
类型 Key-value数据库 Key-value数据库
过期策略 支持 支持
数据类型 单一数据类型 五大数据类型
持久化 不支持 支持
主从复制 不支持 支持
虚拟内存 不支持 支持
Redis安装
tar xf redis-5.0.4.tar.gz
cd redis-5.0.4/
make
make PREFIX=/usr/local/redis install
ln -s /usr/local/redis/bin/* /usr/bin/
cd redis-5.0.4/utils/
./install_server.sh
/usr/local/redis/bin/redis-server
Port : 6379
Config file : /etc/redis/6379.conf 配 置 文 件 路 径 \color{red}{配置文件路径}配置文件路径
Log file : /var/log/redis_6379.log 日 志 文 件 路 径 \color{red}{日志文件路径}日志文件路径
Data dir : /var/lib/redis/6379 数 据 文 件 路 径 \color{red}{数据文件路径}数据文件路径
Executable : /usr/local/redis/bin/redis-server 可 执 行 文 件 路 径 \color{red}{可执行文件路径}可执行文件路径
Cli Executable : /usr/local/bin/redis-cli 客 户 端 命 令 工 具 \color{red}{客户端命令工具}客户端命令工具
Redis命令
[root@server6 ~]# /etc/init.d/redis_6379 stop关 闭 \color{red}{关闭}关闭
Stopping …
Waiting for Redis to shutdown …
Redis stopped
[root@server6 ~]# /etc/init.d/redis_6379 start开 启 \color{red}{开启}开启
Starting Redis server…
[root@server6 ~]# /etc/init.d/redis_6379 restart重 启 \color{red}{重启}重启
Stopping …
Waiting for Redis to shutdown …
Redis stopped
Starting Redis server…
[root@server6 ~]# /etc/init.d/redis_6379 status查 看 状 态 \color{red}{查看状态}查看状态
Redis is running (62607)
安装完成
可通过Redis的服务控制脚本/etc/init.d/redis_6379来对Redis服务进行控制,如停止Redis服务,启动Redis服务,重启Redis服务,查看Redis运行状态
netstat -anpt | grep redis 查看端口
/etc/init.d/redis_6379 stop 停止Redis服务
/etc/init.d/redis_6379 start 启动Redis服务
netstat -anpt | grep redis
redis-cli命令行工具
Redis数据库系统也是一个典型的C/S(客户端/服务器端)架构的应用,要服务Redis数据库需要使用
redis-cli 命令行工具
Redis 数据库系统也是一个典型的C/S(客户端/服务器端)架构的应用,要访问Redis数据库需要使用专门的客户端软件。Redis服务的客户端软件就是其自带的redis-cli命令行工具。使用redis-cli连接指定数据库,连接成功过后会进入提示符为“远程主机IP地址: 端口号>”的数据库操作环境。用户可以输入各种操作语句对数据库进行管理。如执行ping命令可以检测redis服务是否启动。
在进行数据库连接操作时,可以通过选项来指定远程主机上的Redis数据库,
命令语法
redis-cli -h host -p port -a password
其中, -h指定远程主机、 -p指定Redis服务的端口号、-a 指定密码。若不添加任何选项表示,连接本机上的 Redis数据库;若未设置数据库密码可以省略-a选项。
编辑配置文件
[root@server1 ~]# vi /etc/redis/6379.conf
[root@server1 ~]# /etc/init.d/redis_6379 stop 停止Redis服务
[root@server1 ~]# /etc/init.d/redis_6379 start 启动Redis服务
[root@server1 ~]# redis-cli -h 20.0.0.11 -p 6379 连接redis数据库
添加
bind 20.0.0.11 127.0.0.1
默认只连接127.0.0.1,允许接收本机地址,绑定地址
连接上Redis数据库进行五种类型的服务配置操作
应用配置五种数据类型
String(字符串)
string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。
string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。
[root@server1 ~]# redis-cli -h 20.0.0.11 -p 6379
20.0.0.11:6379> set a 6 设置a的值为6
OK
20.0.0.11:6379> get a 获取a值 输出返回13
"6"
20.0.0.11:6379> type a 查看a的状态类型
string
20.0.0.11:6379> incr a 自增长 +1 ,6+1=7
(integer) 7 integer:整数
20.0.0.11:6379> get a 获取a值的为7
"7"
20.0.0.11:6379> decr a 自减 -1 7=6
(integer) 6
20.0.0.11:6379> get a
"6"
20.0.0.11:6379> incrby a 7 设置增值为7 6+7=13
(integer) 13
20.0.0.11:6379> decrby a 10 设置下降值为10 13-10=3
(integer) 3
Hash(哈希)
Redis hash 是一个键值(key=>value)对集合。
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
20.0.0.11:6379> Hset hash1 key1 a 设置字段key1为a
(integer) 1
20.0.0.11:6379> hset hash1 key1 aa 设置字段key1为aa覆盖
(integer) 0
20.0.0.11:6379> Hset hash1 key2 b 设置字段key2为b
(integer) 1
20.0.0.11:6379> Hset hash1 key3 c 设置字段key3为c
(integer) 1
20.0.0.11:6379> Hmget hash1 key1 key2 key3
1) “aa”
2) “b”
3) “c”
20.0.0.11:6379> Hset hash1 field1 a1 field2 b2 存入多个字段,分别为field1为a1,field2为a2
(integer) 2
20.0.0.11:6379> Hmget hash1 field1 field2
1) “a1”
2) “a2”
List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
实例:lpush:从左边推入值 lpop:从左边弹出值 rpush:从右边推入值 rpop:从右边弹出值 llen:查看某个list数据类型的长度
20.0.0.11:6379> lpush list1 1 左边输入第一位数字,数值为1
(integer) 1
20.0.0.11:6379> lpush list1 2
(integer) 2
20.0.0.11:6379> lpush list1 3
(integer) 3
20.0.0.11:6379> lpush list1 3 左边输入第4位数字,数值为3
(integer) 4
20.0.0.11:6379> lpush list1 4
(integer) 5
20.0.0.11:6379> lpop list1 左边输出左边排列第一位数字数值为4
"4"
20.0.0.11:6379> rpop list1 右边输出右边排列第一位数字数值为1
"1"
20.0.0.11:6379> llen list1 输出列表长度为3
(integer) 3
20.0.0.11:6379> lrange list1 0 4 列出所有list1中的值
1) "3"
2) "3"
3) "2"
Set(无序集合)
Redis 的 Set 是 string 类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
sadd 命令
添加一个 string 元素到 key 对应的 set 集合中,成功返回 1,如果元素已经在集合中返回 0。
sadd key member
scard:查看set数据中存在的元素个数
sismember:判断set数据中是否存在某个元素
srem:删除某个set数据中的元素
20.0.0.11:6379> sadd set1 10 添加键值10,10未存在,添加成功输出返回1
(integer) 1
20.0.0.11:6379> sadd set1 20 添加键值20,20未存在,添加成功输出返回1
(integer) 1
20.0.0.11:6379> sadd set1 20 添加键值20,20已存在,添加失败输出返回0
(integer) 0
20.0.0.11:6379> sadd set1 30
(integer) 1
20.0.0.11:6379> scard set1 查看set数据中的键值个数为3个
(integer) 3
20.0.0.11:6379> sismember set1 40
(integer) 0
判断键值40是否存在与set数据中,不存在输出返回0
20.0.0.11:6379> sismember set1 10
(integer) 1
判断键值10是否存在与set数据中,存在输出返回1
20.0.0.11:6379> sismember set1 20
(integer) 1
20.0.0.11:6379> sismember set1 30
(integer) 1
20.0.0.11:6379> srem set1 10 删除键值10,成功输出返回1
(integer) 1
20.0.0.11:6379> sismember set1 10
(integer) 0
判断键值10是否存在与set数据中,不存在输出返回0
zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
zadd 命令
添加元素到集合,元素在集合中存在则更新对应score
使用方法:zadd key score member
zcard:查询
zrang:数据排序
20.0.0.10:6379> zadd zset1 1 val1 添加键值,分数为1,成员val1
(integer) 1
20.0.0.10:6379> zadd zset1 3 val2 添加键值,分数为3,成员val2
(integer) 1
20.0.0.10:6379> zadd zset1 2.4 val3
(integer) 1
20.0.0.10:6379> zadd zset1 7 val4
(integer) 1
20.0.0.10:6379> zadd zset1 4 val5
(integer) 1
20.0.0.10:6379> zadd zset1 1.3 val6
(integer) 1
20.0.0.10:6379> zadd zset1 1.3 val66
(integer) 1
20.0.0.10:6379> zrangebyscore zset1 0 10 只显示成员的排序
1) "val1"
2) "val6"
3) "val66"
4) "val3"
5) "val2"
6) "val5"
7) "val4"
20.0.0.10:6379> zrange zset1 0 10 withscores 连带分数进行排序
1) "val1"
2) "1"
3) "val6"
4) "1.3"
5) "val66"
6) "1.3"
7) "val3"
8) "2.3999999999999999"
9) "val2"
10) "3"
11) "val5"
12) "4"
13) "val4"
14) "7"