Redis 简介

Redis 是一种内存型数据存储,也可以将它写入磁盘中来实现耐久性。Redis 可通过两种方式来持久存储数据:RDB 和 AOF。RDB 持久性按照指定的间隔对您的数据集执行时间点快照。它不是非常耐久,而且您可能会丢失一些数据,但它非常快。AOF 的持久性要长得多,而且记录了服务器收到的每个写入操作。在查询 Redis 时,将从内存中获取数据,绝不会从磁盘获取数据,Redis 对内存中存储的键和值执行所有操作。
Redis 采用了一种客户端/服务器模型,借用该模型来监听 TCP 端口并接受命令。Redis 中的所有命令都是原子性的,所以您可以从不同的客户端处理同一个键,没有任何争用条件。如果您使用的是 memcached(一个内存型对象缓存系统),您会发现自己对它很熟悉,但 Redis(可以说)是 memcached++。Redis 也支持数据复制。

数据模型

Redis 数据模型不仅与关系数据库管理系统 (RDBMS) 不同,也不同于任何简单的 NoSQL 键-值数据存储。Redis 数据类型类似于编程语言的基础数据类型,所以开发人员感觉很自然。每个数据类型都支持适用于其类型的操作。受支持的数据类型包括: 
- 字符串
- 列表
- 集合
- 有序集
- 哈希值

关键优势

Redis 的优势包括它的速度、它对富数据类型的支持、它的操作的原子性,以及它的通用性:
- Redis 非常快。它每秒可执行约 100,000 个 SET 以及约 100,000 个 GET 操作。您可以使用 redis-benchmark 程序在自己的机器上对它的性能进行基准测试。(redis-benchmark 模拟在它发送总共 M 个查询的同时,N 个客户端完成的 SET/GET 操作。)
- Redis 对大多数开发人员已知道的大多数数据类型提供了原生支持,这使得各种问题得以轻松解决。经验会告诉您哪个问题最好由何种数据类型来处理。
- 因为所有 Redis 操作都是原子性的,所以多个客户端会并发地访问一个 Redis 服务器,获取相同的更新值。
- Redis 是一个多效用工具,对许多用例很有用,这些用例包括缓存、消息队列(Redis 原生支持发布/订阅)、短期应用程序数据(比如 Web 会话、Web 页面命中计数)等。

Redis 安装

linux centos6.5安装
1. 使用离线包tar安装
(tar链接:http://pan.baidu.com/s/1qWvFXQO 密码:k5r6 )
wget http://download.redis.io/releases/redis-3.0.3.tar.gztar xzf redis-3.0.3.tar.gzcd redis-3.0.3make#启动服务的cd /src./redis-server#使用客户端 可以输入ping、info查看信息./redis-cli
2. yum在线安装
yum install epel-releaseyum install redis#启动停止service redis start/stop#客户端redis-cli

Redis 数据类型操作示例

下面分别介绍Redis 支持的数据类型的简单示例。

字符串(string)

redis> SET firstname shekharOKredis> GET firstname"shekhar"
如果您的键的值是整数,那么可使用 DECR 或 DECRBY 递减这些值,使用 INCR 或 INCRBY 递增它们。这些操作在您希望维护一些对象的数量(比如网页的命中次数)的情形中很有用
redis> INCR votes(integer) 1redis> INCR votes(integer) 2redis> INCR votes(integer) 3redis> DECR votes(integer) 2

其他一些操作(包括 APPEND、GETRANGE、MSET 和 STRLENGTH 也可用于字符串。请参见http://doc.redisfans.com/string/index.html )

列表(list)

有序的字符串列表,按照插入顺序排序。Redis 中的列表是一个有序的字符串集合,您可以向其中添加任意数量的(惟一或非惟一)元素。除了向列表添加元素和从中获取元素的操作之外,Redis 还支持对列表使用取出、推送、范围和其他一些操作。

使用 LPUSH 命令,最近添加的单词位于列表顶部,以前添加的单词会在后面:

redis> LPUSH words austerity(integer) 1redis> LPUSH words socialism moratorium socialism socialism(integer) 5
使用 LRANGE 命令查看列表中顶部的三个单词:
redis> LRANGE words 0 21) "socialism"2) "socialism"3) "moratorium"
获得列表的长度,可使用 LLEN 命令:
redis > LLEN words(integer) 5

