redis基础知识
redis基础
1.概述
Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,支持多种类型的数据结构,如字符串(String)、散列(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)等。它可以用作数据库、缓存和消息队列,具有丰富的功能和高效的性能。
NOSQL:not only sql 不仅仅是数据库。
非关系型数据库:主流的数据库以外,基本上都是nosql。
非关系型数据库也有库,库是系统自带的,而且也不需要创建,也不能创建,也无需在库中创建表,直接在预设的库中,以键值对(key--value)的形式保存数据。
键值之间没有任何关联,值可以是任意合法的数值。
redis:开源的,使用C语言编写的nosql数据库。
redis是基于内存运行的,只有执行持久化操作之后数据才会写入到磁盘中去(自带的,定时执行持久化)。
2.redis的工作模式
- redis是单进程模式,启动一个就是一个进程,一台服务器可以启动多个redis的进程。端口不能相同,默认端口6379。
- 在工作中,要根据情况来选择开启多少个进程。单进程的话,高并发的情况下处理速度也会降低。进程的数量太多,会影响CPU的效率。
3.Redis的特点
- 具有极高的读写速度,读取速度11万次/s,每秒钟81000/s的写操作
- 数据类型非常丰富
- 支持数据的持久化
- 原子性,redis的所有操作都是原子性,要么都成功要么都失败
- 也支持数据的备份和恢复以及集群
4.Redis的应用场景
排行榜,计数器,存储关系之类,实时日志记录,日志分析。
5.安装redis
apt -y install redis
配置:
vim /etc/redis/redis.conf
68行 bind 127.0.0.1 192.168.206.60 #也可以注释掉
systemctl restart redis
netstat -antp | grep 6379
6.Redis的基本数据类型
- String(字符串):最基础的数据结构,可以存储字符串、数字或二进制数据。
- Hash(哈希):键值对的集合,适合存储对象。
- List(列表):有序的字符串列表,支持从两端推入/弹出元素。
- Set(集合):无序的字符串集合,支持自动去重。
- Sorted Set(有序集合):每个元素关联一个分数,按分数排序。
(1)string类型
redis的基础数据类型,最大的存储数据是512MB,可以存储的数据类型,字符串,数字,图片等等。
exists :判断键值是否存在,存在返回1,不存在返回0
append key value:对已存在的键返回长度,不存在的键直接创建
strlen test1 返回值的长度
#key的值必须是整数
incr key 可以对键值的值自增1
decr key 自减1
incrby key 5 加5
decrby by 5 减5
批量设置
mset key1 1 key2 2 key3 3
批量查询
mget key1 key2 key3
(2)list列表数据类型
lpush test a b c d#倒序
rpush test3 a b c d#正向排序
#列表数据不能用get查看
lrange 键名 start stop
lrange test 0 -1#从第一个开始到最后一个
lindex test 2 #查询指定的索引
lset test 2 20 #把索引下标2的值修改成20
linsert test before a 10
linsert test3 after a 10
del test11 #删除
(3) hash数据
散列类型,用于存储对象,用对象的类别和id构成键名,用字段表示对象化的数据,对象值,就是对象的属性。
hset myhash xy101 great
#名称是myhash 对象是xy105 属性 great
hget myhash xy101#查询
hdel myhash xy105#删除myhash里面的对象和属性
del myhash #删除键
hset myhahs sun xy102 10
hincrby myhash xy102 10 #加10
#没有hdecrby
hmset sum one 1 two 2 three 3
hmget sum one two three
hgetall sun #查看所有
hkeys sun
hvals sun
(4)set 无序集合
声明一个key,键里面的值是元素,元素可以有多个,元素的类型是string。
元素的值是唯一的,不能重复。
多个集合类型之间可以进行并集,交集,集差的运算。
SADD test1 a b c c d #创建
smembers test1#查看 重复的不算
scard test1 #查看元素个数
srandmember test1 #随机的返回该集合中的元素
spop test1 #随机移除一个数
sadd test2 1 2 3 4
smove test1 test2 a#把test1里面的a移到test2
(5)sorted set/zset 有序结合
1.声明一个key,key里面有元素,元素可以有多个,元素的类型是string。
2.元素的值是唯一的,不能重复。
区别:
每一个元素都会关联一个double类型的分数,表示的是权重,元素可以通过权重的大小进行排序
zadd test3 1 one 2 two 3 three
#1 2 3 是元素对应的的权重 one two three是对应的值
zrange test3 0 -1 withscores #既显示元素也显示权重
zrange test3 0 -1 #显示元素
zrank test3 one #显示对应元素的索引下标
zcount test3 1 2 #显示权重比属于[1,2]之内
7.Redis的基本操作
(1)连接Redis服务器
redis-cli #连接到本地
config set requirepass 密码 #设置密码
redis-cli -h 192.168.206.40 -p 6379 -a 密码 #连接到指定ip的指定端口,用密码登录
redis-cli -h 192.168.206.40 -p 6379 + auth 密码
exit #退出
(2)设置键值对
set 键名 键值 #创建键值对
type 键名 #查看键值的类型
(3)查看
keys * #查看所有,生产中一般不用,数据太多会崩
get 键名 #查看键值
? 表示任意单个字符
(4)命令行
redis-benchmark #检测redis的运行效率
redis-check-aof #修复AOF的持久化
redis-check-rdb #修复RDB的持久化文件
redis-benchmark -h 192.168.206.40 -p 6379 -c 100 -n 100000 #命令行
-c 并发
-n 请求
发送100个并发的链接和100000个请求的测试性能
(5)切换库和重命名
redis的库:
一共有16个库,0-15,默认是0库
切换库:select 数字 #切换到对应的库
每个库之间是独立的
rename 原键名 新键名 #重命名
move second 2 #把second移动到2库
(6)键值对的生命周期
如果在默认条件,set的方式,都是永久存储。
set test2 3 ex 30 #设置一个键名test2,键值为3,生命周期为30秒
#EX seconds | PX milliseconds
#ex 以秒为单位计算生命周期
#px 以毫秒为单位计算生命周期
ttl test2 #查看键的生命周期
#生命周期到期之后,会自动从库中删除。
expire test1 30#对已经创建好的键值对,创立生命周期
dbsize:查看当前库有多少个键值对(数量)