好程序員Java學習路線分享Redis快速入門,Redis的啓動
1.基於docker啓動
1) 不帶配置文件啓動 docker run -p 6379:6379 redis
2) 帶配置文件啓動
docker run -p 6379:6379 -v /usr/local/docker/redis/redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf
3)使用docker容器內的客戶端來操作redis服務器
以交互的方式進入到redis容器,再在/usr/local/bin/使用redis-cli工具連接redis服務器
得輸密碼
auth java1904
2.使用原生tar包啓動
1)從官方下載tar.gz壓縮包,上傳到linux中
2)解壓
tar -zxvf ...
3)下載make
apt-get install make
4)下載gcc,因爲redis是c寫的,需要gcc工具
apt-get intall gcc
5) 進入解壓出來的文件夾內,然後使用make進行編譯
6)進入 src,執行./redis-server ../redis.conf 開啓服務端
7)使用redis內部的客戶端,來連接服務端,對redis服務端進行操作
src裏 執行 ./redis-cli
二、Redis桌面版客戶端工具的使用
三、Redis的配置文件
redis.conf
在啓動redis服務器時,可以通過配置文件裏面的參數的設置,來設置服務器,如果啓動redis服務器,不帶配置文件,那麼參數都是默認值。
1.解除本機綁定
# bind 127.0.0.1 註釋掉
2.redis數據庫默認擁有16個庫,數據會被存放在這16個庫中的某一個。
3.設置密碼
在連接時需要輸入密碼
四、Java的Redis客戶端:Jedis
redis自帶的客戶端: redis-cli
1.引入依賴
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
2.使用Jedis工具類
public class MyRedis { public static void main(String[] args) { Jedis jedis = new Jedis("192.168.2.128",6379); jedis.auth("java1904"); jedis.set("兩個月後的目標","12k"); String target = jedis.get("兩個月後的目標"); System.out.println(target); } }
五、Redis的五大數據類型
1. String類型
1)增刪改查
set key value 添加/修改 鍵值對
get key ==> value 根據鍵得到值
del key1 [key2...] 根據鍵刪除鍵值對,返回值刪除的個數
mset k1 v1 k2 v2 [key value ...] 一次性插入多個值
mget k1 k2 一次性拿多個值
2)其他命令
incr 對整數進行自增,浮點數也不行: set k1 1000 incr k1
decr 對整數進行遞減
incrby 鍵 步長 一次增長指定步長的值
decrby 鍵 步長 一次減少指定步長的值
2. hash類型
數據類型的特點:
鍵 - 值: 鍵值對
而且 鍵裏可以存放多個鍵值對
hset k1 鍵-值
hget k1 鍵
hmset k1 鍵-值 鍵-值 ...
hmget k1 鍵 鍵...
hdel k1 鍵 鍵...
其他命令:
hlen k1
查看k1有幾個鍵值對
hexists k1 鍵
查看鍵是否存在於k1中
hgetall k1
獲得K1中的所有的鍵值對
注意: 在實際使用時,往往會使用這種命名方式: 通過“:”對鍵名進行分割,以起到語義化的效果。
比如 “user:1001:dreams” : 用戶id是1001的這個用戶的所有夢想
如果鍵衝突了,那麼如果之前的數據類型與現在的數據類型不同,則會報這個異常:
redis.clients.jedis.exceptions.JedisDataException: WRONGTYPE Operation against a key holding the wrong kind of value
使用jedis進行操作時,hmset中需要存入map集合
HashMap<String,String> map = new HashMap<String, String>(); map.put("d1","10000"); map.put("d2","20000"); jedis.hmset("user:1001:dreams",map);
hash類型的應用場景: 存對象時更方便
3. 列表類型 List
列表可以實現棧和隊列的效果
lpop 從左邊出列隊
rpush 和 rpop
模擬棧的效果:
模擬隊列的效果: 先進先出
其他命令:
LLEN key,查詢列表的長度
LINDEX key index,獲取指定索引的值 get(int index)
LSET key index value,設置指定索引的值
Ltrim key start end 保留指定索引範圍的值
4.Set類型
Sadd key element [element] 添加元素
Scard key 計算元素個數
Smembers key 獲取所有的元素
Srem key element [element] 刪除元素
Sismember key element 判斷元素是否在集合中,存在返回1,否則返回0
Spop key 從集合隨機彈出元素
5.zset類型
是一個有序的集合
常用命令:
Zadd key score member [score member ...] 添加成員,併爲每個成員設置分數
Zcard key 計算成員的個數
Zscore key member 計算某個成員的分數
Zrank key member 計算某個成員的排名
Zincrby key increment member 增加成員的分數
Zrange key start end withscores 返回指定排名範圍的成員
zrevrange key start end 逆序展示
Zrem key member [member] 刪除成員、
jedis的操作
@Test public void testZset(){ Jedis jedis = new Jedis("192.168.2.128",6379); jedis.auth("java1904"); HashMap<String,Double> map = new HashMap<String, Double>(); map.put("l1",100d); map.put("l2",200d); // map是一個HashMap<String,Double> 的map jedis.zadd("order1",map); jedis.zincrby("order1",200d,"l1"); Set<String> order1 = jedis.zrevrange("order1", 0, -1); System.out.println(order1); }
六、使用Jedis連接池
package com.qf.redis.util; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class JedisPoolUtil { private static JedisPool pool ; static{ JedisPoolConfig config = new JedisPoolConfig(); config.setMaxIdle(100); config.setMaxWaitMillis(2000); config.setMaxTotal(200); String host = "192.168.2.128"; pool = new JedisPool(config,host); } public static Jedis getJedisFromPool(){ return pool.getResource(); } }
使用連接池:
Jedis jedis = JedisPoolUtil.getJedisFromPool();
jedis.auth("java1904");