删除:

#删除所有 socialismredis> LREM words 0 socialism(integer) 2

删除列表:

redis 127.0.0.1:6379> DEL words(integer) 1

集合(set)

集合(set)是惟一元素的无序集合。不可重复。
将一个元素添加到一个集合中,可使用 SADD 命令;要获取一个集合的所有成员,可使用 SMEMBERS 命令。
redis> SADD uniquewords austerity(integer) 1redis> SADD uniquewords socialism(integer) 1redis> SADD uniquewords socialism(integer) 0redis> SMEMBERS uniquewords1) "austerity"2) "socialism"

找出两个集合中的所有共同元素,SINTER 命令。合并多个集合,我使用SUNION 命令。

有序集(zset)

有序集合字符串列表,不可重复。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。
假设您希望基于单词的长度对一组单词进行排序。使用 ZADD 命令将一个元素添加到一个有序集中,使用语法 ZADD 键分数 值。使用ZRANGE 命令按分数查看一个有序集的元素。
redis> ZADD wordswithlength 9 austerity(integer) 1redis> ZADD wordswithlength 7 furtive(integer) 1redis> ZADD wordswithlength 5 bigot(integer) 1redis> ZRANGE wordswithlength 0 -11) "bigot"2) "furtive"3) "austerity"

要获得有序集的大小,可使用 ZCARD 命令:

redis 127.0.0.1:6379> ZCARD wordswithlength(integer) 3

哈希值(hash)

hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
哈希值允许您针对一个哈希值存储一个键-值对。此选项可能对您希望保存具有多个属性的对象的情形很有用,就像以下示例一样:
redis> HSET user:1 name shekhar(integer) 1redis> HSET user:1 lastname gulati(integer) 1redis> HGET user:1redis> HGET user:1 name"shekhar"redis> HGETALL user:11) "name"2) "shekhar"3) "lastname"4) "gulati"

Redis IDE 工具使用(RedisDesktopManager)

1. 下载  

链接:http://pan.baidu.com/s/1bnwg0OZ 密码:ekwu

使用java客户端 jedis操作redis

pom

<dependency>

<groupId>redis.clients</groupId>

<artifactId>jedis</artifactId>

<version>2.1.0</version>

</dependency>

