redis数据库
一、redis数据库简介
二、redis数据库安装与配置
1.linux平台:
sudo apt install redis-server
netstat -ant |grep 6379 -- 查看是否启动
sudo vi /etc/redis/redis.conf -- 配置文件所在目录
2.windows平台:
下载地址:
https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100
如果下载: Redis-x64-3.2.100.msi 则安装时会自动安装到系统服务,自动开机启动,端口6379
如果下载: Redis-x64-3.2.100.zip 需手动启动服务
解压Redis-x64-3.2.100.zip,进入Redis-x64-3.2.100目录:
> redis-server redis.windows.conf --以redis.windows.conf启动redis, 进程的形式
>sc delete Redis
>redis-server --service-install redis.windows.conf
redis.windows.conf相关配置:
bind 127.0.0.1 -- 默认绑定127.0.0.1, 要想其他人访问可设置为bind 0.0.0.0
port 6379 -- 默认端口6379
databases 16 -- 默认数据库个数 16
maxmemory <bytes> -- 最大内存,未设置
requirepass -- 是否需要密码
3.使用redis自带客户端操作:
> redis-cli
简单命令
127.0.0.1:6379>ping
通用命令:
127.0.0.1:6379>select 1
127.0.0.1:6379>keys *
127.0.0.1:6379>exists phone
127.0.0.1:6379>del phone
127.0.0.1:6379> flushdb
127.0.0.1:6379>type phone
127.0.0.1:6379>expire key seconds
127.0.0.1:6379>ttl key
三、redis数据库之数据类型及其操作
1.Redis的字符串数据类型(String)
概述:String是redis最基本的类型,最大能存储512MB的数据,String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对象等
set、
append、
get、
setex、
mset
incr
decr
incrby
decrby
1.设置和追加
127.0.0.1:6379>set key value
127.0.0.1:6379>set name "zhansan"
127.0.0.1:6379>append name "lisi"
127.0.0.1:6379>get name
127.0.0.1:6379> set score 10
127.0.0.1:6379> append score 20
127.0.0.1:6379> get score
127.0.0.1:6379>setex key seconds value
127.0.0.1:6379>setex name 10 'xiaoming'
127.0.0.1:6379>mset key value [key value ……]
127.0.0.1:6379>mset name "lili" age 18 sex 'girl'
2.增加值和减少值(values必须是数字)
127.0.0.1:6379>incr key
127.0.0.1:6379>incr score
127.0.0.1:6379>decr key
127.0.0.1:6379>decr score
127.0.0.1:6379>incrby key intnum
127.0.0.1:6379>incrby score 10
127.0.0.1:6379>decrby key intnum
127.0.0.1:6379>decrby score 20
3.获取值
127.0.0.1:6379>get name
127.0.0.1:6379>mget name age
2.Redis的列表类型(List)
redis中的lists在底层实现上并不是数组,而是链表,也就是说对于一个具有上百万个元素的lists来说,在头部和尾部插入一个新元素,其时间复杂度是常数级别的,比如用LPUSH在10个元素的lists头部插入新元素,和在上千万元素的lists头部插入新元素的速度应该是相同的。
虽然lists有这样的优势,但同样有其弊端,那就是,链表型lists的元素定位会比较慢,而数组型lists的元素定位就会快得多
lists的常用操作包括
lpush、
rpush、
lrange、
rpop、
lpop、
linsert、
lset、
ltrim、
llen、
lindex
127.0.0.1:6379> lpush ll 'zhansan' 'lisi'
127.0.0.1:6379> rpush ll 'lisi' 'wangwu'
127.0.0.1:6379> lrange ll 0 -1
127.0.0.1:6379> lpop ll
127.0.0.1:6379> rpop ll
127.0.0.1:6379> linsert ll before 'lisi' 'zhaoliu'
127.0.0.1:6379> lset ll 0 'zhangsi'
127.0.0.1:6379> ltrim ll 0 2
127.0.0.1:6379> llen ll
127.0.0.1:6379> lindex ll 2
127.0.0.1:6379> del ll
3.Redis的集合类型(Set)
redis的集合,是一种无序的集合,集合中的元素没有先后顺序
sadd、
smembers、
srem
scard
sismember
sinter
sdiff
sunion
127.0.0.1:6379> sadd ss 'lisi' 555
127.0.0.1:6379> smembers ss
127.0.0.1:6379> srem ss 555
127.0.0.1:6379> scard ss
127.0.0.1:6379> sismember ss lisi
127.0.0.1:6379> sadd s1 'lisi' 555 999
127.0.0.1:6379> sadd s2 999 556
127.0.0.1:6379> sinter s1 s2
127.0.0.1:6379> sdiff s1 s2
127.0.0.1:6379> sunion s1 s2
4.Redis的有序集合类型(Zset)
概述:
a、有序集合,元素类型为Sting,元素具有唯一性,不能重复
b、每个元素都会关联一个double类型的score(表示权重),通过权重的大小排序,元素的score可以相同
zadd
zcard
zcount
zscore
zrange
'''
返回有序集 key 中,指定区间内的成员
其中成员的位置按 score 值递增(从小到大)来排序。
具有相同 score 值的成员按字典序(lexicographical order )来排列。
'''
zrevrange
'''
返回有序集 key 中,指定区间内的成员
其中成员的位置按 score 值递减(从大到小)来排列。
具有相同 score 值的成员按字典序的逆序(reverse lexicographical order)排列
withscores 同时返回分数
'''
zrangebyscore
'''
返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员;
有序集成员按 score 值递增(从小到大)次序排列
具有相同 score 值的成员按字典序(lexicographical order)来排列
可选的 LIMIT 参数指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count ),
注意当 offset 很大时,定位 offset 的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间
'''
zrevrangebyscore
'''
返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员;
有序集成员按 score 值递减(从大到小)的次序排列。
具有相同 score 值的成员按字典序的逆序(reverse lexicographical order )排列
'''
zrank
'''
返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列
排名以 0 为底,也就是说, score 值最小的成员排名为 0
'''
zrevrank
'''
返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小)排序。
排名以 0 为底,也就是说, score 值最大的成员排名为 0
'''
127.0.0.1:6379> zadd zss 1 zhangsan 4 lisi 5 wangwu
127.0.0.1:6379> zadd zss 4 zhangsan
127.0.0.1:6379> zrange zss 0 -1
127.0.0.1:6379> zrange zss 0 -1 withscores
127.0.0.1:6379> zcard zss
127.0.0.1:6379> zcount zss 1 4
127.0.0.1:6379> zscore zss zhangsan
127.0.0.1:6379> zrevrange zss 0 -1
'''
1) "wangwu"
2) "lisi"
3) "zhangsan"
'''
127.0.0.1:6379> zrevrange zss 0 -1 withscores
5.Redis的哈希类型(Hash)
6.Redis的发布订阅
subscribe
publish
psubscribe
'''
订阅一个或多个符合给定模式的频道。
每个模式以 * 作为匹配符,比如 it* 匹配所有以 it 开头的频道( it.news 、 it.blog 、 it.tweets 等等),
news.* 匹配所有以 news. 开头的频道( news.it 、 news.global.today 等等)
'''
unsubscribe
'''
指示客户端退订给定的频道
如果没有频道被指定,也即是,一个无参数的 UNSUBSCRIBE 调用被执行,
那么客户端使用 SUBSCRIBE 命令订阅的所有频道都会被退订。
在这种情况下,命令会返回一个信息,告知客户端所有被退订的频道
'''
punsubscribe
'''
如果没有模式被指定,也即是,一个无参数的 PUNSUBSCRIBE 调用被执行,
那么客户端使用 PSUBSCRIBE pattern [pattern …] 命令订阅的所有模式都会被退订。在这种情况下,命令会返回一个信息,
告知客户端所有被退订的模式 [pattern [pattern …]]
'''
PUBSUB
127.0.0.1:6379> subscribe msg chat_room
127.0.0.1:6379> publish msg 'zhangsan'
127.0.0.1:6379> psubscribe news.* tweet.*
127.0.0.1:6379> unsubscribe msg chat_room
127.0.0.1:6379> punsubscribe news.* tweet.*
四、python操作redis
import redis
r = redis.Redis(host="localhost", port=6379)
pipe = r.pipeline()
pipe.set("p2", "nice")
pipe.set("p3", "handsom")
pipe.set("p4", "cool")
pipe.execute()