redis的关于python的应用

## 1. 什么是Redis?

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]}




# 2.Redis的优势?

- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,
通过MULTI和EXEC指令包起来。
- Redis支持数据的备份,即master-slave模式的数据备份。
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。




## 3.redis的安装
下载地址:http://redis.io/download,下载最新稳定版本。
tar xzf redis-5.0.3.tar.gz



- 启动:
make完后 redis-5.0.3目录下会出现编译后的redis服务程序redis-server,
还有用于测试的客户端程序redis-cli,两个程序位于安装目录 src 目录下:
./redis-server


也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。
./redis-server ../redis.conf


******************注意:
vim /etc/services   # 记录服务对应的端口号
常见的端口号:
    http: 80
    ssh: 22
    mysql: 3306
    redis: 6379


redis中的数据类型以及基本操作
127.0.0.1:6379> set views 1000  #设定一个变量为1000
127.0.0.1:6379> INCR views         #加法,每次加一
(integer) 1001
127.0.0.1:6379> get views           #获得这个变量的值
"1001"
127.0.0.1:6379> DECR views          #减法,每次减一
(integer) 1004

#redis中的字典
127.0.0.1:6379> HMSET student name "xiaoming" age 19 score 100  #设置一个字典
OK
127.0.0.1:6379> HMGET student name      #获取key值对应的value值
1) "xiaoming"
127.0.0.1:6379> HGETALL student         #获取字典的所有信息
1) "name"
2) "xiaoming"
3) "age"
4) "19"
5) "score"
6) "100"

#redis中的列表
127.0.0.1:6379> LPUSH sql mysql         #创建一个列表,并添加元素mysql
(integer) 1
127.0.0.1:6379> LPUSH sql redis         #添加元素redis,将该元素放置列表0的位置
(integer) 2
127.0.0.1:6379> LPUSH sql mysql         #再次添加元素mysql,将该元素放置列表0的位置,其余元素往后顺移
(integer) 3
127.0.0.1:6379> LPUSH sql server
(integer) 4
127.0.0.1:6379> LRANGE sql 0 2          #获得列表0到2的元素
1) "server"
2) "mysql"
3) "redis"

#redis中的删除
127.0.0.1:6379> DEL sql
(integer) 1

#redis中的集和
127.0.0.1:6379> SADD sql mysql      #创建sql集和,添加元素mysql
(integer) 1
127.0.0.1:6379> SADD sql redis
(integer) 1
127.0.0.1:6379> SADD sql server
(integer) 1
127.0.0.1:6379> SADD sql redis      #重复添加相同的元素则不重复显示,即去重
(integer) 0
127.0.0.1:6379> SMEMBERS sql        #获得集合里的所有元素
1) "redis"
2) "mysql"
3) "server"

#redis中的有序集和
127.0.0.1:6379> ZADD sql 1 redis    #创建集和sql,添加元素redis在第一个位置
(integer) 1
127.0.0.1:6379> ZADD sql 2 redis    #重复添加,返回值为0为无效
(integer) 0
127.0.0.1:6379> ZADD sql 3 mysql    #添加元素mysql在第三个位置
(integer) 1
127.0.0.1:6379> ZADD sql 2 server
(integer) 1
127.0.0.1:6379> ZRANGE sql 0 2      #获得集合中的元素
1) "redis"
2) "server"
3) "mysql"
对于redis的常用操作
import time

import redis

#连接redis
#******第一种方式*******
redis.Redis(host='localhost',port=6379)

conn= redis.Redis()
conn.set('name','GG',4)# 4代表的是失效时间, 单位为秒
print(conn.get('name'))
# 默认返回bytes类型, 如果转换, 需要解码为utf-8编码格式
print(conn.get('name').decode('utf-8'))
print("等待4秒........")
time.sleep(4)
print(conn.get('name'))


# ******第二种方式********
# 为了减少每次建立连接, 释放连接的开销, 推荐使用连接池。
# 多个redis对象可以共用一个连接池。
pool=redis.ConnectionPool(host='localhost',port=6379)
conn=redis.Redis(connection_pool=pool)
conn.set('name','GG',4)
# 4代表的是失效时间, 单位为秒
print(conn.get('name'))
# 默认返回bytes类型, 如果转换, 需要解码为utf-8编码格式
print("等待4秒........")
time.sleep(4)
print(conn.get('name'))

在这里插入图片描述

redis的常用操作
import redis
pool =redis.ConnectionPool(host='localhost',port=6379)
conn=redis.Redis(connection_pool=pool)

conn.set('name', 'GG', 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())

在这里插入图片描述

redis页面点击数的设置
import redis

pool = redis.ConnectionPool(host='localhost', port=6379)
conn = redis.Redis(connection_pool=pool)

conn.set('views', 19800)
for i in range(1000):
    conn.incr('views')
    print(conn.get('views'))

在这里插入图片描述

"""
社交网站, 每一个标签都会有自己的用户群, 通过圈子可以找到有共同特征的人(eg:
python开发, 电影。。。。。。), 当一个用户加入一个或者多个圈子后, 系统可以
向这个用户推荐圈子中的人
"""
redis中获取相关的信息
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'))

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/GLH_2236504154/article/details/87118313