Redis学习
学习目标:
- 了解noSQL和redis
- 了解redis的5种数据类型
- 了解redis的增、删、改、查操作
1.NoSQL简介
no sql是什么?
就是一种No SQL产品,和数据库完成的工作不一样,工作场合不同,只做最简单的数据存储 增、查。
no sql (Not Only SQL)翻译翻译:不仅仅是SQL ):
准确点:Not relational SQL 非关系型SQL。
2.redis简介
redis是什么?
redis是一个免费开源、高性能的NoSQL产品,提供了很多语言的开发接口。
redis使用C语言编写,是一个key-value存储系统。支持存储的value类型很多,包含string(字符串)、hash(哈希类型)、list(列表)、set(集合)、zset(sorted-set有序集合)
redis会周期性的把更新的数据写入磁盘、或者把修改操作写入追加的记录文件。
3.redis基本操作
3.1启动
启动服务端
redis-server
启动客户端
不支持中文
redis-cli
支持中文
redis-cli–raw
启动成功运行测试
ping–测试与redis服务器是否联通
3.2切换数据库基本操作
redis 16个数据库没有名称,编号为0-15,默认是0数据库,
选择数据库
select 2 选择2号数据库
3.3redis数据类型: 键值对说明
- redis里是key- value的数据结构,没有表结构。
- 每条数据都是键值对。
- 键(key)的类型是字符串(string)
- 值(value)的类型分为5种
- 字符串 string
- 哈希 hash
- 列表 list
- 无序集合 set
- 有序集合 zset
4.字符串
- string 是redis 最基本的类型。
4.1增加、修改 set
- 如果设置的键不存在则为添加,存在则为修改值。
- redis中字符串可以用单引号、或者双引号括起来,也可以不用引号,如"aaa"、‘aa’、aa。
设置键值
set 键key 值value
#例:设置 user1 值为 aaa
set "user1" "aaa"
set "user1" "BBB" 修改
设置键值过期时间,以秒为单位
setex 键 过期时间 值
setex key second 3 #(设置key3秒后过期)
设置多个键值对
mset key1 value1 key2 value2 ·····
#例:
mset user1 aaa user2 bbb
已有值后追加值
qppend key value
#例:给user1值后追加hhh
append user1 hhh
4.2查,获取值 get
获取语法:
get key
# 例
get user1
获取多个值mget
mget key1 key2····
#例:
mget user1 user2
4.3删除 del
可以删除一个或多个
del key1
del key2 key2····
5.键相关命令
5.1查找键 keys
- 查找到后返回键的名字。支持通配符
#查找user1键,
keys user1
#查找所有键
keys *
#查找包含u的键
keys *s*
5.2判断键是否存在exists
- 存在返回1,不存在返回0
exists key
#例:
exists user1
5.3查看键对应的值value类型 type
type key
type user1
5.4设置已有键过期时间 expire
expire key
expire user1 100 #设置user1键过期时间为100秒
5.5查看键的过期时间 ttl
ttl key
ttl user1
#以秒为单位
#返回大于0,代表有效时间多少秒
#返回-1,代表永久有效
#返回-2,表示键不存在
6.哈希hash
6.1hash介绍,hash是什么?
- hash是用于存储“键值对”的集合。
- 每个hash中的键可以理解为字段(field),对应一个值为value。
- hash中值类型为字符串。
- 同一个hash中字段名(field)不可以重复。
结合redis看看,如下图
6.2redis增加、修改hash类型的值 hset
#如果设置的键不存在则为添加,存在则为修改值
#设置单个值
hset key field value
#例:设置键huser1的字段name的值为TOm
hset huser1 name Tom
======================================
#设置多个字段
hset key field value field2 value2······
#例;
hset huser2 name1 tom1 sex n
6.3redis获取hash类型的值 hget
#6.3.1获取指定键所有的字段
hkeys key
#例:
hkeys huser2 #获取huser2的所有字段
=======================================
#6.3.2获取一个字段的值
hget key field
#例:
hget huser2 name #获取huser2的name字段值
=======================================
#6.3.3获取多个字段的值
hmget key field1 field2·····
#例:
hmget huser2 name sex #获取huser2多个字段的值
=======================================
#6.3.4获取所有字段的值
hvals key
例:
hvals huser2 #获取了huser2所有字段的值
=======================================
#6.3.5获取所有的字段名包括对应值
hgetall key
#例:
hgetall huser2
6.4redis删除hash类型的值 del
#6.4.1删除指定字段
hdel key field
#例:
hdel huser2 sex
======================================
#6.4.2删除整个hahs键,字段及其值
del key1 key2····
#例:
del huser2
7.列表list
7.1redis中list介绍
- 列表中值value为字符串类型。
- 列表中字符串按添加顺序排列。
图像参考:
7.2redis中增加list类型值 lpush、rpush
#7.2.1从左侧开始添加值
lpush key value1 value2 value3 ·····
#例:添加luser列表值aa、bb、cc
lpush luser aa bb cc
========================================
#7.2.2从右侧开始添加值
rpush key value1 value2 value3 ·····
#例:添加luser列表值dd
rpush luser dd
上面添加后luser内部:
7.3在list value 中插入值 linsert
#在指定值前或后插入值
linsert key before/after 值 插入的值
#例:在luser 的list value中值cc前插入值11
linsert luser before cc 11
7.3获取list value 值 lrange
- 列表中每一个值都对应一个编号索引,从0开始。
- 索引为负数,表示从列表尾部开始计数,即 -1 代表最后一个值。
#返回指定范围内的值
lrange key start stop # start stop为范围
#例:获取键luser value list中所有值
lrange luser 0 -1
7.4修改list value 中的值 lset
#修改指定索引的值
lset key 索引 值
#例:修改键luser ,list value中第一个值为eee
lset luser 0 eee
7.5删除list value 中的值 lrem
-
模板用例:
-
删除指定值
- 将列表中前count次出现的值移除。
- count > 0 :从头往尾删除。
- count < 0 :从尾开始删除。
- count = 0 :删除所有值
#删除值模板 lrem key count value # value指定值 #例1:从键luser list 右侧开始删除1个dd值 lrem luser -1 dd ===================================== #例2:删除luser list 中所有的dd值 lrem luser 0 dd ===================================== #例:从键luser list 左侧开始删除1个dd lrem luser 3 dd
8.无序集合set
8.1redis中set介绍
- 集合中不允许存在重复的值
- 无序集合中值类型为字符串。
- 集合里的值只能添加、删除,不能修改。
参考图:
8.2添加set value值 sadd
- 添加已存在值没有意义。
#集合中添加值
sadd key value1 value2 ····
#例:
sadd suser aa bb cc
#例:再添加aa,集合中值不会变
sadd suser aa
8.3获取set value值 smembers
#模板 获取键set value中所有值
smmebers key
#例:
smmebers suser
8.4删除set value值 srem
#删除指定值
srem key
9.有序集合zset
9.1redis中zset介绍
- 有序集合中值类型为字符串。
- 集合里不允许有重复的值。
- 每个值都会关联一个分数(score),通过分数从小到大排序,分数可以为负数。
- 有序集合里的值也不能修改。
参考图:
9.2添加redis中zset value值 zadd
#添加值
zadd key score1 value1 score2 value2 ·····
#例:向键zuser 的zset value中添加值aa bb cc dd,分数分别是1 3 5 2
zadd zuser 1 aa 3 bb 5 cc 2 dd
看看效果图:按分数大小排列
9.2获取redis中zset value值 zrange
- 返回指定范围内的值
- 第一个值索引为0 。
- 索引可以是负数,表示从尾开始计数,-1代表最后一个值。
- withscores :可以同时获取对应分数score。
#模板
zreange key start stop withscores #start stop 索引范围
#例:获取键zuser zset中所有值
zrange zuser 0 -1
============================
#例:获取键zuser zset 中所有值及其对应分数
zrange zuser 0 -1 withscores
9.2.1通过score获取值
- 返回分数score在 min 到max 之间的值
#模板
zrangebyscore key min max
#例:获取键zuser zset中分数在2到5之间的值
zrangebyscore zuser 2 5
9.2.2获取值的score
#获取value的score
zscore key value
#例:
zscore zuser aa
9.3删除 zrem
#删除指定值
zrem key value1 value2 ····
#例:
zrem zuser aa bb
============================================
#删除分数在指定范围之间的值
zremrangebyscore key min max
#例:删除zuser zset中分数在2,5之间的值
zremrangebyscore zuser 2 5
10.总结
redis中value类型 | 操作 |
---|---|
字符串 string | 增、改:set 查:get 、mget 删: del |
哈希hash | 增、改:hset 查:hget、hmget 删: del |
列表list | 增:lpush 、rpush 插入:linsert 改:lset 查:lrange 删: lrem |
无序集合set | 增:sadd 查:smembers 删: srem |
有序集合zset | 增:zadd 查:zrange、zrangebyscore 删: zrem |