135 views
python项目前导

1.redis简介

文章目录

Redis内存数据库

背景

随着互联网+大数据时代的来临,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量。
这个时候就需要一种能够快速存取数据的组件来缓解数据库服务I/O的压力,来解决系统性能上的瓶颈。

Redis是什么?

Redis是一个高性能的,开源的,C语言开发的,键值对存储数据的nosql数据库。
NoSQL:not only sql,泛指非关系型数据库    Redis/MongoDB/Hbase Hadoop
关系型数据库:MySQL、oracle、SqlServer

Redis特性

1. Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
2. Redis不仅仅支持简单的key-value类型的数据,同时还提供List,set等数据类型
3. Redis支持数据的备份

# Redis有什么用?
Redis的主要作用:快速存取

# Redis应用场景
点赞/秒杀/直播平台的在线好友列表/商品排行榜/单点登录

Redis怎么用?

官网地址:https://redis.io/
命令地址:http://doc.redisfans.com/

Redis的五大数据类型以及应用场景

string/list/set/hash/zset

Redis的安装及启动

sudo apt-get install redis-server

查看帮助命令
redis-server --help

编辑Redis配置文件
sudo vim /etc/redis/redis.conf
将daemonize no改为 daemonize yes保存退出

启动
redis-server

打开服务
sudo service redis start

关闭服务
sudo service redis stop

Redis的配置文件

/etc/redis/redis.conf

当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面。
daemonize no

监听端口号,默认为 6379,如果你设为 0 ,redis 将不在 socket 上监听任何客户端连接。
port 6379

设置数据库的数目。
databases 16

根据给定的时间间隔和写入次数将数据保存到磁盘
下面的例子的意思是:
900 秒内如果至少有 1 个 key 的值变化,则保存
300 秒内如果至少有 10 个 key 的值变化,则保存
60 秒内如果至少有 10000 个 key 的值变化,则保存

save 900 1
save 300 10
save 60 10000

监听端口号,默认为 6379,如果你设为 0 ,redis 将不在 socket 上监听任何客户端连接。
port 6379

Redis默认只允许本地连接,不允许其他机器连接
bind 127.0.0.1

更多配置文件:https://www.cnblogs.com/kreo/p/4423362.html

Redis数据库简单使用

DBSIZE      查看当前数据库的key数量
keys *      查看key的内容
FLUSHDB     清空当前数据库的key的数量
FLUSHALL    清空所有库的key(慎用)
exists key   判断key是否存在 

redis常用五大数据类型

- string
- list
- set
- hash
- zset

1.redis-string

string是redis最基本的类型,一个key对应一个value

string可以包含任何数据,最大不能超过512M
1.set/get/del/append/strlen

set  ---- 设置值
get  ---- 获取值
mset  ---- 设置多个值
mget  ---- 获取多个值
append ---- 添加字段
del ---- 删除
strlen ---- 返回字符串长度

2.incr/decr/incrby/decrby

incr ---- 增加
decr ---- 减少
incrby  ----- 制定增加多少
decrby  ----- 制定减少多少

3.getrange/setrange

getrange ---- 获取指定区间范围内的值,类似between....and的关系
setrange ---- 代表从第几位开始替换,下脚本从零开始
从0 -1表示全部

2.redis-list(单值多value)

List(列表)

列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素列表的头部(左边)或者尾部(右边)
它的底层实际是个链表

1.lpush/rpush/lrange

lpush/rpush/lrange ---- 从左/从右/获取指定长度
lpush list01  1 2 3 4 5  倒序排列
rpush list02  1 2 3 4 5  正序排列
lrange  list01  0  -1  获取list01 中的所有值

2.lpop/rpop

lpop/rpop ---- 移除最左/最右
lpop list01 删除元素5
rpop list01 删除元素1

3.lindex,按照索引下标获得元素(从上到下)

lrange list01 0 -1
lindex list01 1

4.llen,求列表长度

llen list01 

5.lrem key

删N个value
lrem list01 2 1   在list01中删除2个1

6.ltrim key

ltrim ---- 开始index结束index,截取指定范围的值后在赋值给key
ltrim list01 0 2    截取list01 从0到2的数据在赋值给list01

7.rpoplpush list1 list2 将list1中最后一个压入list2中第一位

lrange list01 0 -1
lrange list02 0 -1
rpoplpush list1 list2

8.lset key index value

lset list01 0 x     将list02中第一位换成x

9.linsert key before/after

linsert list01b  before x php  在x之前加字段php

3.redis-Hash

hash是一个键值对集合

hash是一个string类型的field和value的映射表,hash特别适合存储对象

1.hset/hget/hmset/hmget/hgetall/hdel

设值/取值/设值多个值/取多个值/取全部值/删除值
hset user id 11
hget user id 
hmset customer id 11 name juran age 26
hmget customer id name age      #只返回相应的值
hgetall   customer              #返回全部
hdel customer id   #删除id

2.hlen

求哈希长度 
hlen customer   

3.hexists key

hexists ---- 在key里面的某个值
存在返回1 ,不存在返回0

4.hkeys/hvals

hkeys students
hvals students

4.redis-set(不重复的)

Set(集合)

set是string类型的无序集合
1.sadd/smembers/sismember

sadd/smembers/sismember ---- 添加/查看集合/查看是否存在
sadd set01 1 2 2 3 3  去掉重复添加
smembers set01   得到set01
sismember set01 1  如果存在返回1  不存在返回0

2.scard

scard ---- 获取集合里面的元素个数
scard set01   

3.srem key value

srem ---- 删除集合中元素
srem set01 3
SMEMBERS set01   3已经被删除掉

4.srandmember key

srandmembe ---- 随机出几个数
sadd set02  1 2 3 4 5 6 7 8
srandmember set02  2 

5.spop key

spop ---- 随机出栈
spop set01

6.smove key1 key2

sadd set03 x y z 
smove set01 set03 2  将set01中的2 移动到set03中

7.数学集合类

sadd set01 1 2 3 4 5
sadd set02 1 2 3 a b
差集
SDIFF set01 set02   返回 4 5 在第一个set中不在第二个set中
交集
SINTER set01 set02   返回 1 2 3
并集
SUNION set01 set02  返回set01 set02 中的值  去掉重复

5.redis-Zset

Zset(有序集合)

1.zadd/zrange

zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5
zrange zset01 0 -1 #只返回key
zrange zset01 0 -1 withscores #返回全部

2.zrangebyscore key start end

zrangebyscore key start end----根据开始结束来取值
zrangebyscore zset01 60 70

zrangebyscore zset01 60 (90   表示不包含90

zrangebyscore zset01  60 90  limit  1 2 从第一条开始截取2条

3.zrem key

zrem key value---- 某score下对应的value值,作用是删除元素
zrem zset01 v1  

4.zcard/zcount key score 区间/zrank key values

zcard   求zset01 总条数
zcount  zset01 60 90  求60-90个数
zrank   zset01  v2   返回1  返回对应下角标,从0开始