python操作redis

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介:

一、字符串操作

redis中的string在内存中都是按照一个key对应一个value来存储的。

1)set(name, value, ex=None, px=None, nx=False, xx=False)

     ex,过期时间(秒)

     px,过期时间(毫秒)

     nx,如果设置为True,则只有name不存在时,当前set操作才执行,同setnx(name, value)

     xx,如果设置为True,则只有name存在时,当前set操作才执行'''


2)get(name)            # 获取值

3)mset()                 # 批量设置值

4)mget(keys, *args)      # 批量获取值

5)append(name, value)    # 追加


例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import  redis
redis_config  =  {
     "host" "192.168.2.230" ,
     "port" : 6379 ,
     "db" : 0
}
=  redis.Redis( * * redis_config)
r. set ( "time" , "20171124" )
print (r.get( "time" ))
 
r.mset(year = "2017" ,month = "11" ,date = "24" )
print (r.mget( "year" , "month" , "date" ))
 
r.append( "date" , "10:13" )
print  (r.get( "date" ))


运行结果:

20171124

['2017', '11', '24']

2410:13




二、list操作

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

1)lpush(name,values)

  在name对应的list中添加元素,每个新的元素都添加到列表的最左边

  r.lpush("list_name",2)

  r.lpush("list_name",3,4,5)   # 保存在列表中的顺序为5,4,3,2


2)rpush(name,values)

  同lpush,但每个新的元素都添加到列表的最右边


3)lpushx(name,value)

  在name对应的list中添加元素,只有name已经存在时,值添加到列表的最左边


4)rpushx(name,value)

  在name对应的list中添加元素,只有name已经存在时,值添加到列表的最右边


5)llen(name)

  name对应的list元素的个数

  print(r.llen("list_name"))


6)linsert(name,where,refvalue,value)

  在name对应的列表的某一个值前后插入一个新值

  参数:

     name,redis的name

     where,BEFORE或AFTER

     refvalue,标杆值,即:在它前后插入数据

     value,要插入的数据


7)lset(name,index,value)

   对name对应的list中的某一个索引位置重新赋值

   参数:

    name,redis的name

    index,list的索引位置

    value,要设置的值


8)lrem(name,value,num)

  在name对应的list中删除指定的值

  参数:

  name,redis的name

  value,要删除的值

  num,  num=0,删除列表中所有的指定值;

         num=2,从前到后,删除2个;

         num=-2,从后向前,删除2个


9)lpop(name)

  在name对应的列表的左侧获取第一个元素并在列表中移除,返回值删除那个元素的值


10)rpop(name)

  表示从右向左操作


11)lindex(name,index)

  在name对应的列表中根据索引取列表元素


12)lrange(name,start,end)

  在name对应的列表分片获取数据


例1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import  redis
redis_config  =  {
     "host" "192.168.2.230" ,
     "port" : 6379 ,
     "db" : 0
}
=  redis.Redis( * * redis_config)
r.lpush( "list1" , 1 )               # 往列表最左边,添加元素
 
r.lpush( "list1" , "a" , "b" , "c" )
print (r.lrange( "list1" , 0 , 3 ))    # 从左至右,打印下标0-3对应的元素
 
r.rpush( "list2" , 1 )               # 往列表最右边,添加元素
r.rpush( "list2" , "a" , "b" , "c" )
 
print (r.lrange( "list2" , 0 , 3 ))
print (r.llen( "list1" ))          # 打印列表中元素的个数


运行结果:

['c', 'b', 'a', '1']

['1', 'a', 'b', 'c']

4


例2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import  redis
redis_config  =  {
     "host" "192.168.2.230" ,
     "port" : 6379 ,
     "db" : 0
}
=  redis.Redis( * * redis_config)
r.lpush( "list111" , 1 )
r.lpush( "list111" , "a" , "b" , "c" )
print (r.lrange( "list111" , 0 , 3 ))
 
r.linsert( "list1111" , "AFTER" , "a" , "f" )    # 列表a元素后面插入f
print (r.lrange( "list1111" , 0 , - 1 ))          # 打印列表全部元素
r.lset( "list1111" , 3 , "g" )                  # 索引位置3重新设置新值
print (r.lrange( "list1111" , 0 , - 1 ))
 
r.lrem( "list1111" , "g" , 0 )                  # 删除列表中,指定的值(以及附件N个值)
print (r.lrange( "list1111" , 0 , - 1 ))
r.lpop( "list1111" )                        # 删除最左边一个值
 
print (r.lrange( "list1111" , 0 , - 1 ))
print (r.lindex( "list1111" , 1 ))            # 打印索引位置为1的值


运行结果:

['c', 'b', 'a', '1']

['b', 'a', 'f', '1']

['b', 'a', 'f', 'g']

['b', 'a', 'f']

['a', 'f']

f



三、set类型操作

  set集合,即不重复的列表

1)sadd(name,values)

  name对应的集合中添加元素

  r.sadd("set_name","aa")

  r.sadd("set_name","aa","bb")


2)smembers(name)

  获取name对应的集合的所有成员


3)scard("set_name")

  获取name对应的集合中的元素个数

  sinter(keys, *args)


4)sinter("set_name1","set_name2")

  获取多个name对应集合的交集

  r.sadd("set_name","aa","bb")

  r.sadd("set_name1","bb","cc")

  r.sadd("set_name2","bb","cc","dd")

  print(r.sinter("set_name","set_name1","set_name2"))


5)sunion(keys, *args)

  获取多个name对应的集合的并集

  r.sunion("set_name","set_name1","set_name2")


6)sismember(name, value)

  检查value是否是name对应的集合内的元素


7)spop(name)

  从集合的右侧移除一个元素,并将其返回


8)srem(name, value)

  删除集合中的某个元素

  r.srem("set_name", "aa")


例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import  redis
redis_config  =  {
     "host" "192.168.2.230" ,
     "port" : 6379 ,
     "db" : 0
}
=  redis.Redis( * * redis_config)
r.sadd( "set_name" , "a" , "b" , "c" )    # 添加集合
 
print (r.smembers( "set_name" ))     # 打印集合
print (r.scard( "set_name" ))        # 打印集合长度
 
r.srem( "set_name" , "a" )            # 删除集合中的元素
print (r.smembers( "set_name" ))
   
r.sadd( "set_name1" , "c" , "d" , "e" )
print (r.sinter( "set_name" , "set_name1" ))    # 打印集合的交集
print (r.sunion( "set_name" , "set_name1" ))    # 打印集合的并集
 
print  (r.sismember( "set_name1" , "d" ))        # 判断集合中是否存在元素
print  (r.spop( "set_name1" ))                 # 删除集合中最右边的一个元素
print (r.smembers( "set_name1" ))


运行结果:

set(['a', 'c', 'b'])

3

set(['c', 'b'])

set(['c'])

set(['c', 'b', 'e', 'd'])

True

e

set(['c', 'd'])




四、Hash类型操作

  Redis在内存中存储hash类型是以name对应一个字典形式存储的

1)hset(name,key,value)

  name对应的hash中设置一个键值对(不存在,则创建;否则,修改)

  参数:

  name:redis的name

  key:key1对应的hash中的key

  value:value1对应的hash中的value

  注:hsetx(name,key,value),当name对应的hash中不存在当前key则创建(相当于添加)


2)hget(name,key)

  在name对应的hash中获取根据key获取value


3)hmset(name,mapping)

  在name对应的hash中批量设置键值对

  参数:

  name:redis的name

  mapping:字典,如{'k1':'v1','k2','v2'}


4)hmget(name,keys,*args)

  在name对应的hash中获取多个key的值

  参数:

  name:redis对应的name

  keys:要获取key的集合,如:['k1','k2','k3']

  *args:要获取的key,如:k1,k2,k3

 

5)hgetall(name)

  获取name对应hash的所有键值


6)hlen(name)

  获取name对应的hash中键值的个数


7)hkeys(name)

  获取name对应的hash中所有的key的值


8)hvals(name)

  获取name对应的hash中所有的value的值


9)hexists(name,key)

  检查name对应的hash是否存在当前传入的key


10)hdel(name,*keys)

  将name对应的hash中指定key的键值对删除


例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import  redis
redis_config  =  {
     "host" "192.168.2.230" ,
     "port" : 6379 ,
     "db" : 0
}
=  redis.Redis( * * redis_config)
r.hset( "dict1" , "name" , "zhao" )   # 添加字典一对值
print (r.hget( "dict1" , "name" ))   # 打印字典值
 
r.hmset( "dict1" ,{ "age" : 27 , "sex" : "man" })   # 添加一个字典多对值
print  (r.hmget( "dict1" , "age" , "sex" ))      # 打印一个字典多对值
print (r.hgetall( "dict1" ))                  # 打印一个字典全部值
 
print (r.hlen( "dict1" ))                     # 字典长度
print (r.hkeys( "dict1" ))                    # 字典所有key
print (r.hvals( "dict1" ))                    # 字典所有value
print (r.hexists( "dict1" , "age" ))           # 判断字典key是否存在
 
r.hdel( "dict1" , "age" )                      # 删除字典某个key
print (r.hgetall( "dict1" ))


运行结果:

zhao

['27', 'man']

{'age': '27', 'name': 'zhao', 'sex': 'man'}

3

['name', 'sex', 'age']

['zhao', 'man', '27']

True

{'name': 'zhao', 'sex': 'man'}



五、其他常用操作

1)delete(*names)

  根据name删除redis中的任意数据类型


2)exists(name)

  检测redis的name是否存在


3)keys(pattern='*') 

  根据* ?等通配符匹配获取redis的name


4)expire(name ,time)

  为某个name设置超时时间


5)rename(src, dst)

  重命名


6)move(name, db))

  移动key至指定的库下


7)type(name) 

  获取name对应值的类型


例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import  redis
redis_config  =  {
     "host" "192.168.2.230" ,
     "port" : 6379 ,
     "db" : 0
}
=  redis.Redis( * * redis_config)
r. set ( "name" , "hello" )
r.delete( "name1" )           # 删除key
print (r.keys())
 
print (r. type ( "name" ))      # 打印key类型    
r.rename( "name" , "name1" )   # 重命名key
 
print (r.exists( "name" ))    # 判断key是否存在
r.move( "dict1" , 1 )           # 移动key至其他库









本文转自 huangzp168 51CTO博客,原文链接:http://blog.51cto.com/huangzp/2043967,如需转载请自行联系原作者
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
3月前
|
NoSQL Unix 网络安全
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
|
2月前
|
NoSQL Linux Redis
linux安装单机版redis详细步骤,及python连接redis案例
这篇文章提供了在Linux系统中安装单机版Redis的详细步骤,并展示了如何配置Redis为systemctl启动,以及使用Python连接Redis进行数据操作的案例。
54 2
|
23天前
|
消息中间件 存储 NoSQL
python 使用redis实现支持优先级的消息队列详细说明和代码
python 使用redis实现支持优先级的消息队列详细说明和代码
33 0
|
3月前
|
缓存 NoSQL 网络安全
【Azure Redis 缓存】 Python连接Azure Redis, 使用redis.ConnectionPool 出现 "ConnectionResetError: [Errno 104] Connection reset by peer"
【Azure Redis 缓存】 Python连接Azure Redis, 使用redis.ConnectionPool 出现 "ConnectionResetError: [Errno 104] Connection reset by peer"
|
4月前
|
安全 数据安全/隐私保护 Python
|
3月前
|
缓存 监控 NoSQL
【Azure Redis 缓存】使用Python代码获取Azure Redis的监控指标值 (含Powershell脚本方式)
【Azure Redis 缓存】使用Python代码获取Azure Redis的监控指标值 (含Powershell脚本方式)
|
4月前
|
API Python
Python高手修炼手册:精通文件系统操作,掌控I/O管理,提升编程效率
【7月更文挑战第30天】在 Python 编程中, 文件系统操作与 I/O 管理是连接程序与数据的关键。初学者常因路径错误和权限问题受挫, 而高手能自如管理文件。传统 `os` 和 `os.path` 模块易出错, `pathlib` 提供了更直观的对象导向 API。I/O 方面, 同步操作会阻塞程序, 异步 (如使用 `aiofiles`) 则能大幅提升并发能力。真正的高手不仅掌握 API, 更能预见性能瓶颈并优化代码, 实现高效与优雅。
38 1
|
3月前
|
NoSQL 网络安全 Redis
用python安装redis并设置服务自启
用python安装redis并设置服务自启
22 0
|
26天前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
60 1
|
NoSQL Linux Redis
redis的python客户端redis-py初识
 转载请注明出处哈:http://carlosfu.iteye.com/blog/2240426    声明: 我是java程序员,对python不是很熟悉,只是写书的需要,要了解一下redis的python客户端,欢迎拍砖。
1439 0