数据类型:Hash散列数据类型
# 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("用户名有误")