天天看点

python操作redis

一、字符串操作

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)    # 追加

例子:

<code>import</code> <code>redis</code>

<code>redis_config </code><code>=</code> <code>{</code>

<code>    </code><code>"host"</code><code>: </code><code>"192.168.2.230"</code><code>,</code>

<code>    </code><code>"port"</code><code>:</code><code>6379</code><code>,</code>

<code>    </code><code>"db"</code><code>:</code><code>0</code>

<code>}</code>

<code>r </code><code>=</code> <code>redis.Redis(</code><code>*</code><code>*</code><code>redis_config)</code>

<code>r.</code><code>set</code><code>(</code><code>"time"</code><code>,</code><code>"20171124"</code><code>)</code>

<code>print</code><code>(r.get(</code><code>"time"</code><code>))</code>

<code>r.mset(year</code><code>=</code><code>"2017"</code><code>,month</code><code>=</code><code>"11"</code><code>,date</code><code>=</code><code>"24"</code><code>)</code>

<code>print</code><code>(r.mget(</code><code>"year"</code><code>,</code><code>"month"</code><code>,</code><code>"date"</code><code>))</code>

<code>r.append(</code><code>"date"</code><code>,</code><code>"10:13"</code><code>)</code>

<code>print</code> <code>(r.get(</code><code>"date"</code><code>))</code>

运行结果:

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:

<code>r.lpush(</code><code>"list1"</code><code>,</code><code>1</code><code>)              </code><code># 往列表最左边,添加元素</code>

<code>r.lpush(</code><code>"list1"</code><code>,</code><code>"a"</code><code>,</code><code>"b"</code><code>,</code><code>"c"</code><code>)</code>

<code>print</code><code>(r.lrange(</code><code>"list1"</code><code>,</code><code>0</code><code>,</code><code>3</code><code>))   </code><code># 从左至右,打印下标0-3对应的元素</code>

<code>r.rpush(</code><code>"list2"</code><code>,</code><code>1</code><code>)              </code><code># 往列表最右边,添加元素</code>

<code>r.rpush(</code><code>"list2"</code><code>,</code><code>"a"</code><code>,</code><code>"b"</code><code>,</code><code>"c"</code><code>)</code>

<code>print</code><code>(r.lrange(</code><code>"list2"</code><code>,</code><code>0</code><code>,</code><code>3</code><code>))</code>

<code>print</code><code>(r.llen(</code><code>"list1"</code><code>))         </code><code># 打印列表中元素的个数</code>

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

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

4

例2:

<code>r.lpush(</code><code>"list111"</code><code>,</code><code>1</code><code>)</code>

<code>r.lpush(</code><code>"list111"</code><code>,</code><code>"a"</code><code>,</code><code>"b"</code><code>,</code><code>"c"</code><code>)</code>

<code>print</code><code>(r.lrange(</code><code>"list111"</code><code>,</code><code>0</code><code>,</code><code>3</code><code>))</code>

<code>r.linsert(</code><code>"list1111"</code><code>,</code><code>"AFTER"</code><code>,</code><code>"a"</code><code>,</code><code>"f"</code><code>)   </code><code># 列表a元素后面插入f</code>

<code>print</code><code>(r.lrange(</code><code>"list1111"</code><code>,</code><code>0</code><code>,</code><code>-</code><code>1</code><code>))         </code><code># 打印列表全部元素</code>

<code>r.lset(</code><code>"list1111"</code><code>,</code><code>3</code><code>,</code><code>"g"</code><code>)                 </code><code># 索引位置3重新设置新值</code>

<code>print</code><code>(r.lrange(</code><code>"list1111"</code><code>,</code><code>0</code><code>,</code><code>-</code><code>1</code><code>))</code>

<code>r.lrem(</code><code>"list1111"</code><code>,</code><code>"g"</code><code>,</code><code>0</code><code>)                 </code><code># 删除列表中,指定的值(以及附件N个值)</code>

<code>r.lpop(</code><code>"list1111"</code><code>)                       </code><code># 删除最左边一个值</code>

<code>print</code><code>(r.lindex(</code><code>"list1111"</code><code>,</code><code>1</code><code>))           </code><code># 打印索引位置为1的值</code>

