咱们知道学习编程知识,先要搭建环境,首先须要下载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类型的值,今天就写这么多,刚开始学习,算是学习笔记吧,写的很差,还请多多包涵指正!