一、字符串操作
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,如需转载请自行联系原作者