redis命令及对应jedis操做(一)-String类型

咱们知道学习编程知识,先要搭建环境,首先须要下载redis工具包,下载时须要注意,redis的偶数版是表示稳定版(2.4,2.6等),奇数版表示非稳定版(2.5,2.7等),我下载的是2.6的,最新版本,我之前使用的是2.0版本的,发现好多命令不能使用,你们仍是下载最新的稳定版比较好。java

1、环境搭建:redis

      一、下载redis的压缩包,http://www.redis.io/(redis官网),下载好后解压下,而后配置环境变量,将redis-cli和redis-server所在地址配置在path中便可,由于是入门,咱们只须要压缩包中的两个应用程序redis-cli.exe和redis-server.exe,打开redis-server.exe,这个就是redis服务器,服务器开启后是以下界面: 数据库

打开redis客户端可使用两种方式编程

一、打开cmd,输入命令:redis-cli -h 127.0.0.1,点击enter就能够了,而后输入ping命令测试,返回pong表示链接服务成功服务器

二、直接打开redis-cli.exe,测试是否链接成功方式同上; 如图:app


接下来就可使用redis命令了,redis中包含五中类型,(string,list,set,sortedset,hash)这票博客中只描述String类型,也是redis中最简单的类型:dom

========工具

一、字符串类型是redis中最基本的数据类型,能够存储任何形式的字符串,包括二进制数据,一个字符串类型健容许存储的最大容量是512M,字符串是其余几种数据类型的基础,只是对字符串的组织形式不同罢了,好比列表是以列表的形式组织的字符串,集合是以集合的形式组织的字符串。学习

二、经常使用的字符串命令:测试

set key value:给key赋值

get key :取出key对应的值

incr key :给key的值加1,若是key对应的值是字符串,会报错(ERR value is not an integer or out of range),返回的是增长后的值,若key不存在,则默认key对应的值由0开始增长,至关于建立了set key 0

incrby key num:给key对应的值增长num,num为指定增长的数值

decr key:与incr key相反

decrby key num:与incrby key num相反

mset k1 v1 k2 v2 k3 v3:同时给k1,k2,k3赋值

mget k1 k2 k3:同时取出k1,k2,k3的值

下面是上面的命令在redis命令端的结果:

redis 127.0.0.1:6379> set name jack
OK
redis 127.0.0.1:6379> get name
"jack"
redis 127.0.0.1:6379> incr num
(integer) 1
redis 127.0.0.1:6379> incr num
(integer) 2
redis 127.0.0.1:6379> get num
"2"
redis 127.0.0.1:6379> incrby num 5
(integer) 7
redis 127.0.0.1:6379> get num
"7"
redis 127.0.0.1:6379> decr num
(integer) 6
redis 127.0.0.1:6379> get num
"6"
redis 127.0.0.1:6379> mset stu1 zhangsan stu2 lisi stu3 wangwu
OK
redis 127.0.0.1:6379> mget stu1 stu2 stu3
1) "zhangsan"
2) "lisi"
3) "wangwu"

固然,redis针对string类型的命令还有不少,我就不所有在命令端敲出来了,能够贴出来给你们看看:

删除redis:del name                             返回删除key数量
测试指定key是否存在:exists name       1-存在,0-不存在
type key:返回key 的类型;string,list,hash,set,sortedset
keyspattern:匹配key,好比keys n*   ->name
randomkey:随机返回库中 的一个key
raname oldkey newkey  重命名key,若是key存在,覆盖
renamenx oldkey newkey  重命名key,若是key存在,返回失败
dbsize 返回key的数量
expire key seconds :为能够设置过时时间,单位秒,返回1表成功,0表示已经设置过或者key不存在
ttl key  返回设置过过时时间的 key的剩余过时秒数  -1 表示 key不存在或者没有设置过过时时间
select db-index 经过索引选择数据库,默认链接的数据库全部是0,默认数据库数是 16个。返回1 表
示成功,0 失败 
move key db-index   将 key从当前数据库移动到指定数据库。返回1 成功。0 若是key不存在,或
者已经在指定数据库中 
flushdb  删除当前数据库中全部 key,此方法不会失败。慎用 
flushall  删除全部数据库中的全部key,此方法不会失败。更加慎用
append key value 给指定key的字符串值追加 value,返回新字符串值的长度。 
substr key start end  返回截取过的 key的字符串值,注意并不修改 key的值,下标是从 0 开始的。

根据须要本身来使用响应的命令便可。

redis也支持不少的程序语言,发展速度很快,我这边示例java程序对redis的操做,也只贴出对string类型的操做:我使用的jedis的jar包是jedis-2.1.0.jar,固然程序中还须要别的jar包,你们能够根据我程序中import中的内容去网上下载

package org.laoyao.redisTest;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
import redis.clients.jedis.SortingParams;

public class RedisTest {
    private Jedis jedis;// 非切片额客户端链接
    private JedisPool jedisPool;// 非切片链接池
    private ShardedJedis shardedJedis;// 切片额客户端链接
    private ShardedJedisPool shardedJedisPool;// 切片链接池

    public RedisTest() {
        initialPool();
        initialShardedPool();
        shardedJedis = shardedJedisPool.getResource();
        jedis = jedisPool.getResource();

    }