['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_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")

例子:

<code>r.sadd(</code><code>"set_name"</code><code>,</code><code>"a"</code><code>,</code><code>"b"</code><code>,</code><code>"c"</code><code>)   </code><code># 添加集合</code>

<code>print</code><code>(r.smembers(</code><code>"set_name"</code><code>))    </code><code># 打印集合</code>

<code>print</code><code>(r.scard(</code><code>"set_name"</code><code>))       </code><code># 打印集合长度</code>

<code>r.srem(</code><code>"set_name"</code><code>,</code><code>"a"</code><code>)           </code><code># 删除集合中的元素</code>

<code>print</code><code>(r.smembers(</code><code>"set_name"</code><code>))</code>

<code>  </code> 

<code>r.sadd(</code><code>"set_name1"</code><code>,</code><code>"c"</code><code>,</code><code>"d"</code><code>,</code><code>"e"</code><code>)</code>

<code>print</code><code>(r.sinter(</code><code>"set_name"</code><code>,</code><code>"set_name1"</code><code>))   </code><code># 打印集合的交集</code>

<code>print</code><code>(r.sunion(</code><code>"set_name"</code><code>,</code><code>"set_name1"</code><code>))   </code><code># 打印集合的并集</code>

<code>print</code> <code>(r.sismember(</code><code>"set_name1"</code><code>,</code><code>"d"</code><code>))       </code><code># 判断集合中是否存在元素</code>

<code>print</code> <code>(r.spop(</code><code>"set_name1"</code><code>))                </code><code># 删除集合中最右边的一个元素</code>

<code>print</code><code>(r.smembers(</code><code>"set_name1"</code><code>))</code>

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的键值对删除

<code>r.hset(</code><code>"dict1"</code><code>,</code><code>"name"</code><code>,</code><code>"zhao"</code><code>)  </code><code># 添加字典一对值</code>

<code>print</code><code>(r.hget(</code><code>"dict1"</code><code>,</code><code>"name"</code><code>))  </code><code># 打印字典值</code>

<code>r.hmset(</code><code>"dict1"</code><code>,{</code><code>"age"</code><code>:</code><code>27</code><code>,</code><code>"sex"</code><code>:</code><code>"man"</code><code>})  </code><code># 添加一个字典多对值</code>

<code>print</code> <code>(r.hmget(</code><code>"dict1"</code><code>,</code><code>"age"</code><code>,</code><code>"sex"</code><code>))     </code><code># 打印一个字典多对值</code>

<code>print</code><code>(r.hgetall(</code><code>"dict1"</code><code>))                 </code><code># 打印一个字典全部值</code>

<code>print</code><code>(r.hlen(</code><code>"dict1"</code><code>))                    </code><code># 字典长度</code>

<code>print</code><code>(r.hkeys(</code><code>"dict1"</code><code>))                   </code><code># 字典所有key</code>

<code>print</code><code>(r.hvals(</code><code>"dict1"</code><code>))                   </code><code># 字典所有value</code>

<code>print</code><code>(r.hexists(</code><code>"dict1"</code><code>,</code><code>"age"</code><code>))          </code><code># 判断字典key是否存在</code>

<code>r.hdel(</code><code>"dict1"</code><code>,</code><code>"age"</code><code>)                     </code><code># 删除字典某个key</code>

<code>print</code><code>(r.hgetall(</code><code>"dict1"</code><code>))</code>

zhao

['27', 'man']

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

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

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

{'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对应值的类型

<code>r.</code><code>set</code><code>(</code><code>"name"</code><code>,</code><code>"hello"</code><code>)</code>

<code>r.delete(</code><code>"name1"</code><code>)          </code><code># 删除key</code>

<code>print</code><code>(r.keys())</code>

<code>print</code><code>(r.</code><code>type</code><code>(</code><code>"name"</code><code>))     </code><code># 打印key类型    </code>

<code>r.rename(</code><code>"name"</code><code>,</code><code>"name1"</code><code>)  </code><code># 重命名key</code>

<code>print</code><code>(r.exists(</code><code>"name"</code><code>))   </code><code># 判断key是否存在</code>

<code>r.move(</code><code>"dict1"</code><code>,</code><code>1</code><code>)          </code><code># 移动key至其他库</code>

本文转自 huangzp168 51CTO博客,原文链接:http://blog.51cto.com/huangzp/2043967,如需转载请自行联系原作者