数据库学习04_Redis操作

一、Redis系统介绍

1.REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。 是一个基于内存的数据库,以字典的键值对形式,键值对,根据键立马就可以得到值。计算机里面,有内存,有硬盘文件都在硬盘中存放,代码在运行的时候,有一个变量a。
内存:读写快,但是断电消失,容量不大
硬盘:读写慢,但是可以持久化保存,存储容量大,随便存。固态硬盘速度比机械硬盘速度快。

redis官网:redis.io redis.cn

2.特点:

存储方式效率高,完全在内存中运行(内存读写纳秒级,比硬盘快很多)

单线程+异步I/O

3.运行场景:

用来做缓存:缓存热点数据、页面缓存、缓存查询结果

二、Redis安装和运行

可视化工具redis-desktop-manage

1.安装

(1)Widows安装:

注意:win中redis窗口不能关闭,不能后台运行

(1)windows
		Redis官方是不支持windows的,只是 Microsoft Open Tech group 在 GitHub上开发了一个Win64的版本,项目地址是:
		https://github.com/MicrosoftArchive/redis/releases
		下载msi安装包,安装过程需要将添加环境变量、过滤防火墙选中,内存使用默认100M即可
		配置文件  
			C:\Program Files\Redis\redis.windows.conf
		安装好之后通过   
			cd C:\Program Files\Redis
			redis-server.exe redis.windows.conf   启动redis
		新开一个cmd下输入  redis-cli   测试是否联通redis服务器,进入redis

(2)Ubuntu安装

(1)解压redis安装包
			tar -zxvf redis-3.2.8.tar.gz
		(2)进来安装文件夹
			cd redis-3.2.8/
		(3)编译
			make
		(4)查看/usr/local/bin有没有 redis-server  redis-cli
			cd src
			sudo cp redis-server /usr/local/bin
			sudo cp redis-cli /usr/local/bin
		(5)将配置文件复制到 /etc/redis 里面
			sudo mkdir /etc/redis
			sudo cp ~/redis-3.2.8/redis.conf /etc/redis
		(6)修改配置文件
			sudo vi redis.conf
				daemonize yes
		(7)启动redis服务
			redis-server /etc/redis/redis.conf
			查看有没有启动成功
			ps -ef | grep redis
		(8)客户端连接测试
			redis-cli
				输入ping,服务端回你pong

(3).CentOS版

(1)安装redis
			tar -zxvf redis-3.2.8.tar.gz
			cp -r ./redis-3.2.8 /usr/local/redis
			cd /usr/local/redis
			make install
				如果有错,输入这个指令make MALLOC=libc
			cd src
			./redis-server     //redis端口号默认为6379
	(2)、设置开机启动
			cd /usr/local/redis
			cp redis.conf redis_6379.conf
			vim redis_6379.conf                 
				第128行    daemonize yes    #开启守护进程,可以后台运行 
			cd utils/
			cp redis_init_script redis_init_script_6379
			vim redis_init_script_6379             进入vi编辑对应的行内容
				EXEC=/usr/local/redis/src/redis-server
				CLIEXEC=/usr/local/redis/src/redis-cli
				CONF="/usr/local/redis/redis_6379.conf"
			启动   ./redis_init_script_6379 start
			查看是否启动   ps -ef | grep redis
			添加到开机启动中
				vim /etc/rc.local
					添加一行
					/usr/local/redis/utils/redis_init_script_6379 start

2.安装后运行redis常用操作

(1)启动后进入redis,运行redis-cli -h ip

[root@izwz9ao2nl8wvm ~]# redis-cli
172.18.182.114:6379> auth 123456      #有密码就输入密码登录    
OK

(2)查看安装好的版本

[root@izwz9ao2nlgaymeyr0z ~]# redis-server --version
Redis server v=4.0.10 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=8d13bdae3847a65b

(3)查看redis是否在运行

[root@izwz9ao2nl8wvmgaymeyr0z ~]# ps -ef | grep redis

3.配置密码等操作(备用)

(配置的时候我们一般选择复制一个文件,防止源文件丢失)—cp 要在根文件夹复制

命名为redis.conf

[root@i9ao2nl8wvmgaymeyr0z ~]# cp redis-4.0.10/redis.conf ./

