# 1、設置單個字段 HSET key field value HSETNX key field value # 2、設置多個字段 HMSET key field value field value # 3、返回字段個數 HLEN key # 4、判斷字段是否存在(不存在返回0) HEXISTS key field # 5、返回字段值 HGET key field # 6、返回多個字段值 HMGET key field filed # 7、返回所有的鍵值對 HGETALL key # 8、返回所有字段名 HKEYS key # 9、返回所有值 HVALS key # 10、刪除指定字段 HDEL key field # 11、在字段對應值上進行整數增量運算 HINCRBY key filed increment # 12、在字段對應值上進行浮點數增量運算 HINCRBYFLOAT key field increment
# 1、更新一條數據的屬性,沒有則新建 hset(name, key, value) # 2、讀取這條數據的指定屬性, 返回字符串類型 hget(name, key) # 3、批量更新數據(沒有則新建)屬性,參數為字典 hmset(name, mapping) # 4、批量讀取數據(沒有則新建)屬性 hmget(name, keys) # 5、獲取這條數據的所有屬性和對應的值,返回字典類型 hgetall(name) # 6、獲取這條數據的所有屬性名,返回列表類型 hkeys(name) # 7、刪除這條數據的指定屬性 hdel(name, *keys)
python代碼hash散列
import redis r = redis.Redis(host="192.168.153.136", port=6379, db=0) # 新建一條鍵名為"user1"的數據, 包含屬性name r.hset("user1", "name", 'zhanshen001') # 更改鍵名為"user1"的數據, 更改屬性username的值 r.hset("user1", "name", 'zhanshen002') # 取出屬性username的值 username = r.hget("user1", "name") # 輸出看一下 print('name',username) # 屬性集合 user_dict = { "password": "123456", "name": "Wang Success", "sex": "male", "height": '178', "Tel": '13838383888', } # 批量添加屬性 r.hmset("user1", user_dict) # 取出所有數據(返回值為字典) all_data = r.hgetall("user1") print('all_data:', all_data) # 刪除屬性(可以批量刪除) r.hdel("user1", "Tel") # 取出所有屬性名 : 列表 h_keys = r.hkeys("user1") print('all_key_name:',h_keys) # 取出所有屬性值 : 列表 h_values = r.hvals('user1') print('all_values:',h_values)
應用場景: redis+mysql+hash組合使用
import redis import pymysql # 1.先到redis中查詢 # 2.redis中沒有,到mysql查詢,緩存到redis(設置過期時間) # 3.在查詢redis r = redis.Redis(host="127.0.0.1", port=6379, db=0) """ key:user filed:username filed:password filed:gender filed:age """ res = r.hgetall("user") if res: print(res) else: # redis沒有緩存 db = pymysql.connect( host='localhost', user='root', password='123456', database='userdb', charset='utf8' ) username = input('請輸入用戶名') cursor = db.cursor() sele = 'select username,age,gender from user where username=%s' cursor.execute(sele,[username]) userinfo = cursor.fetchall() if not userinfo: print('用戶不存在') else: #打印輸出 #(('haha', 36, 'M'),) print('mysql',userinfo) #緩存到redis user_dict = { 'username':userinfo[0][0], 'age':userinfo[0][1], 'gender':userinfo[0][2] } # hmset第二個參數為字典 r.hmset('user', user_dict) # 設置過期時間為5分鍾 r.expire('user', 10) print('redis緩存成功')
mysql數據庫中數據更新信息后同步到redis緩存
import redis import pymysql # update數據(mysql)后,同步到redis緩存 def update_mysql(age, username): db = pymysql.connect('127.0.0.1', 'root', '123456', 'userdb', charset='utf8') cursor = db.cursor() upd = 'update user set age=%s where username=%s' try: # code:0 或者 1 code = cursor.execute(upd, [age, username]) db.commit() if code == 1: return True except Exception as e: db.rollback() print(e) cursor.close() db.close() def update_redis(age): r = redis.Redis(host="127.0.0.1", port=6379, db=0) r.hset('user', 'age', age) print('已同步至redis') # 設置過期時間 r.expire('user', 30) # 測試 print(r.hget('user', 'age')) if __name__ == '__main__': username = input('請輸入用戶名:') age = input('請輸入更該后的年齡:') if update_mysql(age, username): update_redis(age) else: print("用戶名有誤")
