您的位置:首页 > 数据库 > Redis

redis安装,语法和Python连接

2018-02-25 15:12 459 查看
程序下载http://down.51cto.com/data/2440789:

点击客户端进行连接测试,出现下图说明测试成功





语法:
redis的字符串操作

set(key,value,ex=None,px=None,nx=False,xx=False)
在redis中设置值,默认,不存在则创建,存在则修改
参数:
ex:过期时间(秒)
px: 过期时间(毫秒)
nx:如果设置为True,则只有key不存在时。当前set才会执行
xx:如果设置为True,则只有key存在时,当前set才会执行

setnx(key,value)
设置值,只有key不存在时,执行设置操作

setex(key,value,time)
设置值
参数:
time:过期时间单位是秒

psetex(key,value,time)
设置值
参数:
time:过期时间单位是毫秒

mset(*args,**kwargs)
批量设置值
如:
mset k1 v1 k2 v2
或者mset(k1='v1',k2='v2')

getset(key,value)
设置新值并返回原来的值

getrange(key,start,end)
获取子序列(根据字节获取,非字符)
参数:
key: redis的key
start:起始位置(字节)
end:  结束位置(字节)
如:“张三”,0-3表示“张”

setrange(key,offset,value)
修改字符串内容。从指定字符串索引开始向后替换(新值太长时,则向后添加)
参数:
offset: 字符串的索引,字节(一个汉字三个字节)
value:  要设置的值

setbit(key,offset,value)
对key对应的二进制表示的位进行操作
参数:
key:  redis的key
offset:位的索引(将值变为二进制后再进行索引)
value:   值只能是0或1
例:
如果在redis中有一个对应:n1 = "foo"
那么字符串“foo”的二进制表示为:01100110 01101111 01101111
如果执行setbit('n1',7,1)则就会将第七位设置为1
那么最终二进制则变成 01100111 01101111 01101111 即“goo”
代码实现
127.0.0.1:6379> set n1 foo
OK
127.0.0.1:6379> setbit n1 7 1
(integer) 0
127.0.0.1:6379> get n1
"goo"
127.0.0.1:6379>
用处:
如QQ统计在线人数,并且看谁在线:

让1代表在线。0代表不在线
offset代表用户对应的ID
如果用户上线,则将该ID设置为1
用bitcount统计有多少个1,即有多少用户在线
用getbit查看用户是否在线
代码实现:
127.0.0.1:6379> setbit QQ 55 1
(integer) 0
127.0.0.1:6379> setbit QQ 1000 1
(integer) 0
127.0.0.1:6379> bitcount QQ
(integer) 2
127.0.0.1:6379> getbit QQ 55
(integer) 1
127.0.0.1:6379>  getbit QQ 66
(integer) 0
127.0.0.1:6379>

append(key,value)
在redis,key对应的值后追加
参数:
key:	redis的key
value: 要追加的字符串
例子:
127.0.0.1:6379> get zhang
"san"
127.0.0.1:6379> append zhang san
(integer) 6
127.0.0.1:6379> get zhang
"sansan"
127.0.0.1:6379>

del key
删除key
hash
如果需要存一个班级的姓名等信息

127.0.0.1:6379> hset info key duwentao
(integer) 1
127.0.0.1:6379> hset info age 20
(integer) 1
127.0.0.1:6379> hset info id 1
(integer) 1
127.0.0.1:6379> hgetall info
1) "key"
2) "duwentao"
3) "age"
4) "20"
5) "id"
6) "1"
127.0.0.1:6379> hget info age
"20"
127.0.0.1:6379> hkeys info  #查看有多少key
1) "key"
2) "age"
3) "id"
127.0.0.1:6379> hvals info #查看有多少value
1) "duwentao"
2) "20"
3) "1"

hmset key field value [field value ...]
用法:
127.0.0.1:6379> hmset li k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> hgetall li
1) "k1"
2) "v1"
3) "k2"
4) "v2"
5) "k3"
6) "v3"

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

hmget key field [field ...]
用法:
127.0.0.1:6379> hmget li k1 k2
1) "v1"
2) "v2"

hlen(key)
获取有几个key

hkeys(key)
获取key对应的hash中所有key的值

hvals(key)
获取key对应的hash中所有的value值

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

hincrby key field increment
自增加
127.0.0.1:6379> hincrby info age 1
(integer) 21
127.0.0.1:6379>  hincrby info age 1
(integer) 22

hscan key cursor [MATCH pattern] [COUNT count]
起到一个过滤的作用
如  hscan info 0 match *a*

列表:

lpush(从左边放)和rpush(从右边放)

127.0.0.1:6379> lpush keys1 zhangsan lisi wanger
(integer) 3
127.0.0.1:6379>  LRANGE keys1 0 -1
1) "wanger"
2) "lisi"
3) "zhangsan"
127.0.0.1:6379> RPUSH keys2 zhangsan lizi wanger
(integer) 3
127.0.0.1:6379>  LRANGE keys2 0 -1
1) "zhangsan"
2) "lizi"
3) "wanger"
127.0.0.1:6379>

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

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

llen key
key对应的list元素个数

LINSERT key BEFORE|AFTER pivot value
在key对应的列表的某一个值前或后插入一个新值
参数:
key:            redis的key
BEFORE|AFTER:   在什么或者后
privot:         标杆值,即在他前后插入数据
value:          要插入的数据

lset key index value
对key对应的list中的某一个索引位置进行重新赋值
参数:
key:  redis的key值
index:list的索引位置
value:要设置的值