编辑redis.conf====vim

[root@z9ao2nl8wvmgaymeyr0z ~]# vim redis.conf

进入编辑界面

(1)从末行模式esc---->(shift+:),进入ip界面,

!ifconfig

查询到内网地址

[No write since last change]
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.182.114  netmask 255.255.240.0  broadcast 172.18.191.255
        ether 00:16:3e:06:ba:2e  txqueuelen 1000  (Ethernet)
        RX packets 850345  bytes 916200262 (873.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 438762  bytes 72082464 (68.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enter返回到vim编辑状态

【补充】========【搜索功能】

命令模式下输入=====/+内容

(2)69行:改成内网ip

69 bind 172.18.182.114

(3)500行注释解除,可以重设定一个密码123456

 #requirepass foobared --->requirepass123456

**【理解】**218行save===持久化方案

 218 save 900 1       代表
 219 save 300 10
 220 save 60 10000         60秒内有10000个键值对发生变化会自动保存

(4)持久化补充方案修改

672 appendonly no------》改为appendonly yes
 702 appendfsync everysec

3.启动redis(若没有启动)=====后面&代表放在前台运行

root@izwz9ao2nl8wvmgaymeyr0z ~]# redis-server redis.conf &

查看运行环状态

4.启动Redis客户端===redis-cli

[root@izwz9ao2nl8wvmgaymeyr0z ~]# redis-cli -h 172.18.182.114 -p 6379(代表端口号)

输入auth+口令密码,反馈OK

输入ping反馈pong代表连接成功

172.18.182.114:6379> auth 123456
OK
172.18.182.114:6379> ping
PONG

三、Redis数据类型及常用命令

redis共有5中数据类型分别是: 字符串、队列、集合、哈希、有序集合

1.字符串命令

	set key  value  创建单个键值对
	get key   			获取键对应的值
	mset
		mset key1 value1 key2 value2 key3 value3
		同时设置多个键值对
	mget
		一次获取多个键的值
	getrange key start end
		字符串提取,字符串从0开始,包含start和end
	getset key value
		设置key的值,返回的是旧值,新值会设置成功
	setex key seconds value
		设置key的值,过期时间为seconds,如果存在,替换之,时间以s为单位
	setnx key value
		该key不存在的时候才设置,存在不设置
	setrange key offset value
		将该key对应的值从offset开始替换为value
	strlen key
		得到该key对应的值的长度
	msetnx
		同时设置多个键值对,将键不存在的时候才设置
	psetex key time value
		设置键值对,时间以ms为单位
	incr key
		为key对应的值增加1
		如果key不存在,那么先创建这个key,值为0,然后设置为1
		如果key对应的是字符串,那么报错
	incrby key number
		在指定的key对应的值加incre_amount
	decr key
		减一
	decrby key number
		减去指定的数量
	append key value
		在指定的key对应的值后面追加value

(2)哈希:适合保存对象

	hset key field value
		给对应的key设置属性和属性值
	hsetnx key field value
		该key中不存在的field才设置为value
	hget key field
		获取指定key的field属性
	hdel key field1 field2
		删除对应key中指定的属性
	hexists key field
		对应的key中是否存在这个属性,存在返回1,不存在返回0
	hgetall key
		获取这个key对应的所有的属性和值
	hincrby key field number
		给这个key对应的属性值加减number
	hincrbyfloat key field number
		给这个key对应的属性值加减number,number为float值
	hkeys key
		对应的key中所有的属性名
	hvals key
		对应的key中所有的值
	hlen key
		对应的key有多少个属性
	hmset key field1 value1 field2 value2 ...
		同时为key设置多个属性和属性值
	hmget key field1 field2 ...
		同时获取key的多个属性的值

(3)列表(队列)

  lpush key value1 value2
		依次将value1和value2从左边插入到队列key中
	lrange key start stop     #注意没有lget,列表需要拿的是范围
		依次的显示队列key中从start开始到stop结束的所有元素
		start 0。。。。   stop -1代表最后一个
	lpushx key value
		当队列key存在的时候才往队列头部插入数据,如果队列不存在,插入失败
	lpop key
		从 list 的头部删除元素,并返回删除元素。弹出队列key中最左边的元素,
	rpush key value1 value2
		将value从右边插入到队列key中
	rpushx key value
		将value从右边插入到队列key中,但是前提是队列key必须存在
	rpop key
		将队列key中最右边的元素弹出,从list 的尾部删除元素,并返回删除元素
	rpoplpush src dst
		将队列src中最右边的元素插入到队列dst中的最左边
	ltrim key start stop
		将队列中start-stop区间之外的所有元素全部干掉
		闭区间
	lset key index value
		将队列key中的第index个元素设置为value
		下标从0开始
	llen key
		得到队列key中元素的个数
	lindex key index
		获取队列key中第index个元素
	lrem key count value
		count > 0   从最左边开始,干掉count个和value相等的元素
		count < 0   从最右边开始,干掉-count个和value相等的元素
		count = 0   干掉队列key中所有和value相等的元素
	linsert key before|after value newvalue
		在队列key中的value的前面或者后面插入newvalue

lpush

172.18.182.114:6379> lpush list1 100 200 300 400
(integer) 4

lrange

72.18.182.114:6379> lrange list1 0 3     #拿出来的顺序是按照push进去的顺序,没有lget操作
1) "400"
2) "300"
3) "200"
4) "100"

