【Redis】

本文介绍了NOSQL数据库的优势,如成本低、查询速度快、存储数据格式多样以及良好的扩展性。接着详细讲解了Redis,一款高性能的NOSQL数据库,其应用场景包括缓存、消息队列等。文章还涵盖了Redis的数据结构,如String、Hash、List、Set和Sorted Set,以及如何使用Java的Jedis客户端进行操作。此外,讨论了Redis的持久化机制RDB和AOF,以及如何处理Java客户端可能出现的问题。
摘要由CSDN通过智能技术生成

什么是NOSQL

NOSQL(not only sql)泛指非关系型数据库。
随着互联网web2.0网站的兴起,传统的关系型数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多问题。
而非关系型数据库则由于其本身特点得到了非常迅速的发展。
NOSQL的产生就是为了解决大规模数据集合多重数据种类带来的跳转,尤其是大数据应用难题。

NOSQL和关系型数据库的比较

优点

成本

NOSQL数据库部署简单,开源,不像oracle那样花费大量成本购买,相比关系型数据库价格便宜。

查询速度

NOSQL数据库使用缓存机制,将数据存储在缓存中,而关系型数据库将数据存储在硬盘中,自然查询速度远超关系型数据库。

存储数据格式

NOSQL可以存储key,value的形式、文档形式、图片形式等,支持多种数据类型,而关系型数据库只支持基础数据类型。

扩展性

关系型数据库有类似join这样的多表查询机制导致扩展很艰难。
而NOSQL因为是基于键值对的,数据之间没有耦合性,所以容易扩展。

缺点

维护的工具和资料有限

因为NOSQL属于新技术,不能和关系型数据库十几年的技术相提并论。

不提供对sql的支持

因为不支持sql这样的工业标椎,将会产生一定的学习和使用成本。
不提供关系型数据库对事物的处理
事务支持对于安全性能很高的数据访问要求,关系型数据库提供事务支持。

SQL和NOSQL

NOSQL和关系型数据库并非对立而是互补的关系
一般会将数据存储在关系型数据库中,在NOSQL数据库中备份存储。

Redis

介绍

Redis是一款高性能的NOSQL系列的非关系型数据库。
官网:https://redis.io
中文网:http://www.redis.net.cn/
解压直接可以使用:
○ redis.windows.conf:配置文件
○ redis-cli.exe:redis的客户端
○ redis-server.exe:redis服务器端

Redis应用场景

● 缓存(数据查询、短连接、新闻内容、商品内容等等)
● 聊天室的在线好友列表
● 任务队列。(秒杀、抢购、12306等等)
● 应用排行榜
● 网站访问统计
● 数据过期处理(可以精确到毫秒
● 分布式集群架构中的session分离
使用redis缓存一些不经常发生变化的数据。
数据库的数据一旦发生改变,则需要更新缓存。
数据库的表执行 增删改的相关操作,需要将redis缓存数据情况,再次存入
在service对应的增删改方法中,将redis数据删除。

Redis数据结构

官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s ,且Redis通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:
● 字符串类型 string
● 哈希类型 hash : map格式
● 列表类型 list: linkedlist格式(LinkedList集合底层是双链表, 首位操作快),支持元素重复
● 集合类型 set: 不允许元素重复
● 有序集合类型 sortedset: 不允许重复元素,且元素有顺序

Redis命令操作

字符串类型 String

存储:set key value

获取:get key

删除:del key

哈希类型 hash

存储 : hset set filed value

获取: hget key field 获取指定的fiele对应的值
hgetall key 获取所有的filed和value

删除: hdel key filed

列表类型 list 元素可以重复

添加: lpush key value 将元素加入列表左表
rpush key value 将元素加入列表右边
获取: lrange key strat end 范围获取
lrange mylist 0 -1 其中0代表第一个,-1代表最后一个

删除: lpop key: 删除列表最左边的元素,并返回被删除元素
rpop key: 删除列表最右边的元素,并返回被删除元素

集合类型 set 元素不可重复,元素无序

存储: sadd key value

获取: sembers key 获取set集合中所有元素

删除:srem key value 删除set集合中某个元素

有序集合类型 sortedset 不允许重复,有顺序,每个元素关联一个double类型的分数

Redis正是通过分数为集合中的成员从小到大进行排序

存储 :zadd key score value

获取: zrange key start end [withscores]

删除: zrem key value

通用命令

keys * : 查询所有的键
type key :获取键对应的value的类型
del key : 删除指定的key value

数据过期时间设置

expire key time(秒) :最常用

setex key time(秒) value :字符串独有

ttl key # 查看数据还有多久过期

  //可以使用setex()方法存储指定过期时间的key value
        //应用:激活码,验证码
        jedis.setex("username",5,"lala");//5秒
        System.out.println(jedis.get("username"));
        Thread.sleep(5000);
        System.out.println(jedis.get("username"));// null

Redis持久化

由于Redis数据是存在内存中的,当重启Redis服务器或重启电脑,数据会丢失,因此需要将Redis内存中的数据持久化存储到硬盘文件中。
Redis有两种持久化机制:

RDB(默认机制)

在一定的间隔时间中,检测key是否变化,然后持久化数据。dump.rdb
redis.windwos.conf文件
#after 900 sec (15 min) if at least 1 key changed
save 900 1
#after 300 sec (5 min) if at least 10 keys changed
save 300 10
#after 60 sec if at least 10000 keys changed
save 60 10000

AOF

日志记录的方式,可以记录每一条命令的操作。
编辑redis.windwos.conf文件
appendonly no(关闭aof) --> appendonly yes (开启aof)
#appendfsync always : 每一次操作都进行持久化
appendfsync everysec : 每隔一秒进行一次持久化
#appendfsync no : 不进行持久化

如何让持久化生效

进行了如上的编辑后(使用默认的方法,可以不编辑),重启Redis服务器
和直接打开不一样,是在redis目录下运行cmd,输入redis-server.exe redis.windows.conf
然后打开客户端,数据就持久化保存了。

Java客户端(Jedis)

介绍

Jedis是一款java操作redis数据库的工具。

使用步骤

下载jar/pom

获取连接

Jedis jedis = new Jedis(“localhost”,6379);

操作

Jedis操作各种Redis中的数据结构和在服务端操作方法一致。

import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.util.List;
import java.util.Map;
import java.util.Set;
publ
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值