redis
1、redis简介
随着互联网+大数据时代的来临,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量。这个时候就需要一种能够快速存取数据的组件来缓解数据库服务I/O的压力,来解决系统性能上的瓶颈。
Redis 全称 Remote Dictionary Server(即远程字典服务),它是一个基于内存实现的键值型非关系(NoSQL)数据库,是由c语言编写的。常见的内存型数据库,除 Redis 之外,还有 Oracle Berkeley DB(甲骨文旗下的一款产品)、SQlite(轻量级内存数据库)、Memcache(键值型分布式缓存数据库)、Altibase(基于内存的高性能数据库)。
**官网:**redis.io **中文网:**www.redis.net.cn/
key-value结构存储:
redis特点
与其他内存型数据库相比,Redis 具有以下特点:
- Redis 不仅可以将数据完全保存在内存中,还可以通过磁盘实现数据的持久存储;
- Redis 支持丰富的数据类型,包括 string、list、set、zset、hash 等多种数据类型,因此它也被称为“数据结构服务器”;
- Redis 支持主从同步,即 master-slave 主从复制模式。数据可以从主服务器向任意数量的从服务器上同步,有效地保证数据的安全性;
- Redis 支持多种编程语言,包括 C、C++、Python、Java、PHP、Ruby、Lua 等语言。
NoSql(Not Only SQL),不仅仅是SQL,泛指非关系型数据库。NoSql数据库并不是要取代关系型数据库,而是关系型数据库的补充。
关系型数据库(RDBMS):
- Mysql
- Oracle
- DB2
- SQLServer
非关系型数据库(NoSql):
- Redis
- Mongo db
- MemCached
下面对 Redis 的优势进行了简单总结:
- 性能极高:Redis 基于内存实现数据存储,它的读取速度是 110000次/s,写速度是 81000次/s;
- 多用途工具: Redis 有很多的用途,比如可以用作缓存、消息队列、搭建 Redis 集群等;
- 命令提示功能:Redis 客户端拥有强大的命令提示功能,使用起来非常的方便,降低了学习门槛;
- 可移植性:Redis 使用用标准 C语言编写的,能够在大多数操作系统上运行,比如 Linux,Mac,Solaris 等。
2、Redis下载与安装
2.1 Redis下载
Redis安装包分为windows版和Linux版:
- Windows版下载地址:github.com/microsoftar…
- Linux版下载地址: download.redis.io/releases/
2.2 Redis安装
1)在Windows中安装Redis
Redis的Windows版属于绿色软件,直接解压即可使用,解压后目录结构如下:
2)在Linux中安装Redis(简单了解)
在Linux系统安装Redis步骤:
- 将Redis安装包上传到Linux
- 解压安装包,命令:tar -zxvf redis-4.0.0.tar.gz -C /usr/local
- 安装Redis的依赖环境gcc,命令:yum install gcc-c++
- 进入/usr/local/redis-4.0.0,进行编译,命令:make
- 进入redis的src目录进行安装,命令:make install
安装后重点文件说明:
- /usr/local/redis-4.0.0/src/redis-server:Redis服务启动脚本
- /usr/local/redis-4.0.0/src/redis-cli:Redis客户端脚本
- /usr/local/redis-4.0.0/redis.conf:Redis配置文件
2.3 Redis服务启动与停止
以window版Redis进行演示:
2.3.1 服务启动命令
redis-server.exe redis.windows.conf
Redis服务默认端口号为 6379 ,通过快捷键Ctrl + C 即可停止Redis服务
当Redis服务启动成功后,可通过客户端进行连接。
2.3.2 客户端连接命令
redis-cli.exe
通过redis-cli.exe命令默认连接的是本地的redis服务,并且使用默认6379端口。也可以通过指定如下参数连接:
- -h ip地址
- -p 端口号
- -a 密码(如果需要)
2.3.3 修改Redis配置文件
设置Redis服务密码,修改redis.windows.conf
requirepass 123456
注意:
- 修改密码后需要重启Redis服务才能生效
- Redis配置文件中 # 表示注释
重启Redis后,再次连接Redis时,需加上密码,否则连接失败。
redis-cli.exe -h localhost -p 6379 -a 123456
此时,-h 和 -p 参数可省略不写。
1.3.4 Redis客户端图形工具
默认提供的客户端连接工具界面不太友好,同时操作也较为麻烦,接下来,引入一个Redis客户端图形工具Another Redis Desktop Manager。
下载方式分为几种:
选择一种即可。
新建连接
连接成功
图形界面工具有很多,提供一种仅供参考,其实笔者跟喜欢在命令窗口使用redis,多熟悉相关命令。
2.4 docker安装redis
使用docker安装redis就不详细赘述了,有需要可以参考该博客,写的很详细了。
3、redis数据类型
3.1 五种常用数据类型
Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:
- 字符串 string
- 哈希 hash
- 列表 list
- 集合 set
- 有序集合 sorted set / zset
解释说明:
- 字符串(string):普通字符串,Redis中最简单的数据类型
- 哈希(hash):也叫散列,类似于Java中的HashMap结构
- 列表(list):按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList
- 集合(set):无序集合,没有重复元素,类似于Java中的HashSet
- 有序集合(sorted set/zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素
这里先提到一个关于键的命令:
# 列出全部键
keys *
最开始是什么都没有的,如图:
注意:redis是不区分大小写的。
3.2 Redis常用命令
3.2.1 字符串常用命令
string是redis最基本的类型,一个key对应一个value
string可以包含任何数据,最大不能超过512M
# 设置指定key的值
set key value
# 获取指定key的值
get key
# 设置多个值
mset key value key value...
# 获取多个值
mget key key ...
# 除
del key
# 返回字符串长度
strlen key
# 设置指定key的值,并将key的过期时间设为seconds秒
setex key seconds value
尝试使用命令:
set name xiaoming
get name
mset age 18 gender nan
mget name age gender
结果如下:
现在试试删除命令,我们先查看一共有几个键,然后删除后再次查看:
最后来看看设置有时限的键。
3.2.2 列表常用命令
List(列表)
列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素列表的头部(左边)或者尾部(右边)它的底层实际是个链表。
# 将值从左边插入到列表中(从头部插入),可一次插入多个
lpush 列表的键 值
# 将值从右边插入到列表中(尾部插入),可一次插入多个
rpush 列表的键 值
# 获取列表指定范围内元素(从0开始)
lrange 列表的键 起始范围 终止范围
测试一下:
lpush list01 1 2 3 4 5 倒序排列
rpush list02 1 2 3 4 5 正序排列
lrange list01 0 -1 获取list01 中的所有值
# 移除最左/最右元素
lpop/rpop key
# 获取列表长度
llen key
测试:
lpop list01 删除元素5
rpop list01 删除元素1
llen list01
3.2.3 Hash常用命令
hash是一个键值对集合hash是一个string类型的field和value的映射表,hash特别适合存储对象。类似于Java中HashMap或是Python中的字典。
# 设定指定哈希表中的指定字段的值,若该字段不存在于此哈希表则新建该字段和对应值
hset 哈希表的键 字段 值
# 同时在指定哈希表中设置多对字段和值,不存在则创建
hmset 哈希表的键 字段1 值1 字段2 值2 ...
# 获取指定哈希表中指定字段的值
hget 哈希表的键 字段
# 获取多个指定哈希表的字段对应的值
hmget 哈希表的键 字段1 字段2 ...
# 获取所有属性
hgetall key
# 删除指定哈希表中指定字段及其对应值,可以删除多个
hdel 哈希表的键 字段
测试:
hset user id 11
hget user id
hmset customer id 11 name juran age 26
hmget customer id name age # 只返回相应的值
hgetall customer # 返回全部
hdel user id # 删除user中id
3.2.4 集合常用命令
Set(集合),set是string类型的无序集合,集合成员是唯一的,这就意味着集合中不能出现重复的数据。
# 向集中插入值,可一次插入多个
sadd key member1 [member2]
# 列出指定集合中全部元素
smembers key
# 判断一个值是否在集合内(存在返回1,不存在返回0,布尔类型)
sismember key member
测试:
sadd set01 1 2 2 3 3 # 去掉重复添加
smembers set01 # 得到set01
sismember set01 1 # 如果存在返回1 不存在返回0
# 获取集合里面的元素个数
scard key
# 删除集合中元素
srem key value
测试:
scard set01
srem set01 3 # 删除集合中的3
smembers set01 # 3已经被删除掉
3.2.5 有序集合常用命令
Zset(有序集合),Redis有序集合是string类型元素的集合,且不允许有重复成员。每个元素都会关联一个double类型的分数。
# 向有序集合添加一个或多个成员
zadd key score1 member1 [score2 member2]
# 通过索引区间返回有序集合中指定区间内的成员(带分数返回)
zrange key start stop [withscores]
# 移除有序集合中的一个或多个成员
zrem key member [member...]
测试:
zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5
zrange zset01 0 -1
zrange zset01 0 -1 withscores # 带分数返回
zrem zset01 v1
更多命令学习地址可以参考:
3.2 redis数据库常用命令
select 0 # 切换数据库 默认有16个数据库 0-15 下标从0开始
dbsize # 查看当前数据库的key数量
keys * # 查看key的内容(keys pattern 如:keys set*)
flushdb # 清空当前数据库的key的数量
flushall # 清空所有库的key(慎用)
exists key # 判断key是否存在
type key # 查看当前key所对应value数据类型
del key [key...] # 删除key,一次可以删除多个