左删除lpop

172.18.182.114:6379> lpop list1
"400"

右删除rpop

172.18.182.114:6379> rpop list1
"100"

(4)集合

集合具有无序性、唯一性

	sadd key value1 value2 value3
		往集合key中插入多个值
	scard key
		得到集合中元素的个数(注意不是用length)
	smembers key
		查看集合key中所有的元素
	sdiff key1 key2 key3
		保留key1中key2和key3没有的元素
		key1不变,结果返回给你
	sdiffstore dst key1 key2 key3
		将这个(sdiff key1 key2 key3)的结果保留到集合dst中
	sinter key1 key2
		取出key1和key2的交集
	sinterstore dst key1 key2
		将sinter key1 key2的结果保存到集合dst中
	sismember key value
		判断value在不在集合key中,在的话返回1,不在的话返回0(查看是否是成员,1为真,0为false)
	smove src dst value
		将集合src中的value元素移动到集合dst中
	spop key
		从集合key中随机弹出一个元素
	srandmember key count
		count > 0 count < 集合元素个数:  返回你一个数组,而且数组元素唯一
		count > 集合元素个数:返回你该集合中所有的元素
		count < 0:返回给你-count个元素,但是不保证唯一
	srem key value1 value2 ...
		移除集合key中的value1和value2元素
	sunion key1 key2
		得到集合key1和集合key2的并集
	sunionstore dst key1 key2
		将集合key1和集合key2的并集保存到dst中
	sinter set1 set2   交集
	sunion set1 set2   并集
	sdiff set1 set2  差集

(5)有序集合

