您的位置:首页 > 数据库 > Redis

Redis学习笔记

2018-01-02 18:01 141 查看
一、定义

开源、可基于内存也可持久化的日志型、key-value数据库,提供了多种语言的API。(被人们称为数据结构服务器,它的值可以是字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。)

二、特性

原子性:要么成功执行,要么失败完全不执行

性能极其高:读的速度是110000次/s,写的速度是81000次/s 。

Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

三、支持的数据类型:

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

1.string 类型:

二进制安全:二进制安全就是说它可以存储任何数据,比如jpg图片或者序列化的对象,一个键最大可以存储512MB

2.Hash(哈希):

Redis hash 是一个键值(key=>value)对集合。

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

3.List(列表)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

4.Set(集合)

Redis的Set是string类型的无序集合,不重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

5.zset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

四、计算基数:

Redis HyperLogLogg 是用来做基数统计的算法

什么是基数?

比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}

五、Redis发布订阅

Redis 发布订阅(pub/sub)是一种消息通信模式:

发送者(pub)发送消息,订阅者(sub)接收消息。

Redis 客户端可以订阅任意数量的频道。

六、事务

1.批量操作在发送 EXEC 命令前被放入队列缓存

2.收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行

3.在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中

Redis 事务其实是要保证批量操作的原子性。Redis 实现批量操作的原理是在一个事务上下文中(通过 MULTI命令开启),所有提交的操作请求都先被放入队列中缓存,在 EXEC 命令提交时一次性批量执行。这样保证了批量操作的一次性执行过程,但 Redis 在事务执行过程的错误情况做出了权衡取舍,那就是放弃了回滚

一致性(Consistency) 摘自:http://blog.csdn.net/zmx729618/article/details/52680124

一致性意味着事务结束后系统的数据依然保证一致。在事务开始之前,数据保持有效的状态,事务结束后也如此。显然在前面讨论原子性时,Redis舍弃了回滚的设计,基本上也就舍弃对数据一致性的有效保证。不过对于一个高效的 key-value store 或 data structure server,数据操作一致性很多时候更多应该依赖应用层面,事实也是我们使用 Redis 时很多时候都是分片和集群的,数据一致性无法依靠任何事务机制。

七、java连接redis

1.本地安装redis服务器

2.下载jar包

3.代码实现:

import redis.clients.jedis.Jedis;

public class RedisStringJava {
public static void main(String[] args) {
//连接本地的 Redis 服务
Jedis jedis = new Jedis("localhost");
System.out.println("连接成功");
//设置 redis 字符串数据
jedis.set("runoobkey", "www.runoob.com");
// 获取存储的数据并输出
System.out.println("redis 存储的字符串为: "+ jedis.get("runoobkey"));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis 数据库