redis 数据库

  1. 什么是redis?
    REmote DIctionary Server(Redis) 是一个key-value存储系统。使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API(python, php, java…)。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

  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 && make test 

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

运行服务器:
	./redis-server
	也可以通过启动参数告诉redis使用指定配置文件使用下面命令启动。
	./redis-server ../redis.conf
进入客户端:
	./redis-cli	

运行界面如下:
服务器
客户端
注意:
vim /etc/services # 记录服务对应的端口号
常见端口号有:
http: 80
ssh: 22
mysql: 3306
redis: 6379

  1. 常用操作:
set name "cat"		#设置名字
get name		#获取名字
del name 	#删除名字
INCR views	#在原由基础上加1
DECR views	#在当前值减1
GETSET views 100	#返回当前值并将值重新设置为100
get views	#获取当前值

如下:
在这里插入图片描述
在这里插入图片描述
对列表的操作

127.0.0.1:6379> LPUSH sql mysql
(integer) 1
127.0.0.1:6379> LPUSH sql redis
(integer) 2
127.0.0.1:6379> LPUSH sql sqlserver
(integer) 3
127.0.0.1:6379> LPUSH sql mysql
(integer) 4
127.0.0.1:6379> LRANGE sql 0 2
1) "mysql"
2) "sqlserver"
3) "redis"

对集合操作:

127.0.0.1:6379> SADD  sql mysql
(integer) 1
127.0.0.1:6379> SADD SQL REDIS
(integer) 1
127.0.0.1:6379> SADD  sql redis
(integer) 1
127.0.0.1:6379> SADD  sql sqlserver
(integer) 1
127.0.0.1:6379> SADD  sql redis
(integer) 0
127.0.0.1:6379> SMEMBERS sql
1) "sqlserver"
2) "redis"
3) "mysql"
有序集合:
WITHSCORES可选参数
127.0.0.1:6379> DEL sql
(integer) 1
127.0.0.1:6379> ZADD sql 1 redis
(integer) 1
127.0.0.1:6379> ZADD sql 2 redis
(integer) 0
127.0.0.1:6379> ZADD sql 3 mysql
(integer) 1
127.0.0.1:6379> ZADD sql 2 mariadb
(integer) 1
127.0.0.1:6379> ZRANGE sql 0 2
1) "mariadb"
2) "redis"
3) "mysql"
  1. redis的连接:
    (1)第一种方式:导入redis模块,默认时间为秒
conn = redis.Redis()
conn.set('name', 'fentiao', 3)
print(conn.get('name'))
print("等待3秒........")
time.sleep(3)
print(conn.get('name'))

显示结果:
在这里插入图片描述
(2)第二种方式:连接池
为了减少每次建立连接, 释放连接的开销, 推荐使用连接池。并且多个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'))

在这里插入图片描述
6. redis的常用操作
首先建立连接池,设置各参数,同上;

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())	#获取所有key值
print(len(conn.keys()))	#获取key值的长度

获取所有key值
获取当前redis数据库中数据条数:

print(conn.dbsize())

当前redis数据库中数据条数
删除指定key-value值

conn.delete('scores')
print("正在删除key......")
print(conn.get('scores'))

删除指定key-value值
将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

conn.save()

清除redis里面的所有的key-value值

print("清除前:", conn.keys())
conn.flushall()	# 清楚redis里面所有的key-value值
print("清除后:", conn.keys())

在这里插入图片描述
7. redis的应用之页面点击数
自动记录页面点击数即:当有用户点击一次页面,当前redis数据库中相应的key值自动加一
如下为本机设置的当运行时使相应key值自动加一的一个连接池。

import redis
pool = redis.ConnectionPool(host='localhost', port=6379)
conn = redis.Redis(connection_pool=pool)
conn.set('views', 19800)	#设置初始值
conn.incr('views') #incr-加1操作
print(conn.get('views'))
conn.incr('views')
print(conn.get('views'))

代码运行结果如下:
在这里插入图片描述
8.redis应用场景之社交圈子相关数据
社交网站, 每一个标签都会有自己的用户群, 通过圈子可以找到有共同特征的人(eg:python开发, 电影。。。。。。), 当一个用户加入一个或者多个圈子后, 系统可以向这个用户推荐圈子中的人
假设定义两个社交圈子:python和movice。实现获取各圈子的成员,两个圈子成员的交并补成员等操作。(创建圈子时,选择集合存储)
如下;

conn.sadd("python",'user1')
conn.sadd("python",'user2')
conn.sadd("python",'user3')

conn.sadd("movice",'user1')
conn.sadd("movice",'user2')
conn.sadd("movice",'user3')
#获取某个圈子的成员
print('python圈子:',conn.smembers('python'))
print('movice圈子:',conn.smembers('movice'))

#获取两个圈子共同拥有的成员
print('交集:',conn.sinter('python','movice')) #交集
print('并集:',conn.sunion('python','movice')) #并集
print('补集',conn.sdiff('python','movice')) #

运行如下:
redis应用之社交圈子

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值