lrem key count value
在key对应的list中删除指定的值

参数:
key:redis的key
value:要删除的值
count:
count=0: 删除列表中所有的指定的值
count=2: 从前向后,删除两个
count=-2:从后向前,删除两个

lpop key
在key对应的列表的左侧获取第一个元素并在列表中删除,返回值则是第一个元素。

lindex key index
在key中对应的列表中根据索引获取列表元素

LRANGE key start stop
在key对应的列表分片获取数据
参数:
key:  redis的key
start:索引的起始位置
end:  索引的结束位置

LTRIM key start stop
在key对应的列表中移除没有在start stop索引之间的值
参数:
key:redis的key
start:索引的起始位置
stop:索引的结束位置

RPOPLPUSH source destination
从一个表中取出最右边的元素,同时将其添加至另一个列表的最左边
参数:
source:     要取出数据的列表的key
destination:要添加数据的列表的key

BRPOPLPUSH source destination timeout
从一个列表的右侧移除一个元素并将其添加到另一个列表的左侧
参数:
source:取出并移除元素的列表对应的key
destination:要插入元素的列表对应的key
timeout:当source对应的列表中没有数据时,阻塞等待其数据的超时时间(秒),0表示永远堵塞

集合:
sadd key member [member ...]
key对应的集合中添加元素(无重复,无序)
如:
127.0.0.1:6379> sadd names3 zhangsan zhangsan lisi lisi 3 3
(integer) 3
127.0.0.1:6379> SMEMBERS names3 #获取所有值
1) "3"
2) "lisi"
3) "zhangsan"

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

sdiff key [key ...]
在第一个key对应的集合中且不在其他key对应的集合中的元素

sdiffstore destination key [key ...]
在第一个key对应的集合中且不在其他key对应的集合中的元素,把他添加到destination里

SINTER key1 [key2]
返回给定所有集合的交集

SINTERSTORE destination key1 [key2]
返回给定所有集合的交集并存储在 destination 中

SISMEMBER key member
判断 member 元素是否是集合 key 的成员

SMEMBERS key
返回集合中的所有成员

SMOVE source destination member
将 member 元素从 source 集合移动到 destination 集合

SPOP key
移除并返回集合中的一个随机元素

SRANDMEMBER key [count]
返回集合中一个或多个随机数

SREM key member1 [member2]
移除集合中一个或多个成员

SUNION key1 [key2]
返回所有给定集合的并集

SUNIONSTORE destination key1 [key2]
所有给定集合的并集存储在 destination 集合中

SSCAN key cursor [MATCH pattern] [COUNT count]
迭代集合中的元素

有序集合:
ZADD key score1 member1 [score2 member2]
向有序集合添加一个或多个成员,或者更新已存在成员的分数

ZCARD key
获取有序集合的成员数

ZCOUNT key min max
计算在有序集合中指定区间分数的成员数

ZINCRBY key increment member
有序集合中对指定成员的分数加上增量 increment

ZINTERSTORE destination numkeys key [key ...]
计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中

ZLEXCOUNT key min max
在有序集合中计算指定字典区间内成员数量

ZRANGE key start stop [WITHSCORES]
通过索引区间返回有序集合成指定区间内的成员

ZRANGEBYLEX key min max [LIMIT offset count]
通过字典区间返回有序集合的成员

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]
通过分数返回有序集合指定区间内的成员

ZRANK key member
返回有序集合中指定成员的索引

ZREM key member [member ...]
移除有序集合中的一个或多个成员

ZREMRANGEBYLEX key min max
移除有序集合中给定的字典区间的所有成员

ZREMRANGEBYRANK key start stop
移除有序集合中给定的排名区间的所有成员

ZREMRANGEBYSCORE key min max
移除有序集合中给定的分数区间的所有成员

ZREVRANGE key start stop [WITHSCORES]
返回有序集中指定区间内的成员,通过索引,分数从高到底

ZREVRANGEBYSCORE key max min [WITHSCORES]
返回有序集中指定分数区间内的成员,分数从高到低排序

ZREVRANK key member
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

ZSCORE key member
返回有序集中,成员的分数值

ZUNIONSTORE destination numkeys key [key ...]
计算给定的一个或多个有序集的并集,并存储在新的 key 中

ZSCAN key cursor [MATCH pattern] [COUNT count]
迭代有序集合中的元素(包括元素成员和元素分值)
安装python 模块
pip3 install redis

Python 线程池连接redis



普通连接redis



管道:一次可以执行多个命令

import redis

pool = redis.ConnectionPool(host='127.0.0.1',port=6379) #连接池
#r = redis.Redis(host='127.0.0.1',port=6379)
r = redis.Redis(connection_pool=pool)
pipe = r.pipeline(transaction=True)

r.set('foo','bar')
r.set('zhangsan','heheheh')

pipe.execute()


实现订阅和发布
服务端(发布端):
import redis
pool = redis.ConnectionPool(host="127.0.0.1",port='6379')
rc = redis.Redis(connection_pool=pool)

while True:
mes = str(input("请输入要发布的内容:"))
rc.publish('fm100.5', mes)
客户端(订阅端):
import redis
pool = redis.ConnectionPool(host="127.0.0.1",port='6379')
rc = redis.Redis(connection_pool=pool)

ps = rc.pubsub() #打开
ps.subscribe(['fm100.5']) #调频
for item in ps.listen(): #监听
if item['type'] == 'message':
data = item['data']
print(data.decode('utf-8'))
微信公众号
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis 安装