07.redis数据库之参考

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目录执行如下命令安装服务


    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 # 判断键是否存在,存在返回1,否则返回0
    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  --a、设置键值
127.0.0.1:6379>set name "zhansan"

127.0.0.1:6379>append name "lisi"   --b、追加值
127.0.0.1:6379>get name   	      --"zhansanlisi"

127.0.0.1:6379> set score 10
127.0.0.1:6379> append score 20
127.0.0.1:6379> get score      --"1020"

127.0.0.1:6379>setex key seconds value  --c、设置键值及过期时间,以秒为单位
127.0.0.1:6379>setex name  10 'xiaoming' 


127.0.0.1:6379>mset key value [key value ……]  --d、设置多个键值
127.0.0.1:6379>mset name "lili"  age 18  sex 'girl'


2.增加值和减少值(values必须是数字)
127.0.0.1:6379>incr key   --将key对应的值加1
127.0.0.1:6379>incr score

127.0.0.1:6379>decr key  --将key对应的值减1
127.0.0.1:6379>decr score

127.0.0.1:6379>incrby key intnum  --将key对应的值加整数
127.0.0.1:6379>incrby score 10


 127.0.0.1:6379>decrby key intnum  --将key对应的值减整数
 127.0.0.1:6379>decrby score  20
 
 3.获取值
 127.0.0.1:6379>get name   --根据键获取单个值,如果键不存在则返回None
 
 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、     -- linsert key before|after aa value
lset、		--lset key index value
ltrim、 		--ltrim key start end
llen、
lindex		--lindex key index



127.0.0.1:6379> lpush ll 'zhansan' 'lisi'    --在列表ll头部插入'zhansan' 'lisi',返回值列表的元素个数
127.0.0.1:6379> rpush ll 'lisi' 'wangwu'	--在列表ll尾部插入'lisi' 'wangwu',返回值列表的元素个数
127.0.0.1:6379> lrange ll 0 -1 			    --遍历列表ll
127.0.0.1:6379> lpop ll					   -- 从头部弹出列表ll的元素,返回值为弹出的元素值
127.0.0.1:6379> rpop ll					   -- 从尾部弹出列表ll的元素,返回值为弹出的元素值
127.0.0.1:6379> linsert ll before 'lisi' 'zhaoliu'	-- 在元素'lisi'之前插入'zhaoliu',返回值为元素的个数
127.0.0.1:6379> lset ll 0 'zhangsi'          -- 通过指定索引设置对应的值,成功返回0k
127.0.0.1:6379> ltrim ll 0 2				-- 裁剪列表ll, 会使原列表改变
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、           -- sadd key member [member ……]  添加
smembers、	    --smembers key   获取集合所有元素
srem 			-- srem key member  删除集合指定的元素
scard			-- scard key       获取集合的元素个数
sismember		-- sismember key member  判断元素是否在集合中,存在返回1,不存在返回0

sinter			-- sinter key [key ……]  求多个集合的交集
sdiff			-- sdiff key [key ……]   求多个集合的差集
sunion			-- sunion key [key ……]  求多个集合的并集 


127.0.0.1:6379> sadd ss 'lisi' 555			-- 向集合添加元素,返回添加成功元素个数
127.0.0.1:6379> smembers ss				    -- 获取集合中所有元素
127.0.0.1:6379> srem ss 555				    --删除集合指定的元素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			-- 交集 ss ∩ s3 = 999
127.0.0.1:6379> sdiff s1 s2   			-- 差集  ss - s3 = 'lisi' 555
127.0.0.1:6379> sunion s1 s2 			-- 并集 ss U s3 = 'lisi' '555' '999' '556'


4.Redis的有序集合类型(Zset)
概述:
a、有序集合,元素类型为Sting,元素具有唯一性,不能重复
b、每个元素都会关联一个double类型的score(表示权重),通过权重的大小排序,元素的score可以相同


