Redis的认识和基本操作
Redis是什么
Redis 是一个高性能的开源的、C语言写的Nosql(非关系型数据库),数据保存在内存中。
Redis 是以key-value形式存储的Nosql,和传统的关系型数据库不一样。不一定遵循传统数据库的一些基本要求,比如说,不遵循sql标准,事务,表结构等等,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。
redis的优势
1.数据保存在内存,存取速度快,并发能力强
2.它支持存储的value类型相对memcached更多,包括string(字符串)、list(链表)、set(集合)、 zset(sorted set --有序集合)和hash(哈希类型)。
3.redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库(如MySQL)起到很好的补充作用。
4.它提供了Java,C/C++,C#,PHP,JavaScript等客户端,使用很方便。
5.Redis支持集群(主从同步)。数据可以主服务器向任意数量从的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。
6.支持持久化,可以将数据保存在硬盘的文件中
7.支持订阅/发布(subscribe/publish)功能 QQ群
数据存储:
存放到内存中,并且还能不定期持久化到硬盘.
Value类型:
相较于memcached支持Value更多
客户端支持:
支持多种客户端-跨语言
超大并发支持:
支持集群
Mysql、Memcached和Redis的比较
储过期:存储数据时设置一个有效期,时间到了就没了.
场景:订单,vip,短信验证码,游戏道具,优惠券,红包等等
Memcached和Redis的相同点和不同点? Memcached?
相同点:
都是key-value类型Nosql,都存放数据到内存中,读写效率高,而且都支持存储过期.
不同点:
redis相较于Memcached还支持持久化到磁盘,数据安全更高.
redis相较于Memcached支持value类型更多.
redis的使用场景
中央缓存 计数器应用 实时攻防系统 排行榜 设定有效日期 自动去重(set数据结构可自动去重) 队列 消息订阅
在java中使用Redis
首先我们需要导入redis的jar包,(commons-pool2-2.2.jar ,jedis-2.5.2.jar)
然后我们可以准备一个枚举类 获取得到jedis
public enum RedisUtil {
REDIS_POOL;
private static JedisPool pool; static {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(10);//最大连接数
config.setMaxIdle(4);//最小连接数
pool = new JedisPool(config, "127.0.0.1"); } public Jedis getjedis(){
return pool.getResource();
} }
然后我们就可以在测试类中对Redis进行操作了,
普通存值的操作
@Test
public void testJedisStringOper() throws Exception{
Jedis jedis = JeditUtil.INSTANCE.getJedis();
//清空当前数据库
jedis.flushDB();
System.out.println("name这个key是否存在:"+jedis.exists("name"));//false
jedis.set("name","songsong");
System.out.println("name的值:"+jedis.get("name"));//songsong
System.out.println("所有的Key:"+jedis.keys("*"));//[name]
jedis.del("name");
System.out.println("所有的Key:"+jedis.keys("*"));//[] JeditUtil.INSTANCE.closeJedis();
}
string操作
@Test
public void testJedisString() throws Exception{
Jedis jedis = JeditUtil.INSTANCE.getJedis();
//清空当前数据库
jedis.flushDB();
jedis.set("name","songsong");
System.out.println("name的值:"+jedis.get("name"));//songsong
jedis.append("name","123456");
System.out.println("追加之后的name的值:"+jedis.get("name"));//songsong123456 JeditUtil.INSTANCE.closeJedis();
}
List操作
@Test
public void RedisList1() throws Exception{
//将值赋值进去
jedis.flushDB();//清除当前数据库中的数据
jedis.lpush("list","aa","bb","ss","xx","dd");//会给list集合赋值
SortingParams params = new SortingParams();//设置排序方式
params.alpha();//给字符串修改排序方式
System.out.println( jedis.lrange("list", 0, -1));//读取到具体的数据,o表示从0开始,-1结束 }
/**
set操作
hash的操作
Redis持久化配置
Redis 提供了两种不同级别的持久化方式:RDB和AOF,可以通过修改redis.conf来进行配置.
1.1. RDB模式
RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照,默认开启该模式.
如何关闭 rdb 模式:
save ""
# save 900 1 //至少在900秒的时间段内至少有一次改变存储同步一次
# save xxx
# save 60 100008
1.2. AOF追加模式
AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集,默认关闭该模式。
如何开启aof模式:
appendonly yes //yes 开启,no 关闭
# appendfsync always //每次有新命令时就执行一次fsync
#这里我们启用 everysec
appendfsync everysec //每秒 fsync 一次
# appendfsync no //从不fsync(交给操作系统来处理,可能很久才执行一次fsync)
其它的参数请大家看redis.conf配置文件详解
淘汰策略
淘汰一些数据,达到redis数据都是有效的,确保内容优化。选择合适的淘汰策略进行淘汰。
1.1. 怎么淘汰
olatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
redis 确定驱逐某个键值对后,会删除这个数据并,并将这个数据变更消息发布到本地(AOF 持久化)和从机(主从连接)。
当redis存放的数据到达配置的最大内容后,会按照配置淘汰策略进行淘汰.
Redis的认识和基本操作的更多相关文章
- Redis数据结构之sds基本操作函数
本文及后续文章,Redis版本均是v3.2.8 本篇文章讲解sds基本操作函数,我们从源码角度来进一步理解. 一.sds创建函数和销毁 sds创建函数 /* Create a new sds stri ...
- Redis(1.2)Redis的数据结构与基本操作
Redis的数据结构,其本身大方向是键值对 [0]大概特点 相关产品:Redis.Riak.SimpleDB.Chordless.Scalaris.Memcached 形式:Key 指向 Value ...
- node.js中对 redis 的安装和基本操作
一.win下安装redis https://github.com/MicrosoftArchive/redis/releases 下载Redis-x64-3.2.100.zip,然后解压,放到自定义目 ...
- redis对key的基本操作
不忘初心,励志前行 del key1 key2 ... Keyn作用: 删除1个或多个键返回值: 不存在的key忽略掉,返回真正删除的key的数量 rename key newkey作用: 给key赋 ...
- W3School Redis教程(安装/基本操作/高级操作/命令/官方文档/官方集群教程)
说明:Redis有自身的客户端连接软件,也可以使用Telnet进行连接操作. 来自W3School的Redis教程,基本上涵盖了从安装到状态监控的教程. W3School:https://www.gi ...
- redis的数据类型和基本操作
Redis 的Key Redis 的 key 是字符串类型,但是 key 中不能包括边界字符,由于 key 不是 binary safe的字符串,所以像"my key"和" ...
- redis(二)----基本操作
1. redis介绍 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset( ...
- Redis数据库 常用的基本操作
一.redis数据库操作 redis数据库默认有16个数据库[0-15],默认进入的是0库. select 数据库名 :切换数据库. keys * :查看所有的键. expire 键 秒数:设置过 ...
- 对redis客户端jedis2.8.0的进一步封装
jedis2.8.0的进一步封装: 1.序列化存储对象 2.结合spring,创建redis连接池 3.提供了基础的单个实体操作,有序list操作和一对多关系list的操作,对list提供了分页的封装 ...
随机推荐
- PythonQt在windows下的编译
笔者最近在做Qt方面的开发工作,然后需要用到脚本程序对程序内部进行扩展,就很自然的想到了Python,度娘一下发现了一款神器,也就是今天给大家介绍的主角:PythonQt 今天首先给大家介绍下Pyth ...
- C#设计模式之简单工厂模式(过渡模式)
一.引言 之所以写这个系列,是了为了自己更好的理解设计模式,也为新手提供一些帮助,我都是用最简单的.最生活化的实例来说明.在上一篇文章中讲解了单例模式,今天就给大家讲一个比较简单的模式——简单工厂模式 ...
- 【转】MEF程序设计指南一:在应用程序中宿主MEF
在应用程序中宿主MEF其实非常简单,只需要创建一个组合容器对象(CompositionContainer)的实例,然后将需要组合的部件(Parts)和当前宿主程序添加到容器中即可.首先需要添加MEF框 ...
- window安装设置
https://jingyan.baidu.com/article/73c3ce28ed7d92e50243d96c.html
- oracle两个客户端路径记录
32 C:\WINDOWS\assembly\GAC_64\Oracle.DataAccess\2.112.3.0__89b483f429c4734264 C:\WINDOWS\Microsoft.N ...
- div浮停在页面最上或最下
div{ position:fixed; bottom:0px; // top:0px; z-index:999; } bottom:0px 浮停在最下面,top:0px 浮停在最上面:z-index ...
- 2018.09.23 bzoj1076: [SCOI2008]奖励关(期望+状压dp)
传送门 一道神奇的期望状压dp. 用f[i][j]f[i][j]f[i][j]表示目前在第i轮已选取物品状态为j,从现在到第k轮能得到的最大贡献. 如果我们从前向后推有可能会遇到不合法的情况. 所以我 ...
- noexcept(c++11)
1.概念 1)c++中的异常处理是在运行时而不是编译时检测的,为了实现运行时检测,编译器可能会创建额外的异常处理代码,然而这会妨碍程序优化 2)noexcept说明符:若修饰函数(紧跟在参数列表后面) ...
- MySQL 的IFNULL()、ISNULL()和NULLIF()函数
参考与http://blog.csdn.net/xingyu0806/article/details/52080962 IFNULL(expr1,expr2) 假如expr1不为NULL,则 IFNU ...
- spring3 hibernate4整合后无法查询数据库
spring3和hibernate4整合后无法查询数据库,一方面是因为已经spring3中没有对hibernate4 HibernateTemplate的支持,另外一个就是需要在hibernate的配 ...