zadd key score member
		将分值为score的成员member加入到有序集合key中
	zcard key
		得到集合key中元素的个数
	zcount key start stop
		得到集合key中分值在start到stop之间的元素的个数
		闭区间  [start stop]  这个写分值
	zincrby key number member
		给集合key中指定的member元素的分值加上number

	zrange key start stop [withscores]
		显示集合中的元素  start和stop是下标  0 -1
		显示成员的时候可以显示分值
	zrangebyscore key min max
		按照区间去查找对应的元素   min和max   是分值  
		【注】前面的只能写数字,肯定是大于等于,后面的可以写开区间,不写默认就是闭区间
		0 (100   0<=  <100
		0 100    0<=  <=100
		默认升序排列好
	zrank key member
		从低到高排列,下标从0开始
		查找member在有序集合key中的排名  显示的是下标
	zrem key member1 member2
		移除有序集合中指定的元素

	zrevrange key start stop withscores
		查询从start到stop之间所有的元素,但是是从大到小排列
	zrevrank key member
		用法和zrank一样,但是是从大大小排列的顺序
		【注】得到的是下标
	zrevrangebyscore key max min
		根据成绩从高到低排序,得到指定分值区间的成员
		ZREVRANGEBYSCORE salary +inf -inf   # 逆序排列所有成员
	zscore key member
		返回指定成员的分数

6.键命令

0-15:redis默认有16个数据库,默认是在第0个数据库中操作
	select num:切换数据库
	keys *:所有键
	del key:删除键
	EXPIRE key seconds:给指定的key添加过期时间,单位是s
	ttl key:以秒为单位,返回这个键剩余的时间秒数
	exists key:判断一个键是否存在
	flushdb: 删除当前数据库中所有的键
	flushall:删除所有数据库中的所有键
	rename key newkey #修改key的名称(如果新的key的名字存在 则会把存在的key的值 覆盖掉)
	randomkey  #随机返回一个 key
	move key db  将指定键移动到指定库
	

四、其它常用命令

指令参考手册;redisdoc.com

1.创建===set

创建一个邮箱

172.18.182.114:6379> set email zhang@123.com
OK

2.获取===get

返回 key 所关联的字符串值。

如果 key 不存在那么返回特殊值 nil

假如 key 储存的值不是字符串类型,返回一个错误,因为 GET 只能用于处理字符串值

172.18.182.114:6379> get email
"zhang@123.com"
redis> GET db
(nil)

redis> SET db redis
OK
redis> GET db
"redis"

3.创建电话号码===set tel

172.18.182.114:6379> set tel 123455

4.设置密码

 临时设置密码
        获取密码
            config get requirepass
        设置密码
            config set requirepass 123456
        当有密码的时候认证
            auth 密码
        取消密码
            config set requirepass ''
    永久设置密码
        到配置文件中设置
        requirepass 密码
    

4.设置间隔时间

172.18.182.114:6379> set tel 123455334 ex 30

5.TTL key

以秒为单位,返回给定 key 的剩余生存时间

172.18.182.114:6379> set tel 123455334 ex 30
OK
172.18.182.114:6379> get tel
"123455334"
172.18.182.114:6379> ttl tel
(integer) 15

显示(integer) -1代表永不过期

判断是否发送过exist

del===删除一行或多组

save==强行保存

bgsave==后台保存

flushdb==清空所有键值对

select 5 切换到第五数据库(默认开启15个数据库,超过16会越界)

172.18.182.114:6379> select 5
OK
172.18.182.114:6379[5]> 
172.18.182.114:6379[5]> select 20
(error) ERR DB index is out of range

删除所有数据库的内容===flushall

172.18.182.114:6379[5]> flushall
OK

五、Redis持久化机制rdb

持久化:在内存中的数据不能保存,如果想要保存需要保存到硬盘中。

redis的数据就是在内存中的,如果将redis关掉,再去打开,数据在不在?

redis有持久化机制,就是rdb机制


    stop-writes-on-bgsave-error yes  后台写入的时候,停止文件写入
    rdbcompression yes               写文件的时候有压缩格式
    rdbchecksum yes                  对rdb文件校验
    dbfilename dump.rdb              保存的rdb文件的文件名
    dir ./                           保存的文件的路径

    可以手动保存   redis-cli bgsave  
    复制过来,替换这个文件,下次启动的时候就是使用的新的rdb文件

六、Python操作Redis

1.redis的操作命令及时代码也是函数

pycharm安装三方库
===pip install redis(全小写)
导入redis
	import redis

2.连接

import redis

# 连接redis数据库
'''
host : 主机
port : 端口号
db : 数据库
password : 密码
'''
r = redis.StrictRedis(host='localhost', port=6379)

# 使用r来进行操作你的redis服务器
# r.set('name', 'maodan')
# value = r.get('name')
# print(value)

# ret = r.hmset('ming', {'name': 'goudan', 'age': 30, 'height': 180})
# print(ret)

# ret = r.lpush('nba', '科比', '杜兰特', '乔丹', '詹姆斯')
# print(ret)
# value = r.lpop('nba')

# print(value.decode('utf8'))

# ret = r.sadd('star', '郭德纲', '姜昆', '冯巩', '牛群', '郭德纲', '冯巩')

# ret = r.zadd('class', 100, '小名', 90, '小红', 101, '小孙', 0, '小芳', -250, '小刘')
# print(ret)
# ret = r.zrevrange('class', 0, -1, True)
# 返回的是一个列表,列表里面都是元组,元组第一个元素是成员,第二个元素是分值
# print(ret)

# ret = r.keys('*')
# print(ret)

# print(r.exists('girl'))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清平乐的技术博客

你的鼓励是我最大创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值