测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import redis.clients.jedis.Jedis;
public class TestRedis {
    private Jedis jedis;
    public TestRedis() {
        jedis = new Jedis("123.59.42.xx"6379);
        // 权限认证
        // jedis.auth("admin");
    }
    /**
     * redis存储字符串
     */
    public void testString() {
        jedis.set("name""Jerome苏");
        jedis.expire("name"60); // 设置存活时间
        // jedis.del("name"); //删除某个键
        System.out.println("name----->>>" + jedis.get("name"));
    }
    /**
     * redis操作Map
     */
    public void testMap() {
        Map<String, String> map = new HashMap<String, String>();
        map.put("name""jerome");
        map.put("age""24");
        map.put("email""jerome_s@qq.com");
        jedis.hmset("user", map); // 存入redis
        // 取出
        List<String> rsmap = jedis.hmget("user""name""age");
        System.out.println(rsmap);
        // 删除map中的某个键值
        // jedis.hdel("user", "age");
        // System.out.println(jedis.hlen("user")); // 返回key为user的键中存放的值的个数2
        // System.out.println(jedis.exists("user"));// 是否存在key为user的记录 返回true
        // System.out.println(jedis.hkeys("user"));// 返回map对象中的所有key
        // System.out.println(jedis.hvals("user"));// 返回map对象中的所有value
    }
    /**
     * jedis操作List
     */
    public void testList() {
        // 开始前,先移除所有的内容
        jedis.del("animals");
        // -1表示取得所有
        System.out.println(jedis.lrange("animals"0, -1));
        // 存入List
        jedis.lpush("animals""cat");
        jedis.lpush("animals""dog");
        jedis.lpush("animals""tiger");
        System.out.println(jedis.lrange("animals"0, -1));
        // 删除单个
        jedis.rpush("animals""cat");
        System.out.println(jedis.lrange("animals"0, -1));
    }
    /**
     * jedis操作Set
     */
    public void testSet() {
        // 添加
        jedis.sadd("user""jerome");
        jedis.sadd("user""jelly");
        jedis.sadd("user""jack");
        jedis.sadd("user""nemo");
        jedis.sadd("user""who");
        // 移除noname
        jedis.srem("user""who");
        System.out.println(jedis.smembers("user"));// 获取所有加入的value
        System.out.println(jedis.sismember("user""who"));// 判断 who是否是user集合的元素
        System.out.println(jedis.srandmember("user"));
        System.out.println(jedis.scard("user"));// 返回集合的元素个数
    }
    /**
     * redis排序
     
     * @throws InterruptedException
     */
    public void testSort() throws InterruptedException {
        // 注意,此处的rpush和lpush是List的操作。是一个双向链表(但从表现来看的)
        jedis.del("a");// 先清除数据,再加入数据进行测试
        jedis.rpush("a""1");
        jedis.lpush("a""6");
        jedis.lpush("a""3");
        jedis.lpush("a""9");
        System.out.println(jedis.lrange("a"0, -1));// [9, 3, 6, 1]
        System.out.println(jedis.sort("a")); // [1, 3, 6, 9] //输入排序后结果
        System.out.println(jedis.lrange("a"0, -1));
    }
    public static void main(String[] args) {
        TestRedis redis = new TestRedis();
        redis.testMap();
        // RedisUtil.getJedis().set("newname", "中文测试");
        // System.out.println(RedisUtil.getJedis().get("newname"));
    }
}

