Redis
redis中字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28#设置值
set key val
#获取值
get key
#删除值
del key
#自增
INCR key-name
#自减
DECR key-name
#将存储值加上整数
INCRBY key-name amount
#将存储值减去整数
DECRBY key-name amount
#将存储值加上浮点数
INCRBYFLOAT key-name amount
#将值value追加到给定键key-name当前存储的值的末尾
APPEND key-name value
#获取从偏移量start至偏移量end范围内的子串
GETRANGE key-name start end
#将start偏移量开始的子串设置为给定值
SETRANGE key-name offset value
#将字节串看作二进制串 并返回字串中offset的二进制位的值
GETBIT key-name offset
#将字节串看作二进制串 并将字串中offset的二进制位的值设置为value
SETBIT key-name offset value
BITCOUNT key-name [start end]
BITTOP operation dest-key key-nameredis中的列表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20LPUSH 将元素推入列表左端
lpush lstkey lval1
RPUSH 将元素推入列表右端
rpush lstkey rval1
LPOP 从列表左端弹出元素
lpush lstkey
RPOS 从列表右端弹出元素
rpush lstkey
LINDEX 获取列表在给定位置上的一个元素
lindex lstkey 1
LRANGE 获取列表在给定范围上的所有元素
lrange lstkey 0 2
LTRIM 对列表进行修剪 只保留start偏移量到end偏移量范围内的元素
ltrim lstkey 0 2
BLPOP 从非空列表中弹出位于最左端的元素
BRPOP 从非空列表中弹出位于最右端的元素
RPOPLPUSH
rpoplpush source-key dest-key
BRPOPLPUSH
brpoplpush source-key dest-keyredis的集合
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21SADD 将元素添加到集合
sadd setkey val22
SREM 从集合移除元素
srem setkey val22
SISMEMBER 检查集合中是否存在此元素
sismember setkey val22
SMEMBERS 获取集合中所有元素
smembers setkey
SCARD 获取集合包含元素的数量
scard setkey
SRANDMEMBER 从集合里面随机返回一个或多个元素
srandmember setkey 2
SPOP 随机从集合中移除一个元素 并返回被移除的元素
spop setkey
SMOVE 如果item存在source-key集合中 移除此元素添加到dest-key集合
smove source-key dest-key item
#额外还支持
SINTER 交集
SUNION 并集
SDIFF 差集redis的散列
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20HSET 散列中关联给定的键值对
hset hashkey key1 val1
HGET 获取指定散列键的值
hget hashkey key1
HGETALL 获取散列中所有键值对
hgetall hashkey
HDEL 删除散列中指定键值对
hdel hashkey key1
HMSET 为散列里一个或多个键设置值
hmset hashkey key1 val1 key2 val2
HLEN 获取散列包含键值对的数量
hlen hashkey
HEXISTS 检查给定键是否存在于散列中
hexists hashkey key1
HKEYS 获取散列包含的所有键
hkeys hashkey
HVALS hashkey 获取散列包含的所有值
hvals hashkey
HINCRBYFLOAT 将key存储的值加上浮点数
hincrbyfloat hashkey key1 incrementredis的有序集合
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18ZADD 将一个给定分值的成员添加到有序集合
zadd zsetkey 90 zhansan
ZRANGE 从有序集合李获取多个元素
zrange zsetkey 0 2 withscores
ZRANGEBYSCORE 获取给定分值范围内的所有元素
zrangebyscore zsetkey 82 95 withscores
ZREM 移除成员
zrem zsetkey zhansan
ZCARD 获取有序集合包含成员的数量
zcard zsetkey
ZCOUNT 返回分值介于min和max之间的成员数量
zcount zsetkey 80 90
ZRANK 返回某个成员在集合中的排名
zrank zsetkey zhangsan
ZSCORE 返回某个成员的分值
zscore zsetkey lisi
ZINCRBY 将某个成员的分值加上increment
zincrby zsetkey 2 lisi案例:投票
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/6/5 11:17
# @Author : Ropon
# @File : test.py
import time, redis
pool = redis.ConnectionPool(host="172.16.7.127", port=6379, password="", max_connections=1024)
conn = redis.Redis(connection_pool=pool)
ONE_WEEK_IN_SECONDS = 7 * 86400
VOTE_SCORE = 200
def article_vote(conn, user, article):
"""
投票函数
"""
# 计算投票截止时间
cutoff = time.time() - ONE_WEEK_IN_SECONDS
if conn.zscore('time:', article) < cutoff:
return
article_id = article.split(':')[-1]
if conn.sadd('voted:' + article_id, user):
# ZINCRBY 对有序集合成员的分值执行自增
conn.zincrby('score:', article, VOTE_SCORE)
# HINCRBY 对散列存储的值进行自增
conn.hincrby(article, 'vote', 1)
def post_article(conn, user, title, link):
"""
新增文章函数
"""
# INCR 计数器自增
article_id = str(conn.incr('article:'))
voted = 'voted:' + article_id
conn.sadd(voted, user)
conn.expire(voted, ONE_WEEK_IN_SECONDS)
now = time.time()
article = 'article:' + article_id
conn.hmset(article, {
'title': title,
'link': link,
'poster': user,
'time': now,
'votes': 1,
})
conn.zadd('score:', {article: now + VOTE_SCORE})
conn.zadd('time:', {article: now})
return article_id
ARTICLES_PER_PAGE = 25
def get_articles(conn, page, order='score:'):
"""
获取所有文章
"""
start = (page - 1) * ARTICLES_PER_PAGE
end = start + ARTICLES_PER_PAGE - 1
ids = conn.zrevrange(order, start, end)
articles = []
for id in ids:
article_data = conn.hgetall(id)
article_data['id'] = id
articles.append(article_data)
return articles
def add_remove_groups(conn, article_id, to_add=None, to_remove=None):
"""
添加或删除分类
"""
if to_remove is None:
to_remove = []
if to_add is None:
to_add = []
article = 'article:' + article_id
for group in to_add:
conn.sadd('group:' + group, article)
for group in to_remove:
conn.srem('group:' + group, article)
def get_group_articles(conn, group, page, order='score:'):
"""
通过分类获取所有文章
"""
key = order + group
if not conn.exists(key):
conn.zinterstore(key, ['group:' + group, order], aggregate='max')
conn.expire(key, 60)
return get_articles(conn, page, key)
# post_article(conn, "Ropon", "Python从入门到放弃", "https://www.ropon.top/1.html")
article_vote(conn, "Ropon", "article:5")