redis入门教程
redis入门
首先需要了解redis归属于那种数据库,他属于非关系型数据库。
NOSQL概念:
NOSQL(Not only sql):不仅是sql语句, 它是对所有非关系型数据库的一种统称。 除去关系型数据库之外的都是非关系数据库。
NOSQL和RDBMS的区别
RDBMS
- 高度组织化结构化数据。 user---userid username age sex .....
- 结构化查询语言(SQL) sql语句
- 数据和关系都存储在单独的表中。
- 数据操纵语言DML,数据定义语言DDL
- 严格的一致性. 事务
- 基于事务
NoSQL
- 代表着不仅仅是SQL
- 没有声明性查询语言
- 键 - 值对存储。
- 最终一致性,而非ACID【原子,一致,隔离,持久】属性
- 非结构化和不可预知的数据 字符串 对象 队列 集合
- 高性能,高可用性和可伸缩性。 适合搭建集群。 mysql搭建集群。非常复杂。主从模式
首先要名表NOSQL并不是取代RDBMS,创建初期目的是如此,但发现针对的方向不同,他们也就形成了一个互补状态。
常见的非关系型数据库类型:
Redis就属于非关系数据库。
Mongodb属于非关系数据库。----接近mysql数据库
1.redis概念:
Redis是一种开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。Redis提供数据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图,超日志,地理空间索引和流。Redis具有内置的复制,Lua脚本,LRU驱逐,事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区提供了高可用性。
Redis是一个开源的key-value存储系统
和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步
2.redis特点:
高效性:Redis读取的速度是110000次/s,写的速度是81000次/s
原子性:Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
支持多种数据结构:string(字符串);list(列表);hash(哈希),set(集合);zset(有序集合)
稳定性:持久化,主从复制(集群)
其他特性:支持过期时间,支持事务,消息订阅。
3.redis应用场景
缓存(数据查询、短连接、新闻内容、商品内容等等)
聊天室的在线好友列表
任务队列。(秒杀、抢购、12306等等)
应用排行榜
网站访问统计
数据过期处理(可以精确到毫秒
分布式集群架构中的session分离
4.安装redis
首先安装必要的环境
1.安装redis需要的环境。yum install -y gcc-c++
2.上官网下载redis源码安装包。
redis-5.0.8.tar.gz
安装步骤简介
1. 解压redis到/usr/local
2. 进入redis目录并执行编译命令 make
3. 执行安装命令 make install
开启redis服务
redis-server redis.conf
使用redis客户端连接到redis服务器,有两种方式:
redis-cli -h redis服务器的ip -p redis服务器的端口号
redis-cli
关闭redis
shutdown
exit
5.redis图形化界面
redisPlus下载地址:
点击此链接,进入下载页面
安装傻瓜式安装,注意修改安装路径就行。
安装成功点击如下图标:
进入界面:
编辑连接:
连接成功界面:
6.redis的常用命令
6.1对key操作的命令
keys *: 查询所有的key;
del key....:删除指定的key
expire key seconds: 为指定的key设置过期时间单位为秒
ttl key: 查询指定key的存活时间 -1未设置时间,永久,-2,未找到
6.2对数据库的一些操作命令
flushdb: 清空当前数据库中的数据。
select index: 选择数据库
flushall: 清空所有数据库中的数据。
7.redis支持的数据类型
详情请参考如下链接:
1. String字符串类型
2. Hash 哈希类型
3. list 队列
4. set 集合
5. sorted set 有序集合。
7.1String字符串类型–value值 为字符串类型
可以存放任意类型的字符串。java对象—>json字符串—>string
set key value: 把字符串的value存放到对应的key上。
get key: 根据指定的key获取对应字符串的value
mset key value key value key value....: 一次存放多个字符串的value到相应的key上
mget key key...: 根据指定的多个key获取对应的字符串的value
setnx key value: 把指定的value存放到对应的key上,如果对应的key已经存在,则不存储。
如果不存在则存储。 返回0或者1
incr key: 为指定的key的value值进行递增。应用场景:点赞 收餐 转发等
decr key: 递减
7.2Hash 类型。–value值为hash类型
hset key field value: 存放一个指定key的field-value的数据库
hget key field:获取指定key的field字段对应的value值。
hkeys key: 获取指定key的所有field字段名
hvals key: 获取指定key的所有value值。
hgetall key: 获取指定key的所有的field和value值。
HDEL key field: 删除指定key的field字段。
7.3List 队列类型
lpush: 将一个或多个值 value 插入到列表 key 的表头.
lpop: 移除并返回列表 key 的头元素。
lrange: 返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。
7.4set集合
sadd key value.....: 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
spop key: 移除并返回集合中的一个随机元素。
smove source destint member:
smembers key:获取指定key下的所有的元素
sinter key key ...:求所有集合的交集。
7.5sortSet 有序集合
应用场景:例如排行榜
1.zadd key score value score value ....:添加有序集合元素。
2.zrange key start end: 获取指定返回的元素。
urce destint member:
smembers key:获取指定key下的所有的元素
sinter key key ...:求所有集合的交集。