Redis 是一个高性能的 key-value 数据格式的内存缓存,NoSQL 数据库。NOSQL:not only sql,泛指非关系型数据库.关系型数据库:
序号 | 关系数据库(mysql, oracle, sql server, sqlite) | 非关系数据库(Redis) |
---|---|---|
1 | 数据存放在表中,表之间有关系。 | 没有数据表的概念,不同的nosql数据库存放数据位置不同。 |
2 | 通用的SQL操作语言。 | nosql数据库没有通用的操作语言。 |
3 | 大部分支持事务。 | 基本不支持事务. redis支持简单事务 |
(一)性能
Redis 中缓存热点数据,能够保护数据库,提高查询效率,如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的 SQL,就特别适合将运行结果放入缓存.这样,后面的请求就去缓存中读取,使得请求能够迅速响应。
(二)并发
还是如上图所示,在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常.这个时候,就需要使用 redis 做一个缓冲操作,让请求先访问到 redis,而不是直接访问数据库
常见的数据结构: 字符串string, 哈希hash, 列表list,集合set, 有序集合zset
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B0CXIgpK-1643415617371)(temp/picture/p1_67.png)]
注意:
参考:
字符串类型在 Redis 中是二进制安全的,Redis中字符串类型的Value最大长度512M
增
设置的键不存在则为添加,如果设置的键已经存在则修改
# 设置键 set name lp # set key value # 设置键的过期时间 setex name 3 lp # setex key seconds value # 设置多个键值 mset a1 python a2 java a3 c # mset key1 value1 key2 value2 # 追加值 append a1 haha # append key value
查
# 获取键name的值 get name #get key # 根据多个键获取多个值 mget a1 a2 a3 # mget key1 key2 ...
删除指定键的相关命令
查
#查看所有键 keys * #keys pattern 查找键,参数⽀持正则表达式 #查看名称中包含a的键 keys a* #判断键是否存在 exists a1 #exists key1 #查看键对应的value的类型 type a1 #type key #查看有效时间 ttl bb #ttl key #设置过期时间 expire a1 3 #expire key seconds
删
# 删除键及对应的值 del a2 a3 # del key1 key2
增删改查相关命令
增
# 设置单个属性 hset user name lp # hset key field value # 设置多个属性 hmset user name lp age 18 #hmset key field1 value1 field2 value2 ...
删
#删除整个hash键及值 del user # del key #删除属性 hdel u2 age #hdel key field1 field2
查
# 获取指定键所有的属性 hkeys u2 #hkeys key # 获取⼀个属性的值 hget u2 name #hget key field #获取多个属性的值 hmget u2 name age #hmget key field1 field2 ... #获取所有属性的值 hvals u2 # hvals key
增
#在左侧插⼊数据 lpush a1 a b c # lpush key value1 value2 ... #在右侧插⼊数据 rpush a1 0 1 # rpush key value1 value2 ... #在指定元素的前或后插⼊新元素 linsert a1 before b 3 #linsert key before或after 现有元素 新元素
删
#删除指定元素:lrem key count value lrem a2 -2 b # 从a2列表右侧开始删除2个b lrange a2 0 -1 # 查看列表a2的所有元素
- 将列表中前
count
次出现的值为value
的元素移除- count > 0: 从头往尾移除
- count < 0: 从尾往头移除
- count = 0: 移除所有
改
# 设置指定索引位置的元素值 :lset key index value lset a 1 z #修改键为a1的列表中下标为1的元素值为z
查
#返回列表⾥指定范围内的元素:lrange key start stop lrange a1 0 -1 #获取键为a1的列表所有元素
start
、stop
为元素的下标索引- 索引从左侧开始,第⼀个元素为0
- 索引可以是负数,表示从尾部开始计数,如
-1
表示最后⼀个元素
增
#添加元素:sadd key member1 member2 sadd a3 zhangsan sili wangwu #向键a3的集合中添加元素zhangsan、lisi、wangwu
删
#删除指定元素 srem key srem a3 wangwu #删除键a3的集合中元素wangwu
查
#获取所有的元素 smembers a3 #获取键a3的集合中所有元素
- 每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序
- 没有修改操作
增
# 增加:zadd key score1 member1 score2 member2 # 向键a4的集合中添加元素lisi、wangwu、zhaoliu、zhangsan,权重分别为4、5、6、3 zadd a4 4 lisi 5 wangwu 6 zhaoliu 3 zhangsan
删
# 删除指定元素:zrem key member1 member2 ... zrem a4 zhangsan #删除集合a4中元素zhangsan # 删除权重在指定范围的元素 zremrangebyscore key min max zremrangebyscore a4 5 6 # 删除集合a4中权限在5、6之间的元素