zadd	-- zadd key score member [score member ……]  添加元素的指定有序集合
zcard	--zcard key  返回元素个数
zcount	--zcount key min max 返回有序集合key中,score在min和max之间的元素的个数
zscore  --zscore key member  返回有序集合key中,成员member的score值
zrange	--zrange key start end  返回指定范围的元素 、zrange key start end withscores  同时返回分数
'''
返回有序集 key 中,指定区间内的成员
其中成员的位置按 score 值递增(从小到大)来排序。
具有相同 score 值的成员按字典序(lexicographical order )来排列。
'''

zrevrange --zrevrange key start stop [WITHSCORES]
'''
返回有序集 key 中,指定区间内的成员
其中成员的位置按 score 值递减(从大到小)来排列。 
具有相同 score 值的成员按字典序的逆序(reverse lexicographical order)排列
withscores  同时返回分数
'''

zrangebyscore  --zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
'''
返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员;
有序集成员按 score 值递增(从小到大)次序排列
具有相同 score 值的成员按字典序(lexicographical order)来排列

可选的 LIMIT 参数指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count ),
注意当 offset 很大时,定位 offset 的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间
'''



zrevrangebyscore  --zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]
'''
返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员;
有序集成员按 score 值递减(从大到小)的次序排列。
具有相同 score 值的成员按字典序的逆序(reverse lexicographical order )排列
'''

zrank  -- zrank key member
'''
返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列
排名以 0 为底,也就是说, score 值最小的成员排名为 0
'''

zrevrank -- zrevrank key member
'''
返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小)排序。
排名以 0 为底,也就是说, score 值最大的成员排名为 0
'''


127.0.0.1:6379> zadd zss 1 zhangsan 4 lisi 5 wangwu   --向有序集合zss添加元素
127.0.0.1:6379> zadd zss 4 zhangsan  --更新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    -- 返回元素个数 3 
127.0.0.1:6379> zcount zss 1 4   -- 返回有序集合key中,score在min和max之间的元素的个数  # 2  左右都包含
127.0.0.1:6379> zscore zss zhangsan  -- 返回有序集合key中,成员member的score值  # 1

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的发布订阅
-- 6.Redis的发布订阅
subscribe        -- subscribe channel [channel …]订阅给定的一个或多个频道的信息 返回值 接收到的信息
publish  		-- publish channel message 将信息 message 发送到指定的频道 channel   返回值 接收到信息 message 的订阅者数量
psubscribe     --psubscribe pattern [pattern …]
'''
订阅一个或多个符合给定模式的频道。
每个模式以 * 作为匹配符,比如 it* 匹配所有以 it 开头的频道( it.news 、 it.blog 、 it.tweets 等等), 
news.* 匹配所有以 news. 开头的频道( news.it 、 news.global.today 等等)
'''

unsubscribe --- unsubscribe[channel [channel …]]
'''
指示客户端退订给定的频道
如果没有频道被指定,也即是,一个无参数的 UNSUBSCRIBE 调用被执行,
那么客户端使用 SUBSCRIBE 命令订阅的所有频道都会被退订。
在这种情况下,命令会返回一个信息,告知客户端所有被退订的频道
'''

punsubscribe  --punsubscribe [pattern [pattern …]] 指示客户端退订所有给定模式。
'''
如果没有模式被指定,也即是,一个无参数的 PUNSUBSCRIBE 调用被执行,
那么客户端使用 PSUBSCRIBE pattern [pattern …] 命令订阅的所有模式都会被退订。在这种情况下,命令会返回一个信息,
告知客户端所有被退订的模式 [pattern [pattern …]]
'''

PUBSUB   -- 拥有一组命令 http://redisdoc.com/pubsub/pubsub.html



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)




#方法1:根据数据类型的不同,调用响应的方法
#写
#r.set("p1", "good")
#读
#print(r.get("p1"))

#方法2:pipeline
#缓冲多条命令,然后依次执行,减少服务器-客户端之间的TCP数据包
pipe = r.pipeline()
pipe.set("p2", "nice")
pipe.set("p3", "handsom")
pipe.set("p4", "cool")
pipe.execute()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值