REmote DIctionary Server(Redis) 是一个key-value存储系统。使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API(python, php, java…)。
它通常被称为数据结构服务器,因为值(value)
可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
dict = {‘name’:“fentiao”, “age”:100, “scores”: [100, 90, 100]}
下载地址:http://redis.io/download,下载最新稳定版本。
解压:tar xf redis-5.0.3.tar.gz -C /usr/local/
注意:
vim /etc/services # 记录服务对应的端口号
常见的端口号:
http: 80
ssh: 22
mysql: 3306
redis: 6379
127.0.0.1:6379> set views 1000
127.0.0.1:6379> INCR views #加一
(integer) 1001
127.0.0.1:6379> get views
“1001”
127.0.0.1:6379> INCR views
(integer) 1002
127.0.0.1:6379> DECR views # 减一
(integer) 1004
127.0.0.1:6379> DECR views
(integer) 1003
import time
import redis
# *******************************第一种方式***********************************
# # redis.Redis(host='localhost', port=6379)
# conn = redis.Redis()# 默认参数就是host='localhost', port=6379,所以可以不写
# conn.set('name', 'fentiao', 3)
# print(conn.get('name'))
# print("等待3秒........")
# time.sleep(3)
# print(conn.get('name'))//空了
# ******************************第二种方式*********************
# 为了减少每次建立连接, 释放连接的开销, 推荐使用连接池。
# 多个redis对象可以共用一个连接池。
pool = redis.ConnectionPool(host='localhost', port=6379)
conn = redis.Redis(connection_pool=pool)
conn.set('name', 'fentiao', 3) # 4代表的是失效时间, 单位为秒
# 默认返回bytes类型, 如果转换, 需要解码为utf-8编码格式
print(conn.get('name').decode('utf-8'))
print("等待3秒........")
time.sleep(3)
print(conn.get('name'))
import redis
pool = redis.ConnectionPool(host='localhost', port=6379)
conn = redis.Redis(connection_pool=pool)
conn.set('name', 'fentiao', 3)
conn.set('age', 10 , 3)
conn.set('scores', 100 , 3)
print(conn.get('name'))
print(conn['name'])
# 获取所有的key值
print(conn.keys())
print(len(conn.keys()))
# 当前redis数据库中数据条数;
print(conn.dbsize())
# 删除指定key-value值
conn.delete('scores')
print("正在删除key......")
print(conn.get('scores'))
# 将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
conn.save()
print("清除前:", conn.keys())
# 清楚redis里面所有的key-value值
conn.flushall()
print("清除后:", conn.keys())
小应用:获取页面点击数原理,用incr加一即可
import redis
pool = redis.ConnectionPool(host='localhost', port=6379)
conn = redis.Redis(connection_pool=pool)
conn.set('views', 19800)
conn.incr('views')
print(conn.get('views'))
小应用:社交圈
社交网站, 每一个标签都会有自己的用户群, 通过圈子可以找到有共同特征的人(eg:python开发, 电影。。。。。。), 当一个用户加入一个或者多个圈子后, 系统可以向这个用户推荐圈子中的人
import redis
pool = redis.ConnectionPool(host='localhost', port=6379)
conn = redis.Redis(connection_pool=pool)
# 选择集合存储
conn.sadd("python", 'user1')
conn.sadd("python", 'user2')
conn.sadd("python", 'user3')
conn.sadd("movie", 'user1')
conn.sadd("movie", 'user6')
conn.sadd("movie", 'user7')
# 获取某个圈子的成员
print(conn.smembers('python'))
print(conn.smembers('movie'))
# 获取两个圈子共同拥有的成员
print(conn.sinter('python', 'movie'))
# 获取并集
print(conn.sunion('python', 'movie'))