一 前言
知识追寻者的redis开篇第一篇,希望大家共勉;觉得文章不错,随手点赞关注谢谢;
先介绍一下redis概念:
Redis是一个开源的key-value存储系统,它属于NoSQL(Not Only SQL),不仅仅是关系型数据库;
再看看redis的优势:
- 丰富的数据类型
- 支持键过期特性
- 每条指令都是原子性操作
- 读写性能极高
初步了解一下redis的附加特性
- 可以主存与二级存储,主从复制;
- 支持数据持久化存储
linux 安装 redis 链接 : https://www.jianshu.com/p/bc84b2b71c1c
windows安装redis链接: https://www.jianshu.com/p/e16d23e358c0
docker 安装 redis 链接 https://juejin.im/post/5ca59dece51d4508b32a1292
最后生产环境中建议大家安装 redis 5.0.5 稳定版本
二 五大基础数据类型
2.1 字符串
字符串型数据存储为 key - val (键值对)形式,即每个 键都有对应唯一的值;如下图所示,age 为 key 则对应唯一的值为18;
命令介绍如下
- get : 获取存储给定键的值
- set : 设置给定存储键的值
- del : 删除给定键的值
- incr :计数,每次加1
- incrby : 计算,给定值加减
- mset : 设置多个键值
- mget : 获取多个给定键的值
- expire : 设置过期时间(适用所有类型)
- exists : 是否存在键
存储字符串示例
set key value
127.0.0.1:6379> set zszxz 666
OK
获取字符串示例
get key
127.0.0.1:6379> get zszxz
"666"
删除字符串示例
del key [key ...]
127.0.0.1:6379> del zszxz
(integer) 1
计数示例:
incr key
127.0.0.1:6379> set age 100
OK
127.0.0.1:6379> incr age
(integer) 101
127.0.0.1:6379> incr age
(integer) 102
127.0.0.1:6379> get age
"102"
127.0.0.1:6379>
incrby key increment
127.0.0.1:6379> set age 100
OK
127.0.0.1:6379> incrby age 5
(integer) 105
127.0.0.1:6379> incrby age -2
(integer) 103
127.0.0.1:6379> get age
"103"
127.0.0.1:6379>
多键值对示例
mset key value [key value ...]
mget key [key ...]
127.0.0.1:6379> mset u1 you1 u2 you2
OK
127.0.0.1:6379> mget u1 u2
1) "you1"
2) "you2"
127.0.0.1:6379>
设置过期时间
expire key seconds
127.0.0.1:6379> expire u1 1
(integer) 1
127.0.0.1:6379> get u1
(nil)
127.0.0.1:6379>
存在示例
exists key [key ...]
127.0.0.1:6379> set age 100
OK
127.0.0.1:6379> exists age
(integer) 1
127.0.0.1:6379>
2.2 列表
列表其实就是链表,一个列表有一个键,一个键对应多个值,值可以重复,取值时根据索引取值即可;
- rpush : 将值推入列表右端
- lrange : 获取列表给定范围内所有的值
- lindex : 获取列表上给定位置的单个元素
- lpop : 从列表的左端弹出一个值
值入列表示例
rpush key value [value ...]
127.0.0.1:6379> rpush list-zszxz a
(integer) 1
127.0.0.1:6379> rpush list-zszxz b
(integer) 2
127.0.0.1:6379> rpush list-zszxz c
(integer) 3
范围取值示例
lrange key start stop
127.0.0.1:6379> lrange list-zszxz 0 -1
1) "a"
2) "b"
3) "c"
给定索引取值示例
lindex key index
127.0.0.1:6379> lindex list-zszxz 1
"b"
左弹出示例
lpop key
127.0.0.1:6379> lpop list-zszxz
"a"
127.0.0.1:6379> lrange list-zszxz 0 -1
1) "b"
2) "c"
2.3 集合
集合与列表类似,不过特殊指出是集合无序,并且每个值都是唯一,不可重复;
- sadd : 将给定的值加入集合
- smembers : 返回集合所有的元素
- sismember : 检查给定的元素是否存在集合中
- srem : 若集合中存在该元素,则移除该元素
添加示例
sadd key member [member ...]
127.0.0.1:6379> sadd set-zszxz a
(integer) 1
127.0.0.1:6379> sadd set-zszxz b
(integer) 1
127.0.0.1:6379> sadd set-zszxz c
(integer) 1
返回所有元素示例
smembers key
127.0.0.1:6379> smembers set-zszxz
1) "c"
2) "b"
3) "a"
存在示例
sismember key member
127.0.0.1:6379> sismember set-zszxz c
(integer) 1
删除示例
srem key member [member ...]
127.0.0.1:6379> srem set-zszxz a
(integer) 1
127.0.0.1:6379> smembers set-zszxz
1) "c"
2) "b"
2.4 散列
散列点像java中的map,python中的字典;一个散列里面存储多个键值对;
- hset : 给定散列的键值对
- hget : 获取指定散列键的值
- hetall : 获取所有散列的键值对
- hdel : 若散列中存在该键,则移除键
设置散列键值对示例
hset key field value
127.0.0.1:6379> hset hash-key key1 a
(integer) 1
127.0.0.1:6379> hset hash-key key2 b
(integer) 1
127.0.0.1:6379> hset hash-key key3 c
(integer) 1
127.0.0.1:6379>
获取散列给定键示例
hget key field
127.0.0.1:6379> hget hash-key key1
"c"
获取散列所有键值对示例
hgetall key
127.0.0.1:6379> hgetall hash-key
1) "key1"
2) "c"
3) "key2"
4) "b"
5) "key3"
6) "c"
删除散列键示例
hdel key field [field ...]
127.0.0.1:6379> hdel hash-key key1
(integer) 1
127.0.0.1:6379> hgetall hash-key
1) "key2"
2) "b"
3) "key3"
4) "c"
127.0.0.1:6379>
2.5 有序集合
redis 有序集合与散列类似,不同之处键称为member, value称为 score ; 根据分值不同进行有序排序;
- zadd : 将带有给定分值的成员添加入有序集合
- zrange : 根据有序集合的索引获取元素
- zrangebyscore : 获取有序集合内给定分值范围内的所有元素
- zrem : 如果成员存在有序集合中,则移除
添加成员示例
zadd key score member [score member ...]
127.0.0.1:6379> zadd zset-key 600 member1
(integer) 1
127.0.0.1:6379> zadd zset-key 650 member2
(integer) 1
127.0.0.1:6379> zadd zset-key 680 member3
(integer) 1
127.0.0.1:6379>
获取指定索引范围内的成员示例
zrange key start stop [WITHSCORES]
不带score
127.0.0.1:6379> zrange zset-key 0 -1
1) "member1"
2) "member2"
3) "member3"
带上score
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member1"
2) "600"
3) "member2"
4) "650"
5) "member3"
6) "680"
获取指定分值范围内的成员示例
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
127.0.0.1:6379> zrangebyscore zset-key 600 650 withscores
1) "member1"
2) "600"
3) "member2"
4) "650"
移除成员示例
zrem key member [member ...]
127.0.0.1:6379> zrem zset-key member1
(integer) 1
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member2"
2) "650"
3) "member3"
4) "680"
127.0.0.1:6379>
简记方式:
字符串, key - value
列表与集合 ,类似链表,一个有序,一个无序,一个键存储多个值;
散列与有序集合,类似字典,map;储存多个 key-value; 有序集合的key 为member, value 为 score ,按照分值排序;