1、下载 redis 模块

  • pip install redis

2、redis 数据库两种连接方式

  • 简单连接

    • decode_responses=True,写入和读取的键值对中的 value 为 str 类型,不加这个参数写入的则为字节类型
import redis

re = redis.Redis(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)    # host 是 redis 主机,需要 redis 服务端和客户端都启动  redis 默认端口是 6379,password 是 redis 数据库访问密码,db 是库
value = re.get("Student1") # 取出键 Student 对应的值
print(value) #结果如下
zhangsan
  • 使用连接池
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.get("Student1")) # 结果如下
zhangsan

3、redis 基本操作命令

  • String 操作

    • redis 中的 String 在在内存中按照一个 name 对应一个 value 来存储

    • get(name)  获取 name 的 value 值
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.get("Student1")) # 结果如下
zhangsan
    • mget(keys, *args)   批量获取多个 value 值  
import redis

re = redis.Redis(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
value = re.mget("Student1","Student2") # 同时获取键 Student1 和 Student2 的 value 值
print(value) # 结果如下
['zhangsan', 'lisi']
    • getrange(key,start,end)  取出索引 [start,end] 所对应的序列
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
name1 = re.get("Student1")
print(name1)
name2 = re.getrange("Student1",0,3) # 取出索引 [0,3] 所对应的序列
print(name2) # 结果如下
zhaoliu
zhao
    • set(name,value,ex=None,px=None,nx=False,xx=False)  在 redis 中设置值

      • 默认不存在则创建,存在则修改
      • ex,过期时间(秒)
      • px,过期时间(毫秒)
      • nx,如果设置为 True,则只有 name 不存在时,当前 set 操作才执行,同 setnx(name, value)
      • xx,如果设置为 True,则只有 name 存在时,当前 set 操作才执行
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.set("Student","Alex") # 设置 Student 值为 Alex
name = re.get("Student")
print(name) # 结果如下
Alex
    • mset(dict)  批量设置值
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.mset({"Student1":"zhangsan","Student2":"lisi"})
    • getset(name,value)  设置新值,打印原值
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.getset("Student1","zhaoliu")) # 将 Student1 对应的值更新为 zhaoliu,并且返回原来的值 # 结果如下
wangwu # 返回的原来的值
    • append(name,value)  在 name 对应的值后面追加内容 value
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
name1 = re.get("Student1")
print(name1)
re.append("Student1","liu") # 在 Student1 对应的值上追加字符串 liu
name2 = re.get("Student1")
print(name2) # 结果如下
zhaoliu
zhaoliuliu
    • strlen(name)  返回name对应值的字节长度

      • 一个汉字 3 个字节
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
name = re.get("Student1")
w = re.strlen("Student1") # 获取 Student1 所对应的字符串长度
print(name)
print(w) # 结果如下
zhaoliu
7
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
name = re.get("Student1")
w = re.strlen("Student1") # 获取 Student1 所对应的字符串长度
print(name)
print(w) # 结果如下
赵六
6
  • List 操作

    • redis 中的 List 在内存中按照一个 name 对应一个 List 来存储

    • lindex(name,index)  根据索引获取列表内元素
import redis