使用连接池

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public final class RedisUtil {
    // Redis服务器IP
    private static String ADDR = "192.168.0.100";
    // Redis的端口号
    private static int PORT = 6379;
    // 访问密码
    // private static String AUTH = "admin";
    // 可用连接实例的最大数目,默认值为8;
    // 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
    private static int MAX_ACTIVE = 1024;
    // 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
    private static int MAX_IDLE = 200;
    // 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;
    private static int MAX_WAIT = 10000;
    private static int TIMEOUT = 10000;
    // 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
    private static boolean TEST_ON_BORROW = true;
    private static JedisPool jedisPool = null;
    /**
     * 初始化Redis连接池
     */
    static {
        try {
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxActive(MAX_ACTIVE);
            config.setMaxIdle(MAX_IDLE);
            config.setMaxWait(MAX_WAIT);
            config.setTestOnBorrow(TEST_ON_BORROW);
            // jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT, AUTH);
            jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT);
        catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 获取Jedis实例
     
     * @return
     */
    public synchronized static Jedis getJedis() {
        try {
            if (jedisPool != null) {
                Jedis resource = jedisPool.getResource();
                return resource;
            else {
                return null;
            }
        catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    /**
     * 释放jedis资源
     
     * @param jedis
     */
    public static void returnResource(final Jedis jedis) {
        if (jedis != null) {
            jedisPool.returnResource(jedis);
        }
    }
}

code: 链接:http://pan.baidu.com/s/1qW5PJic 密码:pyha


参考
http://www.ibm.com/developerworks/cn/java/os-springredis/index.html
Redis 命令参考
Java中使用Jedis操作Redis
        http://www.runoob.com/redis/redis-tutorial.html
        redis 五种数据类型的使用场景

代码

https://github.com/JeromeSuz/demo_code_repo/tree/master/src/main/java/redis

Redis 简介、Linux 安装 Redis、Redis 使用相关推荐

  1. Redis简介及安装

    Redis简介及安装 文章目录 Redis简介及安装 一.nosql介绍 1.NoSQL 2.NoSQL和SQL数据库的比较: 二.Redis 1.简介 2.Redis特性 3.Redis 优势 4. ...

  2. linux安装运行redis

    redis是一个非关系型数据库,是一个存储键值对的数据库,通常被称为数据结构服务器. 值(value)可以是字符串(String).哈希(Hash).列表(list).集合(sets)和有序集合(so ...

  3. 【赵强老师】Redis简介和安装配置

    先看视频. [赵强老师]Redis简介和安装配置 什么是Redis? Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串 ...

  4. ubuntu 安装php redis,ubuntu上安装php redis

    ubuntu下安装php redis ubuntu下安装php redis 1.安装redis服务端 sudo apt-get install redis-server 测试redis是否安装成功: ...

  5. Linux安装最新Redis

    Redis安装(Linux) 环境: centOs 7 (1)在机器上创建目录Redis,并进入,使用命令: mkdir /redis 进入官网:redis.io,复制最新版本redis下载链接地址 ...

  6. linux镜像包含redis吗,Linux虚拟机镜像\redis安装

    安装redis首先来排个坑,我安装完之后怎么也启动不了服务端,根本找不到文件,再Xftp中看了一下redis目录才发现都是以.C结尾的文件,这时候才想起来redis是C语言编写的,还需要编译 那么首先 ...

  7. 【Redis】Linux安装Redis

    Linux安装Redis 一.下载并上传 二.安装 2.1.解压 2.2.安装 2.3.更改配置 2.3.1.密码 2.3.2.远程登入 三.启动 一.下载并上传 官网下载地址 本文使用的7.0.4 ...

  8. Linux安装部署Redis

    文章目录 1. 前言 2. 下载Redis 3. 解压并安装Redis 4. 修改redis.conf的参数配置 5. 使用redis启动脚本设置开机自启动 6. 其他redis.conf配置 7. ...

  9. linux redis -p,linux 安装redis

    安装: 1.获取redis资源 wget http://download.redis.io/releases/redis-4.0.8.tar.gz 2.解压 tar xzvf redis-4.0.8. ...

  10. Linux安装配置Redis CentOS 7 下安装Redis

    Redis是一个高性能的,开源key-value型数据库.是构建高性能,可扩展的Web应用的完美解决方案,可以内存存储亦可持久化存储.因为要使用跨进程,跨服务级别的数据缓存,在对比多个方案后,决定使用 ...

最新文章

  1. Java ReentrantLock 详解
  2. C++ code:数值计算之矩形法求解积分问题
  3. Python-OpenCV--直线提取
  4. Mule web service调用中的复杂类型传递
  5. 【C语言进阶深度学习记录】二十一 # 和 ## 号操作符的使用与分析
  6. 一行代码 实现集合去重
  7. 利用python创建学生管理系统软件代码赏析
  8. css优先级机制说明
  9. 《团队名称》第八次团队作业:Alpha冲刺day1
  10. ios 点生成线路 百度地图_网站地图全面解析
  11. Hadoop中Yarnrunner里面submit Job以及AM生成 至Job处理过程源码解析
  12. 详谈归并排序时间复杂度过程推导----软考
  13. 正项级数敛散性的判别
  14. python 蒙特卡罗_python实现蒙特卡罗方法(代码示例)
  15. 【攻防世界 | WP】CAT
  16. FFmpeg给视频添加水印
  17. CentOS 7 安装 Mysql 8.0 教程
  18. Redis 在windows中启动
  19. 拼多多拼单显示内部服务器错误,拼多多为什么拼不了?拼多多怎么拼单?
  20. conda 安装第三方包

热门文章

  1. python以 划分语句块_Python使用符号____ 标示注释;以____划分语句块。_学小易找答案...
  2. 互联网架构升级改造演进过程,一文带你了解互联网架构的变迁
  3. not only but also
  4. mysql数据库:微信用户昵称emoji 怎么保存到数据库中。
  5. H3C Cloud Lab 华三模拟器下载网址
  6. 常用网站和遇到问题整理
  7. windows netsh设置代理服务器/端口转发
  8. 「Python海龟画图」利用海龟画笔绘制六芒星阵
  9. 北川邓家“刘汉小学”无一死亡奇迹背后的真相
  10. 最值得入手的开放式运动耳机有哪些,试试这几款骨传导运动耳机