    /**
     * 初始化非切片池
     */
    private void initialPool() {
        // 池基本配置
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxActive(20);
        config.setMaxIdle(5);
        config.setMaxWait(1000l);
        config.setTestOnBorrow(false);

        jedisPool = new JedisPool(config, "127.0.0.1", 6379);
    }
    /**
     * 初始化切片池
     */
    private void initialShardedPool() {
        // 池基本配置
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxActive(20);
        config.setMaxIdle(5);
        config.setMaxWait(1000l);
        config.setTestOnBorrow(false);
        // slave连接
        List shards = new ArrayList();
        shards.add(new JedisShardInfo("10.22.19.167", 6379, "master"));

        // 构造池
        shardedJedisPool = new ShardedJedisPool(config, shards);
    }
    private void StringOperate() {
        System.out.println("======================String_1==========================");
        // 清空数据
        System.out.println("清空库中全部数据:" + jedis.flushDB());

        System.out.println("=============增=============");
        jedis.set("key001", "value001");
        jedis.set("key002", "value002");
        jedis.set("key003", "value003");
        System.out.println("已新增的3个键值对以下:");
        System.out.println(jedis.get("key001"));
        System.out.println(jedis.get("key002"));
        System.out.println(jedis.get("key003"));

        System.out.println("=============删=============");
        System.out.println("删除key003键值对:" + jedis.del("key003"));
        System.out.println("获取key003键对应的值:" + jedis.get("key003"));

        System.out.println("=============改=============");
        // 一、直接覆盖原来的数据
        System.out.println("直接覆盖key001原来的数据:" + jedis.set("key001", "value001-update"));
        System.out.println("获取key001对应的新值:" + jedis.get("key001"));
        // 二、直接覆盖原来的数据
        System.out.println("在key002原来值后面追加:" + jedis.append("key002", "+appendString"));
        System.out.println("获取key002对应的新值" + jedis.get("key002"));

        System.out.println("=============增,删,查(多个)=============");
        /**
         * mset,mget同时新增,修改,查询多个键值对 等价于: jedis.set("name","ssss"); jedis.set("jarorwar","xxxx");
         */
        System.out.println("一次性新增key201,key202,key203,key204及其对应值:"
                + jedis.mset("key201", "value201", "key202", "value202", "key203", "value203", "key204", "value204"));
        System.out.println("一次性获取key201,key202,key203,key204各自对应的值:"
                + jedis.mget("key201", "key202", "key203", "key204"));
        System.out.println("一次性删除key201,key202:" + jedis.del(new String[] { "key201", "key202" }));
        System.out.println("一次性获取key201,key202,key203,key204各自对应的值:"
                + jedis.mget("key201", "key202", "key203", "key204"));
        System.out.println();

        // jedis具有的功能shardedJedis中也可直接使用,下面测试一些前面没用过的方法
        System.out.println("======================String_2==========================");
        // 清空数据
        System.out.println("清空库中全部数据:" + jedis.flushDB());

        System.out.println("=============新增键值对时防止覆盖原先值=============");
        System.out.println("原先key301不存在时,新增key301:" + shardedJedis.setnx("key301", "value301"));
        System.out.println("原先key302不存在时,新增key302:" + shardedJedis.setnx("key302", "value302"));
        System.out.println("当key302存在时,尝试新增key302:" + shardedJedis.setnx("key302", "value302_new"));
        System.out.println("获取key301对应的值:" + shardedJedis.get("key301"));
        System.out.println("获取key302对应的值:" + shardedJedis.get("key302"));

        System.out.println("=============超过有效期键值对被删除=============");
        // 设置key的有效期,并存储数据
        System.out.println("新增key303,并指定过时时间为2秒" + shardedJedis.setex("key303", 2, "key303-2second"));
        System.out.println("获取key303对应的值:" + shardedJedis.get("key303"));
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
        }
        System.out.println("3秒以后,获取key303对应的值:" + shardedJedis.get("key303"));

        System.out.println("=============获取原值,更新为新值一步完成=============");
        System.out.println("key302原值:" + shardedJedis.getSet("key302", "value302-after-getset"));
        System.out.println("key302新值:" + shardedJedis.get("key302"));

        System.out.println("=============获取子串=============");
        System.out.println("获取key302对应值中的子串:" + shardedJedis.getrange("key302", 5, 7));
    }

    
    public static void main(String[] args) {
        new RedisTest().StringOperate();
    }
}

下面贴出运行结果:

======================String_1==========================
清空库中全部数据:OK
=============增=============
已新增的3个键值对以下:
value001
value002
value003
=============删=============
删除key003键值对:1
获取key003键对应的值:null
=============改=============
直接覆盖key001原来的数据:OK
获取key001对应的新值:value001-update
在key002原来值后面追加:21
获取key002对应的新值value002+appendString
=============增,删,查(多个)=============
一次性新增key201,key202,key203,key204及其对应值:OK
一次性获取key201,key202,key203,key204各自对应的值:[value201, value202, value203, value204]
一次性删除key201,key202:2
一次性获取key201,key202,key203,key204各自对应的值:[null, null, value203, value204]

======================String_2==========================
清空库中全部数据:OK
=============新增键值对时防止覆盖原先值=============
原先key301不存在时,新增key301:1
原先key302不存在时,新增key302:1
当key302存在时,尝试新增key302:0
获取key301对应的值:value301
获取key302对应的值:value302
=============超过有效期键值对被删除=============
新增key303,并指定过时时间为2秒OK
获取key303对应的值:key303-2second
3秒以后,获取key303对应的值:null
=============获取原值,更新为新值一步完成=============
key302原值:value302
key302新值:value302-after-getset
=============获取子串=============
获取key302对应值中的子串:302

总结:redis对string类型的操做是很是简单的,redis原本就是一个简单的东西,string类型是其他各类类型的基础,其他各类类型(list、set、sortedset、hash)最终保存的依然是string类型的值,今天就写这么多,刚开始学习,算是学习笔记吧,写的很差,还请多多包涵指正!

相关文章
相关标签/搜索