redis
1.redis庫的操作
獲取值: |
---|
1.獲取基本值: get key,例如,get name |
2.獲取多個值: mget key1 key2 …,例如,mset name age |
查看鍵: |
1.查看所有的鍵: keys *,例如,keys * |
2.查看以a開頭的鍵: keys a*,例如,keys a*,keys a*, keys a |
3.看鍵是否存在: exists key,例如,exists name |
4.查看鍵的類型: type key1,例如,type name |
刪除鍵值對: |
1.刪除鍵: del key1 key2 …,例如,del name age |
2.設置鍵有效期,刪除鍵:expire key seconds,例如,expire name 10 # 10秒後,name消失 |
3.查看鍵的有效期: ttl key,例如,ttl name |
4.flushall,清空,例如,flushall |
字符串類型:
字符串類型 |
---|
1. 基本鍵值對: set key value 後面還可以直接跟有效期(秒),例如,set age 10 ex 6 |
2. 鍵值對,有效期: setex key second value,例如,setex name 10 zs # 10秒後,該name消失 |
3. 設置多個鍵值對: mset key1 value1 key2 value2 …,例如,mset name zs age 18 |
4. 追加值: append key value |
append name haha # 在原來name上的值上追加haha,即"zs" + “haha” = ‘zshaha’ |
set類型
set類型 |
---|
特點:無序(順序)集合, 大小關係有序,不能存儲重複元素 |
添加元素 |
1.向key域(集合)中添加多個數據, sadd key member1 member2… |
sadd num_set 1 4 6 7 4 5 |
獲取元素 |
2.獲取key域集合的所有元素: smembers key |
smembers num_set |
刪除元素 |
1.刪除指定key元素的值: srem key value |
srem num_set 1 |
hash類型
hash類型 |
---|
增加數據 |
1.增加域的key和值: hset key field value |
hset person name zs |
2.設置域的多個屬性: hmset key filed1 value1 field2 value2… |
hmset person name zs age 18 |
獲取數據 |
1.獲取域的屬性(字段): hget key field |
hget person name |
2.獲取域的多個屬性: hmget key filed1 field2… |
hmget person name age |
3.獲取域的所有屬性(字段): hkeys key |
hkeys person # 顯示的是,name age |
刪除數據 |
1.刪除多個屬性值(字段): hdel key field1 field2… |
hdel person name age |
Zset類型
Zset類型 |
---|
特點: 有序集合, score爲權重值 |
序:自然順序 |
增加數據 |
1.向key域集合中添加多個score1,member1數據 |
格式: zadd key score1 member1 score2 memever2… |
zadd nums 10 zs 20 lisi |
獲取數據 |
1.返回指定範圍內的member元素: |
格式:zrange key start stop |
start:爲開始索引,包含 |
stop:爲結尾索引,包含, -1表示最後一個元素 |
zrange nums 0 -1 |
2.獲取min和max權值之間(包含)的成員值: |
格式:zrangebyscore key min max |
zrangebyscore nums 0 230 |
3.獲取key域集合中member的score的權重值: |
格式:zscore key member |
zscore nums zs |
刪除元素 |
1.刪除域集合中指定的元素值: |
格式:zrem key member1 member2… |
zrem nums zs lisi |
2.刪除集合中權重在指定範圍內(min,max)的元素: |
格式:zremrangebyscore key min max |
zremrangebyscore nums 0 20 |
list類型
list類型 |
---|
插入數據 |
1.左側插入數據: lpush key value1 value2 … |
lpush num_list 1 2 3 # 左邊插入數據 |
2.右側插入數據: rpush key value1 value2 … |
rpush num_list 1 2 3 # 右邊插入數據 |
3.指定key,舊元素位置前插入元素: |
格式:linsert key before oldvalue newvalue |
linsert num_list before 1 10 |
4.指定key,舊元素位置後插入元素: |
格式:linsert key after oldvalue newvalue |
linsert num_list after 1 10 |
獲取數據 |
1.獲取從編號start位置到編號stop位置的元素: |
格式:lrange key start stop |
(注意點,最後一個元素可以使用-1表示) |
lrange num_list 0 -1 |
2.設置指定索引位置的元素值: lset key index value |
lset num_list 0 6 # 索引值爲0的數改爲6 |
刪除數據 |
1.將key域列表中,前count次,值爲value的元素刪除: |
格式: lrem key count value |
count:需要刪除的個數 |
value: 需要刪除的值 |
count>0:從頭開始數, count<0從尾到頭,count=0查找所有元素 |
lrem num_list 2 a # 從左到右刪除兩個a |
lrem num_list -2 a # 從右到左刪除兩個a |
lrem num_list 0 a # 把全部的a刪除 |
2. redis的存取
redis的優點:從redis中存取數據,效率要比mysql數據庫要快的多
redis裏面存取的數據類型:
# 注意:從redis裏取出的數據都爲bytes類型,需要對其進行編譯decode()
# string: 字符串
'history_<user_id>': <value>
history_1: '1,2,3'
history_2:
# hash: 哈希 value: 屬性:值 key: <field>: <value>
history: {
history_<user_id>: <value>,
}
# list: 列表 key:[<value1>,<value2>]
'history_<user_id>': [1, 2, 3]
# set: 無序集合 key:(<value1>,<value2>)
排除
# zset: 有序集合
有序集合中的每個元素都有一個權重
3.redis操作命令(python)
import redis
# 使用decode_responses指定爲True,得到字符串類型,不然會得到一個二進制類型
redis_store = redis.StrictRedis(host='127.0.0.1',port=6379,decode_responses=True)
redis_store.set('name','heima') # redis_store.set(key,value),都是字符串
name = redis_store.get('name')
# 注意:從redis裏取出的值都爲bytes類型
hash命令: 格式: key : { }
1)hincrby(key, field, value)
# 給hash中field屬性值累加一個value,如果field不存在,新建一個屬性和值,例如
# 如果用戶的購物車記錄中已經添加過該商品,數量需要進行累加
# 如果用戶的購物車記錄中沒有添加過該商品,設置一個新的屬性和值
# hincrby(key, field, value): 給hash中field屬性值累加一個value,如果field不存在,新建一個屬性和值
redis_conn.hincrby(cart_key, sku_id, count) # sku_id商品的id,count商品的數量
2)hgetall(key)
# 返回hash中所有屬性和值
cart_redis = redis_conn.hgetall(cart_key) # dict
3)hset(key, field, value)
# hset(key, field, value): 將hash中指定屬性field的值設置爲value
pl.hset(cart_key, sku_id, count)
4)hdel(key, *fields)
# hdel(key, *fields): 刪除hash中對應的屬性和值,有則刪除,無則忽略
pl.hdel(cart_key, sku_id)
5)hkeys(key)
# hkeys(key): 返回hash中所有屬性
# [b'<sku_id>', b'<sku_id>', ...]
sku_ids = redis_conn.hkeys(cart_key) # list
set命令:
1)sadd(key, *members)
# 向set中添加元素,不需要關注是否重複,set中元素唯一
# sadd(key, *values): 向set中添加元素,不需要關注是否重複,set中元素唯一
redis-conn.sadd(cart_selected_key, sku_id) # sku_id商品的id
2)smembers(key)
# 獲取set中所有元素
sku_ids = redis_conn.smembers(cart_selected_key)
3)srem(key, *members)
# srem(key, *members): 從set中移除元素,如果元素不存在,直接忽略
pl.srem(cart_selected_key, sku_id)
list命令:
1)lrange(key, start, end )
# lrange(key, start, end): 獲取redis列表指定區間內的元素
# [b'<sku_id>', b'<sku_id>', ...]
sku_ids = redis_conn.lrange(history_key, 0, 4)
4.兩個Redis指令參考鏈接
- Redis原生指令參考 http://redisdoc.com/index.html
- Redis python客戶端 方法參考 http://redis-py.readthedocs.io/en/latest/#indices-and-tables