澳门新萄京:详细示例,redis操作手册
分类:www.澳门新萄京赌场

一、安装redis:

1.下载:

wget http://download.redis.io/releases/redis-3.2.8.tar.gz

 2.解压

tar -zxvf redis-3.2.8.tar.gz

 

3.复制,放到/usr/local目录下

sudo mv ./redis-3.2.8 /usr/local/redis

 

4.进入到redis目录下

cd /usr/local/redis/

 

5.生成

sudo make

 

6.测量检验,时间会相比长

sudo make test

 

7.安装,将redis的一声令下安装到usr/local/bin/目录中

sudo make install

 

8.安装成功后,踏向usr/local/bin/目录中查看:

cd /usr/local/bin

 

 澳门新萄京 1

9.将配置文件复制放到/etc/redis目录下:

sudo cp /usr/local/redis/redis.conf /etc/redis/redis.conf

 

 可能刚初阶etc下未有redis目录,需求和睦手动创造二个redis文件夹。

以上在第6步的时候恐怕会遇见这么的难点:

You need tcl 8.5 or newer in order to run the Redis test
make: *** [test] Error 1

 

淹不可能:安装tcl 

wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz  
sudo tar xzvf tcl8.6.1-src.tar.gz  -C /usr/local/  
cd  /usr/local/tcl8.6.1/unix/  
sudo ./configure  
sudo make  
sudo make install 

 

一、redis简介

 

Redis是一种面向"键/值"对数据类型的内部存款和储蓄器数据库,能够满意大家对海量数据的读写供给。

redis的键只好是字符串

