咱們知道學習編程知識,先要搭建環境,首先須要下載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類型的值,今天就寫這麼多,剛開始學習,算是學習筆記吧,寫的很差,還請多多包涵指正!