re = redis.Redis(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
value = re.lindex("Fruits",2) # 通过索引值 2 取出对应的值 Apple
print(value) # 结果如下
Apple
    • lrange(name,start,end)  获取列表内的多个值

      • 返回的是 value 值列表
      • 取值范围 [start,end]
import redis

re = redis.Redis(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
value = re.lrange("Fruits",0,1) # 取出列表中索引值为 0 和 1 的 value 值
print(value) # 结果如下
['Orange', 'Banana']
    • llen(name)  name 对应的 list 元素的个数  
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
num = re.llen("Fruits")
print(num) # 结果如下
4
    • lpush(name,values)  在 name 对应的 list 中添加元素

      • 列表是有序集合  
      • 每个新的元素都添加到列表的最左边    
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.lpush("Fruits","Apple","Banana","Orange") # 在 Fruits 对应的 list 中添加 Apple,Banana,Orange 三个元素
li = re.lrange("Fruits",0,2)
print(li) # 结果如下
['Orange', 'Banana', 'Apple'] # 保存在列表中的顺序与添加的顺序相反
    • rpush(name,values)  在 name 对应的 list 中添加元素  

      • 同 lpush()  但每个新的元素都添加到列表的最右边
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.rpush("Fruits","Apple","Banana","Orange") # 在 Fruits 对应的 list 中添加 Apple,Banana,Orange 三个元素
li = re.lrange("Fruits",0,2)
print(li) # 结果如下
['Apple', 'Banana', 'Orange']
    • lpushx(name,value)  在 name 对应的 list 中添加元素

      • 只有name已经存在时,值添加到列表的最左边
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.lpushx("Fruits","Pear") # 在 Fruits 对应的 list 中添加 Pear 单个元素
li = re.lrange("Fruits",0,3)
print(li) # 结果如下
['Pear', 'Apple', 'Banana', 'Orange']
    • rpushx(name,value)  在 name 对应的 list 中添加元素  

      • 只有 name 已经存在时,值添加到列表的最右边
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.rpushx("Fruits","Pear") # 在 Fruits 对应的 list 中添加 Pear 单个元素
li = re.lrange("Fruits",0,3)
print(li) # 结果如下
['Apple', 'Banana', 'Orange', 'Pear']
    • linsert(name,where,refvalue,value)  在 name 对应的列表的某一个值前或后插入一个新值  

      • name:redis 的 name
      • where:BEFORE(前)或 AFTER(后)
      • refvalue:列表内的值
      • value:要插入的数据
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
li1 = re.lrange("Fruits",0,10)
print(li1)
re.linsert("Fruits","BEFORE","Banana","Grape") # 在列表 Fruits 中找到元素 Banana,在 Banana 前插入 Grape
li2 = re.lrange("Fruits",0,10)
print(li2) # 结果如下
['Apple', 'Banana', 'Orange', 'Pear']
['Apple', 'Grape', 'Banana', 'Orange', 'Pear']
    • lset(name,index,value)  对 name 中的某一个索引位置重新赋值  
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
li1 = re.lrange("Fruits",0,10)
print(li1)
re.lset("Fruits",1,"Pear") # 对 Fruits 中的索引位置为 1 的值进行修改成 Pear
li2 = re.lrange("Fruits",0,10)
print(li2) # 结果如下
['Apple', 'Grape', 'Banana', 'Orange']
['Apple', 'Pear', 'Banana', 'Orange'] # Grape 更新为 Pear
    • lpop(name)  移除列表的左侧第一个元素,返回值则是第一个元素  
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
li1 = re.lrange("Fruits",0,10)
print(li1)
fruit = re.lpop("Fruits") # 移除 Fruits 所对应列表中的第一个值,且将移除的值返回出来
print(fruit)
li2 = re.lrange("Fruits",0,10)
print(li2) # 结果如下
['Apple', 'Orange', 'Pear', 'Banana']
Apple
['Orange', 'Pear', 'Banana']
    • ltrim(name, start, end)  移除列表内没有在该索引之内的值
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
li1 = re.lrange("Fruits",0,10)
print(li1)
re.ltrim("Fruits",0,1) # 移除 [0,1] 索引值之外的所有值
li2 = re.lrange("Fruits",0,10)
print(li2) # 结果如下
['Apple', 'Orange', 'Pear', 'Banana']
['Apple', 'Orange']
  • Hash 操作

    • redis 中的 hash 在内存中类似于一个 name 对应一个 dic 来存储

    • hset(name,key,value)  对应的 hash 中设置一个键值对(不存在,则创建,否则,修改)
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.hset("Teacher","Teacher01","Mr.ZHENG")
re.hset("Teacher","Teacher02","Mr.XIAO")
re.hset("Teacher","Teacher03","Mr.FU")
    • hmset(name,dic)  在 name 对应的 hash 中批量设置键值对
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
dic = {"Teacher01":"Mr.ZHENG","Teacher02":"Mr.XIAO","Teacher03":"Mr.FU",}
re.hmset("Teacher",dic) # 批量设置多个键值对
    • hget(name,key)  在 name 对应的 hash 中根据 key 获取 value
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
value = re.hget("Teacher","Teacher02") # 获取 Teacher 对应的 hash 中键 Teacher02 的 value 值
print(value) # 结果如下
Mr.XIAO
    • hgetall(name)  获取 name 对应 hash 的所有键值对

      • 返回的是一个所有键值对的字典  
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
dic = re.hgetall("Teacher") # 获取 Teacher 对应 hash 的所有键值对
print(dic)
print(type(dic)) # 结果如下
{'Teacher01': 'Mr.ZHENG', 'Teacher02': 'Mr.XIAO', 'Teacher03': 'Mr.FU'}
<class 'dict'>
    • hkeys(name)  获取 hash 中所有的 key

      • 返回的是所有键的列表
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
keys = re.hkeys("Teacher") # 获取 Teacher 所对应 hash 中的所有的 key
print(keys) # 结果如下
['Teacher01', 'Teacher02', 'Teacher03']
    • hvals(name)  获取 hash 中所有的 value

      • 返回的是所有值的列表
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
values = re.hvals("Teacher") # 获取 Teacher 所对应 hash 中的所有的 value
print(values) # 结果如下
['Mr.ZHENG', 'Mr.XIAO', 'Mr.FU']
    • hmget(name,keys,*args)  在 name 对应的 hash 中获取多个 key 的值  

      • 返回的是多个 value 值的列表
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
keys = re.hmget("Teacher","Teacher01","Teacher02") #在 Teacher 对应的 hash 中获取 Teacher01 和 Teacher02 的值  
print(keys)
print(type(keys)) """
import redis pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
li = ["Teacher01","Teacher02"]
keys = re.hmget("Teacher",li) #在 Teacher 对应的 hash 中获取 Teacher01 和 Teacher02 的值  
print(keys)
print(type(keys))
""" # 结果如下
['Mr.ZHENG', 'Mr.XIAO']
<class 'list'>
    • hlen(name)  获取 hash 中键值对的个数
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
num = re.hlen("Teacher") # 获取 Teacher 所对应 hash 中的键值对个数
print(num) # 结果如下
3
    • hdel(name,*keys)  删除指定 name 对应的 key 所在的键值对
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.hdel("Teacher","Teacher01","Teacher03") # 同时删除 Teacher01 和 Teacher02 键值对
dic = re.hgetall("Teacher") # 获取未被删除的键值对
print(dic) # 结果如下
{'Teacher02': 'Mr.XIAO'}

Python(Redis 中 String/List/Hash 类型数据操作)的更多相关文章

  1. Redis的String、Hash类型命令

    String是最简单的类型,一个Key对应一个Value,string类型是二进制安全的.Redis的string可以包含任何数据,比如jpg图片或者序列化的对象.最大上限是1G字节.    Hash ...

  2. Redis中Value使用hash类型的效率是普通String的两倍

    什么Redis? 点击这里 最近要开发的一个项目是分布式缓存组件,解决参数缓存高效获取的问题.参数达到了500万级别,刚刚开始了解Redis.做设计的时候考虑到Value使用哪种类型的问题? 主要面临 ...

  3. StackExchange.Redis帮助类解决方案RedisRepository封装(散列Hash类型数据操作)

    本文版权归博客园和作者本人共同所有,转载和爬虫请注明本系列分享地址:http://www.cnblogs.com/tdws/p/5815735.html 上一篇文章的不合理之处,已经有所修改. 今天分 ...

  4. Redis 中 String 类型的内存开销比较大

    使用 String 类型内存开销大 1.简单动态字符串 2.RedisObject 3.全局哈希表 使用 Hash 来存储 总结 参考 使用 String 类型内存开销大 如果我们有大量的数据需要来保 ...

  5. StackExchange.Redis帮助类解决方案RedisRepository封装(字符串类型数据操作)

    本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/tag/NoSql/ 目录 一.基础配置封装 二.String字符串类型数据操作封 ...

  6. 第二课补充01——redis-cli命令行详解、string类型、list类型、hash类型命令操作详解

    一. redis-cli命令行参数 1.-x参数:从标准输入读取一个参数: [问题] [解决] 因为echo命令是默认带有回车\n的,不带回车需要echo –n命令: echo -n "ha ...

  7. 在JAVA中怎么比较Double类型数据的大小

    在JAVA中怎么比较Double类型数据的大小  我来答  浏览 33044 次   3个回答 #活动# “双11”答题活动,奖励加码!最高得2000元购物礼金! pollutedair 2015- ...

  8. JS中String类型转换Date类型 并 计算时间差

    JS中String类型转换Date类型 1.比较常用的方法,但繁琐,参考如下:主要使用Date的构造方法:Date(int year , int month , int day)<script& ...

  9. Java中String转换Double类型 Java小数点后留两位

    Java中String转换Double类型 double num1 = 0.0; String qq = "19.987"; num1 = Double.valueOf(qq.to ...

随机推荐

  1. 路由与交换,cisco路由器配置,基础知识点(二)

    1.进退用户/特权/全局模式 (1)从用户模式进入特权模式 enable (2)从特权模式进入全局配置模式 configure terminal (3)从其他模式回到特权模式 end (4)从特权模式 ...

  2. Tcl编成第二天,set与unset

    代码如下: #!/usr/bin/tclsh set value "one" puts $value unset value puts $value set表示创建一个变量第一个参 ...

  3. Java第十八天,可变参数

    可变参数 1.使用前提 当一个方法的参数需要多个参数,并且这些参数的类型一致时,可以使用可变参数. 2.使用方法 定义方法时使用 3.定义格式 修饰符 返回值类型 方法名(参数类型...变量名){ } ...

  4. 汇编刷题:显示ABCDEFGH 八个字母

    DATA SEGMENT DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,8 MOV ...

  5. Date 对象-->概念、创建以及方法

    1.概念: Date 对象用于处理日期与时间. 2.创建: 方法1:直接用Date()函数,返回值当前时间 格式:var d = Date(); 注意:不论Date()是否带参数,返回都是当前时间 举 ...

  6. HBase Shell 十大花式玩儿法

    前言:工欲善其事必先利其器,今天给大家介绍一下HBase Shell十大花式利器,在日常运维工作中,可以试着用起来. 1. 交互模式 也就是我们最常用到的Shell命令行的方式. $ hbase sh ...

  7. JVM日常排查问题。基本操作和命令

    1.jstat jstat -gcutil pid 5s    //pid进程号 每隔5s监控一次内存回收情况 E 代表 Eden 区使用率:O(Old)代表老年代使用率    :P(Permanen ...

  8. GO中的channel使用小结

    go关键字可以用来开启一个goroutine(协程))进行任务处理,而多个任务之间如果需要通信,就需要用到channel了. func testSimple(){ intChan := make(ch ...

  9. work of 12/30/2015

    part 组员                今日工作              工作耗时/h 明日计划 工作耗时/h    UI 冯晓云   merge UI 与reader     6  丰富re ...

  10. 如何在Ubuntu 18.04上安装Nginx

    Nginx功能之强大,想必大家比我更清楚. 百度百科:Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx是由伊戈尔 ...