redis的值援助各个数据类型:

        1:字符串 string

        2:哈希 hash

        3:字符串列表 list

        4:字符串集结 set 不另行(只用于string卡塔 尔(英语:State of Qatar),冬辰

        5:有序聚焦sorted set ,不重复,有序

        6:HyperLogLog 结构(redis2.8.9本子才有,用来做基数总括的算法。卡塔 尔(英语:State of Qatar)

特点:

高品质(Redis读的进程是11W次/s,写的速度是8.1W次/s卡塔尔

原子性(保障数据的准头,原子操作,)

慎始而敬终存款和储蓄(二种方法奥德赛DB/快速照相,AOF/日志卡塔尔国

焦点结构(master-slave,负载均衡,高可用卡塔尔

集群(3.0版本)

 

 

利用:应用在高并发和实时伏乞的处境。

网易和讯

hash:关注列表,粉丝列表

string:和讯数,观者数(防止使用select count(*) from...)

sorted set:TopN,销路广天涯论坛

 

澳门新萄京 2

 

redis使用的是c语言实验的

 

Redis 简介

Redis 是一丝一毫开源免费的,据守BSD左券,是一个高品质的key-value数据库。

Redis 与其余 key - value 缓存付加物有以下五日特性:

  • Redis援助数据的悠久化,能够将内部存款和储蓄器中的数目保存在磁盘中,重启的时候能够重新加载实行应用。
  • Redis不止扶植简单的key-value类型的数量,同期还提供list,set,zset,hash等数据结构的囤积。
  • Redis扶助数据的备份,即master-slave情势的数据备份。

什么是redis?

1、Redis 缓存是基于 key - value 存款和储蓄的内部存款和储蓄器缓存;
2、提供list、set、zset、hash等数据结构类型;
3、扶持数据的备份, master-slave情势的数据备份;
4、帮忙数据的长久化,重启的时候能够重新加载使用;

二、 配置redis:

布署新闻在/etc/redis/redis.conf下,张开sudo vi /etc/redis/redis.conf。

主导配置选项:

绑定ip:bind 127.0.0.1

端口号:port 6379

是或不是以守护进度运转:daemonize yes  必得改为yes

数据库文件:dbfilename dump.db  

数据库文件存款和储蓄路径:dir /var/lib/redis  可改可不改,改的话提前创立好文件夹

日志文件:logfile /var/log/redis/redis-server.log  必供给改,提前创设好文件夹

数据库,默认有16个:database 16

主从复制:slaveof

配置小结:主要纠正两块:1,守护进程;2.日志文件路线

二、情形搭建

Redis 优势

  • 质量非常高 – Redis能读的速度是110000次/s,写的快慢是81000次/s 。
  • 加上的数据类型 – Redis援助二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的装有操作都以原子性的,意思就是依然成功实行或许战败完全不实行。单个操作是原子性的。三个操作也支撑职业,即原子性,通过MULTI和EXEC指令包起来。
  • 加上的表征 – Redis还支持 publish/subscribe, 通告, key 过期等等特色。

一、Redis 安装

三、启动redis:

1.基于安排文件运行redis服务器

sudo redis-server /etc/redis/redis.conf 

 

2.启动redis客户端:

redis-cli

 

3.输入ping命令测验:

127.0.0.1:6379> ping
PONG

 

4.关闭redis服务器:

ps aux|grep redis    # 查看redis进程号
kill -9 pid redis进程号    # 关闭redis服务器

 

澳门新萄京:详细示例,redis操作手册。5.切换数据库:暗许有15个,通过0-15来标志,暗中同意是率先个数据库0号数据库。

select n

 

率先安装c的编写翻译情形

yum -y install cpp

yum -y install binutils

yum -y install glibc

yum -y install glibc-kernheaders

yum -y install glibc-common

yum -y install glibc-devel

yum -y install gcc

yum -y install make

假设下面的软件都设置之后再试行make命令还报错,就要求在make命令后边加个选项了

make MALLOC=libc

澳门新萄京 3

澳门新萄京 4

 

澳门新萄京 5

澳门新萄京 6

 

澳门新萄京 7

澳门新萄京 8

 

 

澳门新萄京 9

澳门新萄京 10

 

 

 

澳门新萄京 11

澳门新萄京 12

 

澳门新萄京 13

澳门新萄京 14

 

澳门新萄京 15

澳门新萄京 16

 

澳门新萄京 17

澳门新萄京 18

 

 

Redis与其余key-value存款和储蓄有如何差异?

  • Redis有着更为复杂的数据结构並且提供对他们的原子性操作,那是三个不相同于别的数据库的前行路线。Redis的数据类型都以基于基本数据结构的同有时候对程序猿透明,无需进行额外的悬空。
  • Redis运维在内部存款和储蓄器中只是能够长久化到磁盘,所以在对两样数额集进行高效读写时索要衡量内部存款和储蓄器,因为数据量无法超过硬件内部存款和储蓄器。在内部存款和储蓄器数据库方面包车型客车另贰个亮点是,相比较在磁盘上亦然的目不暇接的数据结构,在内部存款和储蓄器中操作起来超级轻松,那样Redis能够做过多中间复杂性很强的事务。同有时间,在磁盘格式方面他们是风姿浪漫环扣生机勃勃环的以扩展的章程发生的,因为他俩并不须求举办随机探望。

Window 下安装

下载地址:https://github.com/MSOpenTech/redis/releases。

Redis 协助 32 位和 陆拾四个人。这几个必要基于你系统平台的实际上情况选拔,这里我们下载 Redis-x64-xxx.zip减去包到 C 盘,解压后,将文件夹重新命名称为 redis

澳门新萄京 19

image

张开一个 cmd 窗口 使用cd命令切换目录到 C:redis 运行 redis-server.exe redis.windows.conf

若是想方便的话,能够把 redis 的渠道加到系统的蒙受变量里,那样就省得再输路线了,前面的丰裕redis.windows.conf 能够轻便,尽管轻易,会启用暗中同意的。输入之后,会彰显如下界面:

澳门新萄京 20

Redis 安装

此刻另启叁个cmd窗口,原本的永不关闭,不然就不能够访谈服务端了。

切换成redis目录下运作 redis-cli.exe -h 127.0.0.1 -p 6379

安装键值对 set myKey abc

抽取键值对 get myKey

澳门新萄京 21

Redis 安装


四、redis的数量操作:

1.redis的蕴藏格式为key-value格式。key是字符串类型,value的档期的顺序有5种:string、hash、list、set、zset。

2.redis中关于键的广阔的操作:

2.1查看左右的键:keys *

2.2翻看某些键是不是存在,存在重返1不设有重临0:exists key1

2.3查看键的值对应的数据类型:type key1

2.4删减键值对:del key1 key2

2.5设置键的逾期时间,若无一些名暗许一向留存:expire key seconds

2.6查看键的灵光时间:ttl key1

2.7清空数据库:flushall

3.string类型的基本操作:

3.1保存

  • set key value  保存单个键值对
  • mset key1 value1 key2 value2  保存多少个键值对
  • setex key seconds value  设置键值和过期时间
  • append key value追加值

3.2获取

  • get key  获取单个
  • mget key1 key2  获取多个

3.3删除

  • del key

4 hash类型的基本操作:

4.1保存

hset key field value    #设置单个属性
hmset key field1 value1 field2 value2 ...    #设置多个属性

 

4.2获取

hkeys key    # 获取指定键的所有属性
hget key field    # 获取单个属性的值
hmget key field1 field2 ...    # 获取多个属性的值
hvals key    # 获取所有属性的值

 

4.3删除

del key    # 删除整个hash的键和值
hdel key field1 field2 ...    # 删除属性和属性对应的值

 

4.4关于hash类型的私有精晓:

能够将hash类型驾驭为用来存款和储蓄对象:

澳门新萄京 22

 

 5。list类型的基本操作:

5.1保存

lpush key value1 value2 ...    #从左侧依次插入数据
rpush key value1 value2 ...    #从右侧依次插入数据
linsert key before或after 现有元素 新元素    #从指定元素的前或后插入新元素

 

 5.2获取

lrange key start stop    

 

 start、stop为成分的下标索引,从左侧最初,第叁个要素为0,-1标志最终三个成分。获取具备的因素:lrange key 0 -1

5.3剔除内定成分

lrem key count value

 

 将列表中前count次面世的值为value的要素移除。

count > 0: 自始自终移除

count < 0: 从尾到头移除

count = 0: 移除全数

 6.set类型的基本操作

特征:严节集中、成分唯大器晚成性不重复、未有改变操作

6.1日增成分

sadd key member1 member2 ...

 

 6.2拿到成分

smembers key    # 返回所有元素

 

6.3去除钦点成分

srem key member1 member2 ...

 

 

 7.zset类型的数额操作

特性:有序集中、元素唯后生可畏性不另行、未有更换操作、每种成分都会波及三个double类型的权重,依照权重从小到大排列

7.1增加

zadd key score1 member1 score2 member2 ...

 

7.2获取

zrange key start stop  # 根据索引获取

zrangebyscore key min max  # 获取权重在min和max之间的数据
zscore key member  # 返回成员member的score值

 

7.3删除

zrem key member1 member2 ...    # 删除指定元素
zremrangebyscore key min max    #删除权重在指定范围的元素

澳门新萄京,redis安装配置(单机卡塔 尔(阿拉伯语:قطر‎

redis官网:

解压:tar -zxvf redis-2.8.19.tar.gz

编译、安装

make

make install(将redis-3.0.0/src目录上边包车型客车可实行文件拷贝到/usr/local/bin目录下边,成效是在任何目录下推行脚本无需钦点相对路线大概必要切换成路线技能进行脚本,约等于加多情况变量(将src配置到PATH卡塔尔国卡塔尔

 

加压缩后,推行make命令编写翻译redis

澳门新萄京 23

make install

澳门新萄京 24

 

拷贝配置文件

cp redis/redis.conf /etc/

澳门新萄京 25

改进配置文件redis.conf

澳门新萄京 26

daemonize yes(后台运维)

澳门新萄京 27

logfile /usr/local/redis/log(后台运营的日记文件寄放路线)

澳门新萄京 28

 

启动

redis-server /etc/redis.conf [--port 6379]

澳门新萄京 29

澳门新萄京 30

澳门新萄京 31

redis客商端(client,连选用当地的数据库卡塔 尔(阿拉伯语:قطر‎

redis 数据类型

Redis扶植多样数据类型:string(字符串卡塔尔,hash(哈希卡塔尔国,list(列表卡塔尔,set(群集卡塔 尔(阿拉伯语:قطر‎及zset(sorted set:有序集中)。

Linux 下安装

下载地址:http://redis.io/download,下载最新文书档案版本。

本学科使用的风靡文档版本为 2.8.17,下载并设置:

$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz 
$ tar xzf redis-2.8.17.tar.gz
$ cd redis-2.8.17
$ make

make完后 redis-2.8.17索引下会现出编译后的redis服务程序redis-server,还应该有用于测量检验的顾客端程序redis-cli,八个程序位于安装目录 src 目录下:

上面运转redis服务.

$ cd src
$ ./redis-server

介怀这种方法运营redis 使用的是私下认可配置。也得以通过运行参数告诉redis使用钦命布署文件使用下边三令五申运维。

$ cd src
$ ./redis-server redis.conf

redis.conf是一个默许的安排文件。大家能够依据供给利用自个儿的布局文件。

启航redis服务进度后,就能够动用测试客商端程序redis-cli和redis服务人机联作了。 举个例子:

$ cd src
$ ./redis-cli
redis>  set foo bar
OK
redis>  get foo 
"bar"

五、redis与python进行相互:

 1.在虚构境况中装置redis包:

pip install redis

 

 2.调用模块:

from redis import StrictRedis

 

 3.创立对象:

sr = StrictRedis(host='localhost', port=6379, db=0)  # 默认就是这样的值,不写也行。

 

 4.用sr那个指标操作redis,将redis中的命令当做函数让sr调用就ok。

redis-cli [-h 127.0.0.1] [-p 6379]

澳门新萄京 32

澳门新萄京 33

-h(连接的是哪贰个数据库)-p(是端口号卡塔 尔(英语:State of Qatar)

澳门新萄京 34

关闭

redis-cli shutdown

 

澳门新萄京 35

 

 

 

 

 

任何渠道都得以调用bin目录下的shell脚本,

澳门新萄京 36

澳门新萄京 37目录上面

澳门新萄京 38

(启动)redis-server

澳门新萄京 39

澳门新萄京 40

 

 

 

 

澳门新萄京:详细示例,redis操作手册。maven依赖

<dependencies>
    <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.9.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
        <version>2.4.2</version>
    </dependency>
</dependencies>

Ubuntu 下安装

在 Ubuntu 系统装置 Redis 能够运用以下命令:

$sudo apt-get update
$sudo apt-get install redis-server

六、Django框架中session存款和储蓄到redis中的配置

暗中认可情状下session是积累在数据库中的,不过当用session保存客商的事态时,客商频仍的会见服务器,会附加数据库的下压力,也会稳中有降顾客访谈的快慢。为了消除那些难点将session存款和储蓄到redis中。

先是种配备方式:(不采取Django中session私下认可的储存形式,间接将session存款和储蓄之处布置到redis中卡塔 尔(阿拉伯语:قطر‎

# 1.在虚拟环境中安装包
pip install django-redis-sessions==0.5.6

# 2.在Django项目的settings文件中增加下面的配置
SESSION_ENGINE = 'redis_sessions.session'
SESSION_REDIS_HOST = 'localhost'
SESSION_REDIS_PORT = 6379
SESSION_REDIS_DB = 2
SESSION_REDIS_PASSWORD = ''
SESSION_REDIS_PREFIX = 'session'

 

 第两种配备情势:(先将Django中的缓存设置为redis,然后将session的积攒地点设置为Django的缓存中卡塔 尔(阿拉伯语:قطر‎

#1.先在虚拟环境中安装包
pip install django_redis

#2. 设置redis作为django的缓存设置
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        # 把这里缓存你的redis服务器ip和port
        "LOCATION": "redis://172.16.179.142:6379/12",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

# 3.设置redis存储django的session信息
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"

 

daemonize yes(后台运行)

Jedis API 操作示例

启动 Redis

$ redis-server

logfile /usr/local/redis/log(日志文件)

 

 

 

 

 

 

 

Jedis 连接池

连续几天Jedis线程安全单列情势可安排三个redis数据源的连接池。

public class JedisApi {

    private static final Logger LOG = LoggerFactory.getLogger(JedisApi.class);

    private volatile static JedisApi jedisApi;

    /**
     * 保存多个连接源
     */
    private static Map<String, JedisPool> poolMap = new HashMap<String, JedisPool>();

    private JedisApi() {
    }

    /**
     * @Description: jedisPool 池
     * @Param: [ip, port]
     * @return: redis.clients.jedis.JedisPool
     * @Author: imdalai
     * @Date: 2018/1/15
     */
    private static JedisPool getPool(String ip, int port) {

        try {
            String key = ip   ":"   port;
            JedisPool pool = null;
            if (!poolMap.containsKey(key)) {
                JedisPoolConfig config = new JedisPoolConfig();
                config.setMaxIdle(RedisConfig.MAX_IDLE);
                config.setMaxTotal(RedisConfig.MAX_ACTIVE);
                //  在获取连接的时候检查有效性, 默认false
                config.setTestOnBorrow(true);
                //  在空闲时检查有效性, 默认false
                config.setTestOnReturn(true);
                pool = new JedisPool(config, ip, port, RedisConfig.TIME_OUT);
                poolMap.put(key, pool);
            } else {
                pool = poolMap.get(key);
            }
            return pool;
        } catch (Exception e) {
            LOG.error("init jedis pool failed ! "   e.getMessage(), e);
        }
        return null;
    }

    /**
     * @Description: 线程安全单列模式
     * @Param: []
     * @return: JedisApi
     * @Author: imdalai
     * @Date: 2018/1/15
     */
    public static JedisApi getRedisApi() {

        if (jedisApi == null) {
            synchronized (JedisApi.class) {
                if (jedisApi == null) {
                    jedisApi = new JedisApi();
                }
            }
        }
        return jedisApi;
    }

    /**
     * @Description: 获取一个jedis连接
     * @Param: [ip, port]
     * @return: redis.clients.jedis.Jedis
     * @Author: imdalai
     * @Date: 2018/1/15
     */
    public Jedis getRedis(String ip, int port) {
        Jedis jedis = null;
        int count = 0;
        while (jedis == null && count <= RedisConfig.RETRY_NUM) {
            try {
                jedis = getPool(ip, port).getResource();
            } catch (Exception e) {
                LOG.error("get redis failed ! "   e.getMessage(), e);
                count  ;
            }
        }
        return jedis;
    }

    /**
     * @Description: 释放jedis到jedisPool中
     * @Param: [jedis, ip, port]
     * @return: void
     * @Author: imdalai
     * @Date: 2018/1/15
     */
    public void closeRedis(Jedis jedis) {

        if (jedis != null) {
            try {
                jedis.close();
            } catch (Exception e) {
                LOG.error("colse jedis failed ! "   e.getMessage(), e);
            }
        }
    }
}

查看 redis 是或不是运维?

$ redis-cli

上述命令将张开以下终端:

redis 127.0.0.1:6379>

127.0.0.1 是本机 IP ,6379 是 redis 服务端口。将来大家输入 PING 命令。

redis 127.0.0.1:6379> ping
PONG

如上表达大家曾经打响安装了redis。

查进程ps –ef|grep redis

 

停止

澳门新萄京 41

悬停后要求再行启航才具步入

澳门新萄京 42

 

 

键(key)

public static void testKey() {
    System.out.println("====key功能展示====");
    try {
        jedis.select(0);
        System.out.println("清除数据:"   jedis.flushDB());
        System.out.println("判断某个键是否存在:"   jedis.exists("1"));
        System.out.println("新增{1,a}键值对:"   jedis.set("1", "a"));
        System.out.println(jedis.exists("1"));
        System.out.println("新增{2,b}键值对:"   jedis.set("2", "b"));
        System.out.println("系统中所有的键如下:"   jedis.keys("*").toString());
        System.out.println("删除键 1:"   jedis.del("1"));
        System.out.println("判断键 1是否存在:"   jedis.exists("1"));
        System.out.println("设置键 2的过期时间为5s:"   jedis.expire("2", 5));
        TimeUnit.SECONDS.sleep(2);
        System.out.println("查看键 2的剩余生存时间:"   jedis.ttl("2"));
        System.out.println("移除键 2的生存时间:"   jedis.persist("2"));
        System.out.println("查看键 2的剩余生存时间:"   jedis.ttl("2"));
        System.out.println("查看键 2所存储的值的类型:"   jedis.type("2"));
        System.out.println("查看键 2的值:"   jedis.get("2"));

        System.out.println("");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

输出结果:

====key功效展现====
消除数据:OK
认清有些键是不是存在:false
新增{1,a}键值对:OK
true
新增{2,b}键值对 :OK
系统中颇负的键如下:[1, 2]
删除键 1:1
认清键 1是或不是留存:false
设置键 2的超时时间为5s:1
查看键 2的剩下生存时间:3
移除键 2的活着时间:1
查看键 2的多余生存时间:-1
查看键 2所蕴藏的值的类型:string
查看键 2的值:b

二、redis常用配置

配备文件:redis.conf
周边配置项:

bind 127.0.0.1 [绑定ip地址,远程访谈请注释]
port 6379 [暗中同意访谈地址 6379]
daemonize yes [是或不是现在台进度<守护进度>运转]
dbfilename dump.rdb [积累数据的文书]
dir ./. [积累数据的文书所在路线

三、redis的性子【非常多据库】

多数据库

各种数据库对外都以以三个从0开端的雨后春笋数字命名,不帮忙自定义的    

redis私下认可协助14个数据库,能够透过改良databases参数来订正那个默许值

redis暗中同意选拔的是0号数据库

SELECT 数字: 能够切换数据库

八个数据库之间并非截然隔开分离的,flushall

 

 

 

0-15,改过配置文件(修正数值卡塔尔

 

澳门新萄京 43

 

澳门新萄京 44

数据库之间是互相隔断的

澳门新萄京 45

清空全数的数据库(停掉这几个命令卡塔尔

澳门新萄京 46

 

字符串、整型和浮点数

string是redis最中央的门类,你可见成与Memcached大同小异的品种,四个key对应贰个value。

string类型是二进制安全的。意思是redis的string能够包含别的数据。比方jpg图片也许类别化的指标。

string类型是Redis最主旨的数据类型,八个键最大能储存512MB。

字符串

public static void testString() {
    try {
        jedis.select(1);
        jedis.flushDB();
        System.out.println("====字符串功能展示====");
        System.out.println("增:");
        System.out.println(jedis.set("a", "1"));
        System.out.println(jedis.set("b", "2"));
        System.out.println(jedis.set("c", "3"));
        System.out.println("删除键 a:"   jedis.del("a"));
        System.out.println("获取键 a:"   jedis.get("a"));
        System.out.println("修改键 b:"   jedis.set("b", "bChanged"));
        System.out.println("获取键 b 的值:"   jedis.get("b"));
        System.out.println("在键 c后面加入值:"   jedis.append("c", "End"));
        System.out.println("获取键 c的值:"   jedis.get("c"));
        System.out.println("增加多个键值对:"   jedis.mset("key01", "value01", "key02", "value02", "key03", "value03"));
        System.out.println("获取多个键值对:"   jedis.mget("key01", "key02", "key03"));
        System.out.println("获取多个键值对:"   jedis.mget("key01", "key02", "key03", "key04"));
        System.out.println("删除多个键值对:"   jedis.del(new String[]{"key01", "key02"}));
        System.out.println("获取多个键值对:"   jedis.mget("key01", "key02", "key03"));

        jedis.flushDB();
        System.out.println("新增键值对防止覆盖原先值:");
        System.out.println(jedis.setnx("key001", "value001"));
        System.out.println(jedis.setnx("key002", "value002"));
        System.out.println(jedis.setnx("key002", "value002-new"));
        System.out.println("获取键key001的值:"   jedis.get("key001"));
        System.out.println("获取键key002的值:"   jedis.get("key002"));

        System.out.println("新增键值对并设置有效时间:");
        System.out.println(jedis.setex("key003", 2, "value003"));
        System.out.println("获取键key003的值:"   jedis.get("key003"));
        TimeUnit.SECONDS.sleep(3);
        System.out.println("获取键key003的值:"   jedis.get("key003"));

        System.out.println("获取原值,更新为新值:");
        System.out.println(jedis.getSet("key002", "key2GetSet"));
        System.out.println("获取键key002的值:"   jedis.get("key002"));

        System.out.println("截取key002的值的字符串:"   jedis.getrange("key002", 2, 5));

        System.out.println("");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

出口结果:

====字符串成效呈现====
增:
OK
OK
OK
删除键 a:1
获取键 a:null
修改键 b:OK
获取键 b 的值:bChanged
在键 c后边参预值:4
获取键 c的值:3End
追加多少个键值对:OK
得到几个键值对:[value01, value02, value03]
收获八个键值对:[value01, value02, value03, null]
除去三个键值对:2
收获三个键值对:[null, null, value03]
增加产能键值对防卫覆盖原先值:
1
1
0
获取键key001的值:value001
获取键key002的值:value002
增产键值对并安装有效时间:
OK
获取键key003的值:value003
获取键key003的值:null
拿到原值,更新为新值:
value002
获取键key002的值:key2GetSet
截取key002的值的字符串:y2Ge

莫西干发型和浮点数

public static void testNumber() {
    try {
        jedis.select(2);
        jedis.flushDB();
        System.out.println("====整数和浮点数功能展示====");
        jedis.set("key001", "1");
        jedis.set("key002", "2");
        jedis.set("key003", "3.3");
        System.out.println("获取键key001的值:"   jedis.get("key001"));
        System.out.println("获取键key002的值:"   jedis.get("key002"));
        System.out.println("将键key001的值 1:"   jedis.incr("key001"));
        System.out.println("获取键key001的值:"   jedis.get("key001"));
        System.out.println("将键key002的值-1:"   jedis.decr("key002"));
        System.out.println("获取键key002的值:"   jedis.get("key002"));
        System.out.println("将key001的值加上整数5:"   jedis.incrBy("key001", 5));
        System.out.println("获取key001的值:"   jedis.get("key001"));
        System.out.println("将key002的值减去整数5:"   jedis.decrBy("key002", 5));
        System.out.println("获取key002的值:"   jedis.get("key002"));

        System.out.println("");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

出口结果:

====整数和浮点数功用显示====
获取键key001的值:1
获取键key002的值:2
将键key001的值 1:2
获取键key001的值:2
将键key002的值-1:1
获取键key002的值:1
将key001的值加上整数5:7
获取key001的值:7
将key002的值减去整数5:-4
获取key002的值:-4

三、redis的数据类型

四、redis基本功命令

收获适合法则的键名称

keys 表达式(?,* ,[],?)

判别贰个键是还是不是存在

exists key

删除键

del key

del key1 key2

批量删减

redis-cli del `redis-cli keys "key*"`

收获键值的数据类型type

重临值可能是那五体系型(string,hash,list,set,zset卡塔 尔(英语:State of Qatar)

介怀:redis不区分命令大小写

 

 

 

List(列表)

Redis 列表是粗略的字符串列表,遵照插入顺序排序。你能够拉长三个要素到列表的头顶(侧边卡塔 尔(英语:State of Qatar)恐怕尾巴部分(右侧卡塔尔国。

public static void testList() {

    jedis.select(3);
    jedis.flushDB();
    System.out.println("====列表list功能展示====");
    jedis.lpush("collections", "ArrayList", "LinkedList", "Vector", "Stack", "queue");
    jedis.lpush("collections", "HashMap");
    jedis.lpush("collections", "HashMap");
    jedis.lpush("collections", "HashMap");
    jedis.lpush("collections", "HashMap");
    jedis.lpush("number", "1");
    jedis.lpush("number", "2");
    jedis.lpush("number", "3");
    // -1 代表倒数第一个
    System.out.println("collections 的内容:"   jedis.lrange("collections", 0, -1));
    System.out.println("collections区间0-2内容:"   jedis.lrange("collections", 0, 2));
    System.out.println("=================");
    // 删除列表指定的值 ,第二个参数为删除的个数(有重复时),后add进去的值先被删,类似于出栈
    System.out.println("删除指定元素个数:"   jedis.lrem("collections", 2, "HashMap"));
    System.out.println("collections 的内容:"   jedis.lrange("collections", 0, -1));
    System.out.println("删除区间0-4以外的数据:"   jedis.ltrim("collections", 0, 4));
    System.out.println("collections 的内容:"   jedis.lrange("collections", 0, -1));
    System.out.println("collections列表出栈(左端):"   jedis.lpop("collections"));
    System.out.println("collections的内容:"   jedis.lrange("collections", 0, -1));
    System.out.println("collections添加元素,从列表右端,与lpush相对应:"   jedis.rpush("collections", "EnumMap"));
    System.out.println("collections的内容:"   jedis.lrange("collections", 0, -1));
    System.out.println("collections列表出栈(右端):"   jedis.rpop("collections"));
    System.out.println("collections的内容:"   jedis.lrange("collections", 0, -1));
    System.out.println("修改collections指定下标1的内容:"   jedis.lset("collections", 1, "LinkedArrayList"));
    System.out.println("collections的内容:"   jedis.lrange("collections", 0, -1));
    System.out.println("=================");
    System.out.println("collections的长度:"   jedis.llen("collections"));
    System.out.println("获取collections下标为2的元素:"   jedis.lindex("collections", 2));
    System.out.println("=================");
    jedis.lpush("sortedList", "3", "6", "2", "0", "7", "4");
    System.out.println("sortedList排序前:"   jedis.lrange("sortedList", 0, -1));
    System.out.println(jedis.sort("sortedList"));
    System.out.println("sortedList排序后:"   jedis.lrange("sortedList", 0, -1));

    System.out.println("");  
}

出口结果:

====列表list功效呈现====
collections 的内容:[HashMap, HashMap, HashMap, HashMap, queue, Stack, Vector, LinkedList, ArrayList]
collections区间0-2内容:[HashMap, HashMap, HashMap]
=================
删去内定成分个数:2
collections 的内容:[HashMap, HashMap, queue, Stack, Vector, LinkedList, ArrayList]
删除区间0-4以外的数码:OK
collections 的内容:[HashMap, HashMap, queue, Stack, Vector]
collections列表出栈(左端卡塔尔:HashMap
collections的内容:[HashMap, queue, Stack, Vector]
collections添港成分,从列表右端,与lpush相对应:5
collections的内容:[HashMap, queue, Stack, Vector, EnumMap]
collections列表出栈(右端卡塔尔国:EnumMap
collections的内容:[HashMap, queue, Stack, Vector]
改善collections钦命下标1的剧情:OK
collections的内容:[HashMap, LinkedArrayList, Stack, Vector]
=================
collections的长度:4
获取collections下标为2的元素:Stack
================
sortedList排序前:[4, 7, 0, 2, 6, 3]
[0, 2, 3, 4, 6, 7]
sortedList排序后:[4, 7, 0, 2, 6, 3]

redis的数目存款和储蓄:key=value 键值对

keys *(查询全部的键,*是通配符)

澳门新萄京 47

keys crxy*

 

key crxy?

澳门新萄京 48

?(转义字符查询问号卡塔 尔(英语:State of Qatar)

集合(Set)

Redis的Set是string类型的严节聚集。

谋面是透过哈希表完结的,所以增添,删除,查找的复杂度都以O(1)。

public static void testSet() {
    try {
        jedis.select(4);
        jedis.flushDB();
        System.out.println("========测试集合(set)=========");
        System.out.println("集合set添加数据:"   jedis.sadd("setElement", "e1", "e7", "e3", "e6", "e0", "e4"));
        System.out.println(jedis.sadd("setElement", "e6"));
        System.out.println("setElement的所有元素:"   jedis.smembers("setElement"));
        System.out.println("删除元素e0:"   jedis.srem("setElement", "e0"));
        System.out.println("setElement的所有元素:"   jedis.smembers("setElement"));
        System.out.println("删除两个元素e7和e6:"   jedis.srem("setElement", "e7", "e6"));
        System.out.println("setElement的所有元素为:"   jedis.smembers("setElement"));
        System.out.println("随机的移除集合中的一个元素:"   jedis.spop("setElement"));
        System.out.println("随机的移除集合中的一个元素:"   jedis.spop("setElement"));
        System.out.println("setElement的所有元素为:"   jedis.smembers("setElement"));
        System.out.println("setElement中包含元素的个数:"   jedis.scard("setElement"));
        System.out.println("e3是否在setElement中:"   jedis.sismember("setElement", "e3"));
        System.out.println("e1是否在setElement中:"   jedis.sismember("setElement", "e1"));

        System.out.println("=================");
        System.out.println(jedis.sadd("setElement1", "e1", "e2", "e4", "e3", "e0", "e8", "e7", "e5"));
        System.out.println(jedis.sadd("setElement2", "e1", "e2", "e4", "e3", "e0", "e8"));
        System.out.println("将setElement1中删除e1并存入setElement3中:"   jedis.smove("setElement1", "setElement3", "e1"));
        System.out.println("将setElement1中删除e2并存入setElement3中:"   jedis.smove("setElement1", "setElement3", "e2"));
        System.out.println("setElement1中的元素:"   jedis.smembers("setElement1"));
        System.out.println("setElement3中的元素:"   jedis.smembers("setElement3"));

        System.out.println("集合运算:");
        System.out.println("setElement1中的元素:"   jedis.smembers("setElement1"));
        System.out.println("setElement2中的元素:"   jedis.smembers("setElement2"));
        System.out.println("setElement1和setElement2的交集:"   jedis.sinter("setElement1", "setElement2"));
        System.out.println("setElement1和setElement2的并集:"   jedis.sunion("setElement1", "setElement2"));
        // setElement1中有,setElement2中没有
        System.out.println("setElement1和setElement2的差集:"   jedis.sdiff("setElement1", "setElement2"));

        System.out.println("");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

出口结果:

========测验集结(set卡塔尔=========
群集set添扩展少:6
0
setElement的有所因素:[e3, e6, e1, e7, e0, e4]
剔除成分e0:1
setElement的保有因素:[e6, e3, e1, e7, e4]
剔除四个因素e7和e6:2
setElement的富有因素为:[e3, e1, e4]
随机的移除会集中的一个成分:e3
自由的移除会集中的一个成分:e4
setElement的保有因素为:[e1]
setElement中包蕴成分的个数:1
e3是否在setElement中:false
e1是否在setElement中:true
=================
8
6
将setElement1中删除e1并存入setElement3中:1
将setElement1中删除e2并存入setElement3中:1
setElement第11中学的成分:[e5, e8, e3, e7, e0, e4]
setElement3中的成分:[e1, e2]
聚拢运算:
setElement1中的成分:[e5, e8, e3, e7, e0, e4]
setElement第22中学的成分:[e3, e4, e2, e8, e1, e0]
setElement1和setElement2的交集:[e3, e4, e8, e0]
setElement1和setElement2的并集:[e5, e8, e3, e1, e7, e0, e2, e4]
setElement1和setElement2的差集:[e5, e7]

key<键>的数据类型:字符串

查询键是还是不是存在exists crxy

 

 

澳门新萄京 49

 

hash

Redis hash 是三个键值(key=>value)对集中。

Redis hash是三个string类型的田野(field)和value的映射表,hash特别符合用来存款和储蓄对象。

public static void testHash() {

    try {
        System.out.println("=======集合(Set)=======");
        jedis.select(5);
        jedis.flushDB();
        Map<String, String> map = new HashMap<String, String>();
        map.put("key001", "value001");
        map.put("key002", "value002");
        map.put("key003", "value003");
        jedis.hmset("hash", map);
        jedis.hset("hash", "key004", "value004");
        // return Map<String,String>
        System.out.println("散列hash的所有键值对为:"   jedis.hgetAll("hash"));
        // return Set<String>
        System.out.println("散列hash的所有键为:"   jedis.hkeys("hash"));
        // return List<String>
        System.out.println("散列hash的所有值为:"   jedis.hvals("hash"));
        System.out.println("将key006保存的值加上一个整数,如果key006不存在则添加key006:"   jedis.hincrBy("hash", "key006", 6));
        System.out.println("散列hash的所有键值对为:"   jedis.hgetAll("hash"));
        System.out.println("将key006保存的值加上一个整数,如果key006不存在则添加key006:"   jedis.hincrBy("hash", "key006", 3));
        System.out.println("散列hash的所有键值对为:"   jedis.hgetAll("hash"));
        System.out.println("删除一个或者多个键值对:"   jedis.hdel("hash", "key002"));
        System.out.println("散列hash的所有键值对为:"   jedis.hgetAll("hash"));
        System.out.println("散列hash中键值对的个数:"   jedis.hlen("hash"));
        System.out.println("判断hash中是否存在key002:"   jedis.hexists("hash", "key002"));
        System.out.println("判断hash中是否存在key003:"   jedis.hexists("hash", "key003"));
        System.out.println("获取hash中的值:"   jedis.hmget("hash", "key003"));
        System.out.println("获取hash中的值:"   jedis.hmget("hash", "key003", "key004"));

        System.out.println("");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

出口结果:

=======集合(Set)=======
散列hash的具备键值对为:{key004=value004, key003=value003, key002=value002, key001=value001}
散列hash的全部键为:[key004, key003, key002, key001]
散列hash的全数值为:[value001, value003, value002, value004]
将key006保存的值加上一个整数,纵然key006不设有则增加key006:6
散列hash的兼具键值对为:{key004=value004, key003=value003, key006=6, key002=value002, key001=value001}
将key006保存的值加上三个整数,倘使key006不设有则增加key006:9
散列hash的有着键值对为:{key004=value004, key003=value003, key006=9, key002=value002, key001=value001}
剔除三个照旧八个键值对:1
散列hash的享有键值对为:{key004=value004, key003=value003, key006=9, key001=value001}
散列hash中键值没错个数:4
认清hash中是或不是留存key002:false
决断hash中是否留存key003:true
获取hash中的值:[value003]
获取hash中的值:[value003, value004]

value<值的类别>:

string字符串
hash哈希
list列表
set集合
zset有序集中

删除键

(integer(整数卡塔 尔(英语:State of Qatar),重临值是2,表达成功删除2个卡塔尔

 

澳门新萄京 50

在外界试行key *操作

澳门新萄京 51

 

在外场批量刨除满足有些条件的键,反引号实施命令并得到重返值,相当于西子行redis-cli,进入后再举行删除

澳门新萄京 52

 

将下令传给脚本实践

得到键的类别 澳门新萄京 53

 

 

redis的help命令

"help @<group>" to get a list of commands in <group>

 

"help <command>" for help on <command>

 

"help <tab>" to get a list of possible help topics

 

"quit" to exit

 

澳门新萄京 54

 

 

列出的命令都以足以操作string类型的

澳门新萄京 55

 

按tab补全命令(小手艺卡塔尔

澳门新萄京 56

 

 

不变集中

zset(sorted set:有序集中)
Redis zset 和 set 同样也是string类型成分的会晤,且不容许再度的分子。
不等的是各种成分都会涉嫌三个double类型的分数。redis正是经过分数来为集聚中的成员进行从小到大的排序。

zset的分子是有一无二的,但分数(score)却足以再一次。

public static void testSortSet() {

    try {
        System.out.println("=======有序集合=======");
        jedis.select(6);
        jedis.flushDB();
        Map<String, Double> map = new HashMap<String, Double>();
        map.put("key2", 1.2);
        map.put("key3", 4.0);
        map.put("key4", 5.0);
        map.put("key5", 0.2);
        System.out.println(jedis.zadd("zset", 3, "key1"));
        System.out.println(jedis.zadd("zset", map));
        System.out.println("zset中的所有元素:"   jedis.zrange("zset", 0, -1));
        System.out.println("zset中的所有元素:"   jedis.zrangeWithScores("zset", 0, -1));
        System.out.println("zset中的所有元素:"   jedis.zrangeByScore("zset", 0, 100));
        System.out.println("zset中的所有元素:"   jedis.zrangeByScoreWithScores("zset", 0, 100));
        System.out.println("zset中key2的分值:"   jedis.zscore("zset", "key2"));
        System.out.println("zset中key2的排名:"   jedis.zrank("zset", "key2"));
        System.out.println("删除zset中的元素key3:"   jedis.zrem("zset", "key3"));
        System.out.println("zset中的所有元素:"   jedis.zrange("zset", 0, -1));
        System.out.println("zset中元素的个数:"   jedis.zcard("zset"));
        System.out.println("zset中分值在1-4之间的元素的个数:"   jedis.zcount("zset", 1, 4));
        System.out.println("key2的分值加上5:"   jedis.zincrby("zset", 5, "key2"));
        System.out.println("key3的分值加上4:"   jedis.zincrby("zset", 4, "key3"));
        System.out.println("zset中的所有元素:"   jedis.zrange("zset", 0, -1));

        System.out.println("");

    } catch (Exception e) {
        e.printStackTrace();
    }
}

输出结果:

=======有序集合=======
1
4
zset中的全体因素:[key5, key2, key1, key3, key4]
zset中的全体因素:[[[107, 101, 121, 53],0.2], [[107, 101, 121, 50],1.2], [[107, 101, 121, 49],3.0], [[107, 101, 121, 51],4.0], [[107, 101, 121, 52],5.0]]
zset中的全体因素:[key5, key2, key1, key3, key4]
zset中的全部因素:[[[107, 101, 121, 53],0.2], [[107, 101, 121, 50],1.2], [[107, 101, 121, 49],3.0], [[107, 101, 121, 51],4.0], [[107, 101, 121, 52],5.0]]
zset中key2的分值:1.2
zset中key2的排名:1
剔除zset中的成分key3:1
zset中的全体因素:[key5, key2, key1, key4]
zset兰秋素的个数:4
zset中分值在1-4之内的要素的个数:2
key2的分值加上5:6.2
key3的分值加上4:4.0
zset中的全数因素:[key5, key1, key3, key4, key2]

3.1 keys

keys pattern 重回相配格局的富有keys
keys * : 查看该数据库中保有的key
type key 查看key类型
ttl key 再次来到key的结余过期时间,-1意味key不设有或许还没安装过过期时间
exists key 测量检验key是或不是留存
del key1 key2 … keyN
randomkey 再次回到当前数据库随机筛选的二个key,如数据库是空的,则赶回空串
persist key : 撤废掉key的逾期时间
exprie key seconds 为key设置过期时间,单位s。重临1打响,0意味着key已安装过过期时间或然空头支票

五、redis数据类型之string

字符串类型是redis中最中央的数据类型,它能储存任何款式的剧情,包括二进制数据,以至是一张图纸(二进制内容)。多个字符串类型的值存款和储蓄的最大体量是1GB

命令

set/get(setnx)

mset/mget

incr/decr/incrby/decrby/incrbyfloat

append(string键,若是积攒的是2.1,可以认为那是个字符串,它能够调换为integer大概float类型卡塔 尔(英语:State of Qatar)

strlen(查看值的尺寸卡塔尔国

可到官方网址查阅

 

命令

set/get(setnx)

mset/mget(设置多个键值/查看八个键值卡塔尔

澳门新萄京 57

 

setnx会推断是还是不是处在(set直接赋值,不会判定值是还是不是存在卡塔 尔(阿拉伯语:قطر‎

澳门新萄京 58

 

 

incr(每一次递扩展1,前提是值是数字类型,若不是则会报错卡塔 尔(阿拉伯语:قطر‎

澳门新萄京 59

 

 

依次减少删除1(decr卡塔尔国

澳门新萄京 60

 

每一遍递扩展几incrby

澳门新萄京 61

 

能够是小数和负数

澳门新萄京 62

 

拼接append,获取字符串长度(strlen卡塔 尔(英语:State of Qatar)

澳门新萄京 63

 

6意味着字符串的尺寸

 

 

参考

http://www.runoob.com/redis/redis-tutorial.html
redisAPI轻巧利用
API收拾原处-朱小斯

3.2 string字符串操作

string 是 redis 最基本的项目,而且 string 类型是二进制安全的。意思是 redis 的 string 可以分包别的数据。比如 jpg 图片恐怕类别化的靶子。从内部落到实处来看其实 string 能够充任 byte 数组,最大上限是 1G 字节。上面是 string 类型的定义。

set key value :给一个key赋值value
setex key seconds value:给一个key设置值value,过期时间seconds
mset key value [key value]:设置多个键值对

get key:根据key获取一个值
mget key [key]:根据多个key获取多个值

incr key :将key对应的值 1
incrby key increment:将key对应的值 increment
decr key:将key对应的值-1
decrby key increment:将key对应的值-increment

append key value:将value的值拼接到x后面
strlen key:获取key对应的值的长度

六、redis数据类型之hash

hash类型的值存款和储蓄了字段和字段值的照射,字段值只好是字符串,不扶植任何数据类型。hash类型的键至多能够积累2^32-1个字段。

hash类型切合积累对象:如图:1-1和1-2

redis可感觉其余键增减字段而不影响此外键

命令

hset/hget/hmset/hmget/hgetall(hsetnx)

hexists,判别键中的属性是或不是留存

hincrby(hash类型没有hincr命令)

hdel

hkeys/hvals

hlen(获取键中满含几个字段)

 

 

 

 

澳门新萄京 64

key=value

(键=值)

 

澳门新萄京 65

hset(积攒卡塔尔user:100(那是个有意义键名,客户:顾客ID,方便以后查找卡塔 尔(阿拉伯语:قطر‎,hget(查询卡塔尔国

澳门新萄京 66

 

hmset(同有时候安装多少个属性卡塔 尔(英语:State of Qatar),hmget(同一时候询问四个个性卡塔尔Gender0、1性别是男或女

澳门新萄京 67

hsetnx(要是有就创建,不然不创立卡塔尔国

澳门新萄京 68

 

依次增加操作

hincrby

 

澳门新萄京 69

(hdel卡塔尔删除有个别字段

hget(查询键值卡塔尔国

澳门新萄京 70

 

澳门新萄京 71

 

 

exists user:100(通用查询键是不是存在卡塔 尔(英语:State of Qatar)

 

3.3 hash(用于存款和储蓄对象)【键值对】

redis hash 是三个 string 类型的 田野同志 和 value 的映射表。它的丰硕,删除操作都以 O(1) (平均卡塔尔国.hash极其符合用于存款和储蓄对象。相较于将目的的各种字段存成单个 string 类型。将叁个对象存储在 hash 类型中会占用更加少的内存,况兼能够更实惠的存取整个对象。本省部存款和储蓄器的因由是新建三个hash 对象时发轫是用 zipmap(又称作 small hash卡塔尔国来囤积的。那些 zipmap 其实而不是 hash table,可是 zipmap 相比较符合规律的 hash 完结能够节省数不清 hash 本人供给的有个别元数据存款和储蓄开支。固然 zipmap 的增加,删除,查找都以O(n),不过出于常常对象的 田野(field) 数量都不太多。所以使用 zipmap 也是全速的,也正是说增添删减平均依旧 O(1)。假设 田野先生 可能 value 的大大小小超过一定范围后, redis 会在里边自行将 zipmap替换成健康的 hash 达成. 那些约束能够在配置文件中钦命。

hset key field value 设置 hash field 为指定值,如果 key 不存在,则先创建

hget key field 获取指定的 hash field

hmget key filed1....fieldN 获取全部指定的 hash filed

hmset key filed1 value1 ... filedN valueN 同时设置 hash 的多个 field

hincrby key field integer 将指定的 hash filed 加上给定值

hexists key field 测试指定 field 是否存在

hdel key field 删除指定的 hash field

hlen key 返回指定 hash 的 field 数量

hkeys key 返回 hash 的所有 field

hvals key 返回 hash 的所有 value

hgetall key 返回 hash 的所有 filed 和 value

七、redis数据类型之list

list是二个静止的字符串列表,列表内部得以达成是利用双向链表(linked list)完毕的。

list还足以视作队列使用(前面讲)

叁个列表类型的键最多能容纳2^32-1个因素。

命令

lpush/rpush/lpop/rpop

llen/lrange(-1表示最后二个因素的岗位,-2倒多次之个因素)

lrem(lrem key count value卡塔尔count分为两种状态

count > 0 : 从表头伊始向表尾寻找,移除与 value 相等的要素,数量为 count 。

count < 0 : 从表尾初始向表头寻觅,移除与 value 相等的要素,数量为 count 的相对值。

count = 0 : 移除表中保有与 value 相等的值。

lindex(查询钦命角标数据)

lset(更正钦命角标的成分)

ltrim(截取)

linsert before|after(向钦点成分前后插入成分)

rpoplpush:将成分从贰个列表转到另一个列表

 

 

Lpush是右臂插入,rpush是从列表侧面插入数据

澳门新萄京 72

 

lpop(从列表左侧弹出元素,弹出后就是删除列表中的成分卡塔 尔(英语:State of Qatar),rpop(从列表左边弹出成分卡塔尔

澳门新萄京 73

 

负数就是获取最终叁个要素的角标(当无法获知list里面有稍稍个因素时,-1当成最终三个因素的角标卡塔尔

澳门新萄京 74

 

llen list是赢得列表成分的尺寸

 

澳门新萄京 75

 

lrem list 2 a(正数,从列表的右边手最初查找,将正数个要素删掉,负数正是从侧面查找,删除相对值个成分卡塔 尔(阿拉伯语:قطر‎

澳门新萄京 76

lrem list -1 a右侧

澳门新萄京 77

lrem list 0 a(倘使是0就能够删除全数因素卡塔 尔(阿拉伯语:قطر‎

澳门新萄京 78

 

lset匡正钦定角标的值

澳门新萄京 79

ltrim截取

澳门新萄京 80

插入

澳门新萄京 81

澳门新萄京 82

澳门新萄京 83

 

澳门新萄京 84

 

3.4 list列表:有序存款和储蓄两个数据

list类型实质是多个种种成分都以string类型的双向链表,所以push和pop命令的算法时间复杂度都是O(1),另外list还有恐怕会记录链表的长短,所以llen操作也是O(1)。链表的最大尺寸是(2的三十柒次方-1)。大家能够透过push,pop操作从链表的底部大概尾巴部分加多删减元素。这使得list既可以够用作栈,也得以用作队列。有趣的是list的 pop 操作还也可以有拥塞版本的。当大家[lr]pop四个list对象是,假使list是空,或许空中楼阁,会即刻再次回到nil。然则窒碍版本的b[lr]pop 能够则可以隔绝,当然能够加超时时间,超时后也会回来nil。

lpush key value [value]:列表头部增加多个数据
rpush key value [value]:列表尾部增加多个数据
linsert key before | after privot value:在一个元素钱/后插入数据
lset key index value:设置指定索引的元素的值

lpop key:删除并且获取key对应的list第一个元素
rpop key:删除并且获取key对应的list最后一个元素
lrange key start stop:返回存在在key的list中指定范围的数据

llen key:获取列表的长度
lindex key index:获取列表中索引对应的元素
ltrim key start stop:获取列表中start~stop组成的新的列表

八、redis数据类型之set

set集结中的成分都以不另行的,冬辰的,一个集结类型键能够积累至多 2^23-1(long类型的最大值卡塔 尔(英语:State of Qatar)个因素

set集结类型和list列表类型的相同之处,如图:2-1所示

命令

sadd/smembers/srem/sismember

sdiff/sinter(交集)/sunion(并集)

sdiffstore/sinterstore/sunionstore

scard(获取集结长度)/spop(随机从群集中抽取并剔除三个成分)

srandmember key [count]

假如 count 为正数,且小于集结基数,那么命令归来叁个暗含 count 个成分的数组,数组中的成分各不雷同。就算 count 大于等于会集基数,那么重返整个集结。

假使 count 为负数,那么命令归来多个数组,数组中的成分只怕会再次现身行反革命复,而数组的尺寸为 count 的绝对值。

 

澳门新萄京 85

sadd set a(随机插入a元素到set名称的聚合卡塔 尔(阿拉伯语:قطر‎smembers set(获取集合里面包车型客车具有的要素,成分是冬辰的卡塔 尔(英语:State of Qatar)

澳门新萄京 86

Srem set a b(删除群集里面包车型地铁一点因素卡塔尔国(判定集结是还是不是存在有些成分,再次回到值1/0(存在/不设有卡塔 尔(英语:State of Qatar)卡塔 尔(阿拉伯语:قطر‎

澳门新萄京 87

 

sdiff set set1(求集结set有的成分而集合set1却尚无的成分,集合顺序沟通改造求值也会调换卡塔 尔(英语:State of Qatar)

澳门新萄京 88

 

sinter(求交集,会集顺序不影响卡塔 尔(阿拉伯语:قطر‎

澳门新萄京 89

并集

澳门新萄京 90

sunionstore aaa set set1 (将set和set1 并集积存在aaa卡塔 尔(英语:State of Qatar)

澳门新萄京 91

 

澳门新萄京 92

 

澳门新萄京 93

 

srandmember set1 2(从群集中随机重回2个要素,2是正数,重临值小于等于群集成分数量,成分值不另行卡塔 尔(阿拉伯语:قطر‎

 

澳门新萄京 94

负数取的成分也许重新

澳门新萄京 95

 

3.5 set集合:冬辰存款和储蓄多少个数据

redis 的 set 是 string 类型的冬日汇集。 set 成分最大能够富含(2 的 二15次方-1)个因素。 set 的是通 过 hash table 达成的,所以加多,删除,查找的复杂度都以 O(1)。 hash table 会随着增长可能去除自 动的调解大小。供给潜心的是调动 hash table 大刻钟候必要一齐(获取写锁卡塔尔国会梗塞其余读写操作。

sadd key value 增添一个 string 成分到,key 对应的 set 集合中,成功再次回到1,假如成分已经在汇集中回到 0,key 对应的 set 一纸空文再次来到错误

srem key value 从 key 对应 set 中移除给定成分,成功再次回到 1,假如 value 在会集中不设有也许key 一纸空文重回 0,假使 key 对应的不是 set 类型的值重临错误

spop key 删除并回到 key 对应 set 中自由的二个因素,若是 set 是空或然key 一纸空文重返 nil

srandmember key 同 spop,随机取 set 中的一个要素,不过不删除成分

smove srckey dstkey value 从 srckey 对应 set 中移除 value 并加多到 dstkey 对应 set 中,整个操作是原子的。成功重回 1,即便 value 在 srckey 中一纸空文重临 0,借使 key 不是 set 类型重临错误

scard key 重回 set 的要素个数,若是 set 是空也许 key 不真实重回 0

sismember key value 决断 value 是或不是在 set 中,存在重返 1, 0 表示空中楼阁可能 key 不设有

smembers key 重回 key 对应 set 的装有因素,结果是严节的

set 交、并、差集

sinter key1 key2...keyN 返回所有给定 key 的交集
sinterstore dstkey key1...keyN 同 sinter,但是会同时将交集存到 dstkey 下
sunion key1 key2...keyN 返回所有给定 key 的并集
sunionstore dstkey key1...keyN 同 sunion,并同时保存并集到 dstkey 下
sdiff key1 key2...keyN 返回所有给定 key 的差集
sdiffstore dstkey key1...keyN 同 sdiff,并同时保存差集到 dstkey 下

3.6 zset会集:有序存款和储蓄四个数据

和 set 同样, sorted set 也是 string 类型元素的集合,差别的是每一种成分都会波及贰个 double 类型 的 score ,成分顺序有score决定。 sorted set 的贯彻是 skip list 和 hash table 的混合体。 当成分被增多到集合中时,叁个因素到 score 的照射被增添到 hash table 中,所以给定三个要素获得 score 的付出是 O(1),另二个 score 到元素的映照被增多到 skip list 并根据 score 排序,所以就能够长久以来的拿走集合中的成分。

zadd key score member 添加元素到集合,元素在集合中存在则更新对应 score,当该member已存在时,
返回0,并更新该member的score值

zrem key member 删除指定元素, 1 表示成功,如果元素不存在返回 0

zincrby key n member 增加对应 member 的 score 值,然后移动元素并保持 skip list 保持有序。
返回更新后的 score 值

zrank key member 返回指定元素在集合中的排名(下标) ,集合中元素是按 score 从小到大排序的

zrevrank key member 同上,但是集合中元素是按 score 从大到小排序

zrange key start end 类似 lrange 操作从集合中去指定区间的元素。返回的是有序结果

zrevrange key start end 同上,返回结果是按 score 逆序的

zrangebyscore key min max 返回集合中 score 在给定区间的元素

zcount key min max 返回集合中 score 在给定区间的数量

zcard key 返回集合中元素个数

zscore key element 返回给定元素对应的 score

zremrangebyrank key min max 删除集合中排名在给定区间的元素

zremrangebyscore key min max 删除集合中 score 在给定区间的元素

四 redis高等操作

4.1 主从双备

Redis主从双备合作和行使比较简单,通过主从复制能够允许多少个slave server具有和master server相近的数据库别本。

   master可以拥有多个salve server,多个slave可以连接同一个master外,还可以连接到其他slave。主从复制不会阻塞master,同步数据时,master可以继续处理client,提高系统伸缩性。

Redis主从双备进程

  1. Salve与master营造连接,发送sync同步命令。
  2. Master会运行一个后台进度,将数据库快速照相保存到文件中,同不平时候master主进度会起来采摘新的写命令缓存。
  3. 后台落成保存后,就将此文件发送给slave。
  4. slave将此文件保留到硬盘上。

Redis情形表达:

window下Redis服务作为master主机,window的IP为192.168.1.100,设想机下linux下的Redis作为slave,linux的IP为192.168.1.150。

在redis从机(linux意况)的redis.conf配置文件中步入以下配置:

澳门新萄京 96

image

长机写入2条记下到数据库,然后从从机中读取,注意:计算不能立异值,只可以读取。

澳门新萄京 97

image

澳门新萄京 98

image

3.3 事务管理

Redis对业务的支撑还比较容易,redis只可以保险七个client发起的作业中的命令能够接连举行,而中等不会插入别的client的指令。当五个client在二个连连中发出multi命令时,那几个三番五次会跻身二个思想政治工作的上下文,连接后续命令不会及时推行,而是先松开一个队列中,当实施exec命令时,redis会顺序的实行队列中的全数命令。

澳门新萄京 99

image

在事务处理中运用discard能够收回事务的管理。redis在作业中意气风发经发生错误时专门的学业退出,不过在该错误早前的操作不可能回滚。

澳门新萄京 100

image

3.4 持久化

redis是多个扶助持久化的内部存款和储蓄器数据库。snapshotting快速照相方式,私下认可的仓库储存格局,私下认可写入dump.rdb的二进制文件中,能够配备redis在n秒内要是当先m个key被纠正过就自动做快速照相append-only file aof情势,使用aof时候redis会将每三次的函 数都增加到文件中,当redis重启时会重新履行文书中的保存的写命令在内部存款和储蓄器中。

澳门新萄京 101

image

3.5 发表订阅新闻

公布订阅(pub/sub卡塔尔国是生龙活虎种音讯通告方式,首要的指标是截除新闻发布者和新闻订阅者之间的耦合,Redis作为贰个pub/sub的server,在订阅者和公布者之间起到了新闻路由的法力。订阅者能够因而subscribe和psubscribe命令向redis server订阅自个儿感兴趣的音讯类型,redis将新闻类型称为通道(channel卡塔尔。当发表者通过publish命令向redis server发送特定类型的音信时,订阅该音讯项目的任何client都会摄取此新闻。

第一个redis客商端订阅changnel1,第二个redis客商端订阅channel1和channel2,第八个redis顾客端担任爆发channel1和channel2音讯,然后观望第叁个和第1个redis顾客端是否收到了订阅新闻。

澳门新萄京 102

image

澳门新萄京 103

image

3.6 设想内部存款和储蓄器

Redis的虚构内部存款和储蓄器与操作系统的设想内部存款和储蓄器不是二回事,但是思路和目标都以均等的。就是不经常把不平日访谈的数量从内部存款和储蓄器交流到磁盘中,进而腾出宝贵的内部存款和储蓄器空间用于别的要求拜见的数额。尤其是对此redis那样的内部存款和储蓄器数据库,内部存款和储蓄器总是远远不够用的。除了能够将数据分割到五个redis server外。别的可以进步数据水库蓄水容量量的秘诀便是接纳设想内部存款和储蓄器把那些有的时候访问的数据调换来磁盘上。

黄金年代旦想启用设想内部存款和储蓄器作用,在布局文件redis.conf中追加安插如下:

澳门新萄京 104

image

本文由澳门新萄京发布于www.澳门新萄京赌场,转载请注明出处:澳门新萄京:详细示例,redis操作手册

上一篇:澳门新萄京:快来一起打飞机,今日Python练手小 下一篇:澳门新萄京类型变换和档案的次序相关函数
猜你喜欢
热门排行
精彩图文
  • 澳门新萄京安顿指南
    澳门新萄京安顿指南
    REST与技术无关,代表的是一种软件架构风格,REST是RepresentationalState Transfer的简称,中文翻译为“ 表征状态转移 ” REST从资源的角度类审视整个网络,它将
  • python爬虫入门
    python爬虫入门
    爬虫简要介绍  什么是爬虫? 爬虫:正是抓取网页数据的次第。 HTTP和HTTPS HTTP公约(HyperText TransferProtocol,超文本传输公约卡塔 尔(阿拉伯语:قطر‎:是
  • 澳门新萄京:搭建虚拟主机步骤
    澳门新萄京:搭建虚拟主机步骤
  • 夏日浅笑,计算机开放电子书归档
    夏日浅笑,计算机开放电子书归档
    关于我 网名:三夏浅笑、 英文:summertime-wu 具名:立德立言、无闻西东 标签: 咸鱼 、 宅男 、 Java开发(ma)工程师(nong) 、 技术爱好者 ,喜欢明白底层落成
  • 澳门新萄京:Python3中操作字符串str必需深深记住
    澳门新萄京:Python3中操作字符串str必需深深记住
    描述 Python center() 重临多少个原字符串居中,并使用空格填充至长度 width的新字符串。暗中同意填充字符为空格。 Python3中操作字符串str必需铭记的几个方法