1.什麼是Redis
Redis是用C語言開發的一個開源的高性能鍵值對(key-value)數據庫,
官方提供測試數據,50個併發執行100000個請求,讀的速度是110000次/s,寫的速度是81000次/s ,
且Redis通過提供多種鍵值數據類型來適應不同場景下的存儲需求。
2.redis的應用場景
緩存(數據查詢、短連接、新聞內容、商品內容等等)
聊天室的在線好友列表
任務隊列。(秒殺、搶購、12306等等)
應用排行榜
網站訪問統計
數據過期處理(可以精確到毫秒
分佈式集羣架構中的session分離
3.redis的數據結構:
存儲
set username zhangsan
hset myhash username lisi
lpush myList a;rpush myList c
sadd myset a
zadd mysort 60 zhangsan
獲取
get username
hget myhash username;hgetall myhash
lrange myList 0 -1
smembers myset
zrange mysort 0 -1;zrange mysort 0 -1 withscores
刪除
del username
hdel myhash username
lpop key;rpop key
srem myset a
zrem mysort lisi
redis存儲的是:key,value格式的數據,其中key都是字符串,value有5種不同的數據結構:
value的數據結構:
1) 字符串類型 string
存儲: set key value
set username zhangsan
獲取: get key
get username
刪除: del key
del username
2) 哈希類型 hash : map格式
存儲: hset key field value
hset myhash username lisi
hset myhash password 123
獲取:
獲取指定的field對應的值:hget key field
hget myhash username
獲取所有的field和value:hgetall key
hgetall myhash
刪除: hdel key field
hdel myhash username
3) 列表類型 list : linkedlist格式。支持重複元素
可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)
添加:
將元素加入列表左表:lpush key value
lpush myList a
將元素加入列表右邊:rpush key value
rpush myList c
獲取:
範圍獲取:lrange key start end
lrange myList 0 -1
刪除:
lpop key: 刪除列表最左邊的元素,並將元素返回
rpop key: 刪除列表最右邊的元素,並將元素返回
4) 集合類型 set : 不允許重複元素
存儲:sadd key value
sadd myset a
獲取:smembers key:獲取set集合中所有元素
smembers myset
刪除:srem key value:刪除set集合中的某個元素
srem myset a
5) 有序集合類型 sortedset:
不允許重複元素,且元素有順序
每個元素都會關聯一個double類型的分數。
redis正是通過分數來爲集合中的成員進行從小到大的排序。
存儲:zadd key score value
zadd mysort 60 zhangsan
獲取:zrange key start end [withscores]
zrange mysort 0 -1
zrange mysort 0 -1 withscores
刪除:zrem key value
zrem mysort lisi
4. 通用命令
1. keys * : 查詢所有的鍵
2. type key : 獲取鍵對應的value的類型
3. del key:刪除指定的key value
5.Jedis
字符串類型 string
//存儲
jedis.set("username","zhangsan");
//獲取
String username = jedis.get("username");
//可以使用setex()方法存儲可以指定過期時間的 key value
//將activecode:hehe鍵值對存入redis,並且20秒後自動刪除該鍵值對
jedis.setex("activecode",20,"hehe");
哈希類型 hash : map格式
// 存儲hash
jedis.hset("user","name","lisi");
jedis.hset("user","age","23");
// 獲取hash
String name = jedis.hget("user", "name");
// 獲取hash的所有map中的數據
Map<String, String> user = jedis.hgetAll("user");
列表類型 list : linkedlist格式。支持重複元素
// list 存儲
jedis.lpush("mylist","a","b","c");//從左邊存
jedis.rpush("mylist","a","b","c");//從右邊存
// list 範圍獲取
List<String> mylist = jedis.lrange("mylist", 0, -1);//是ArrayList
// list 彈出
String element1 = jedis.lpop("mylist");
String element2 = jedis.rpop("mylist");
集合類型 set : 不允許重複元素
// set 存儲
jedis.sadd("myset","java","php","c++");
Set<String> myset = jedis.smembers("myset");
有序集合類型 sortedset:不允許重複元素,且元素有順序
// sortedset 存儲
jedis.zadd("mysortedset",3,"亞瑟");
jedis.zadd("mysortedset",30,"後裔");
jedis.zadd("mysortedset",55,"孫悟空");
// sortedset 獲取
Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);