初识Redis

 

  Redis(REmote Dictionary Server)是一款以字典结构存储数据的数据库。Redis允许其它的应用通过TCP协议读写字典中的内容,Redis数据库中的数据都是存储在内存中的,由于内存的读写速度快于硬盘,所以在性能上要优于其它的硬盘存储的数据库。Redis虽然是一个数据库但是在实际应用上面越来越多的人将其作为缓存或者队列系统来使用。Redis支持的键值数据类型包括:字符串类型、散列类型、列表类型、集合类型、有序集合类型。以下命令的执行都是基于Redis命令行客户端:
# Redis命令行客户端的启动
$ redis-cli -h 127.0.0.1(IP地址) -p 6379(redis启动的端口号)

 

# Redis默认支持16个数据库(0-15),可以通过配置修改数据库的个数,默认是自动选择0号数据库,可以通过SELECT命令来更换数据库,例如:SELECT 1(选择一号数据库)

 

注意:

     (1)数据库的名字不能自定义,开发者必须自行记录数据的位置。

 

     (2)Redis不支持不同的数据库拥有不同的密码,所以一个客户端要么全能访问,要么全不能访问。
     (3)数据库之间不是隔离的,FLUSHALL命令可以清空一个Redis实例中所有数据库的数据

 

     (4)一个空的Redis实例占用的内存只有1MB

 

 

一、字符串类型
字符串类型是Redis数据库的基本数据类型,它能存储任何形式的字符串,包括二进制的数据。
一个字符串类型键允许存储的数据的最大容量是512MB。
1.赋值和取值
172.16.12.124:13145> set key "Hello World!"
OK
172.16.12.124:13145> get key
"Hello World!"

# 当键不存在的时候返回的是空结果
172.16.12.124:13145> get haha
(nil)

2.递增数字
# 当存储的字符串是整数的形式时,INCR的作用是让当前值递增,并且返回递增以后的值。
172.16.12.124:13145> incr number
(integer) 1
172.16.12.124:13145> incr number
(integer) 2

二、散列类型
散列类型的键值也是一种字典结构,其存储类字段和字段值的映射,但是字段只能是字符串,不支持其他的数据类型,不能嵌套其它的数据类型。
一个散列类型的键可以包含至多2的32次幂减一个字段
1.赋值与取值
# HSET命令是不区别插入操作和更新操作的,当执行的是插入操作时返回1,
当执行的是更新操作时返回的是0,当键不存在时,HSET命令还会自动创建它
172.16.12.124:13145> hset person name lili
(integer) 1
172.16.12.124:13145> hset person age 18
(integer) 1
172.16.12.124:13145> hset person sex f
(integer) 1
172.16.12.124:13145> hget person name
"lili"

2.批量的赋值和取值
172.16.12.124:13145> hmget person name age sex hh
1) "lili"
2) "18"
3) "f"
4) (nil)

3.判断字段是否存在
# 字段存在返回1,不存在返回0,如果键不存在也会返回0
172.16.12.124:13145> hexists person name
(integer) 1
172.16.12.124:13145> hexists person size
(integer) 0
172.16.12.124:13145> hexists persons name
(integer) 0

4.字段不存在时赋值
# HSETNX命令和HSET命令类似,如果字段已经存在,HSETNX是不执行任何操作
172.16.12.124:13145> hsetnx person name peter
(integer) 0
172.16.12.124:13145> hsetnx person size 1.7
(integer) 1

5.增加数字
# 散列类型没有HINCR,可以通过HINCRBY key 1来实现。
172.16.12.124:13145> hincrby person score 60
(integer) 60
172.16.12.124:13145> hincrby person score 10
(integer) 70

6.删除字段
172.16.12.124:13145> hdel person score
(integer) 1
172.16.12.124:13145> hdel person score
(integer) 0

三、列表类型
列表类型(list)可以存储一个有序的字符串列表,常用的操作就是向列表两端添加元素,
或者获取列表的某个片段。列表类型的内部是使用双向链表实现的,所以获取越接近两端的元素速度越快,但是
根据索引访问元素比较慢。列表类型能容纳数量和散列类型键能容纳的字段数量相同。
1.向列表两端添加元素
# 返回值是添加元素后列表的长度
172.16.12.124:13145> lpush numbers 1
(integer) 1
172.16.12.124:13145> rpush numbers 2
(integer) 2
172.16.12.124:13145> lpush numbers -1 0
(integer) 4

2.从列表两边弹出元素
# 弹出元素是将元素直接从列表中删除
172.16.12.124:13145> lpop numbers
"0"
172.16.12.124:13145> rpop numbers
"2"
3.获取列表中元素的个数
172.16.12.124:13145> llen numbers
(integer) 2

4.获取列表片段
# LRANGE能返回索引从start到stop之间的所有元素(包括两端的元素),Redis列表的起始索引是0
# LRANGE的负索引表示从右边开始计算序数,如"-1"表示的是最右边的第一个元素
# 如果start的索引位置比stop的索引位置靠后,返回空列表
# 如果stop大于实际的索引范围,则会返回列表最右边的元素
172.16.12.124:13145> lrange numbers 0 2
1) "7"
2) "6"
3) "4"
172.16.12.124:13145> lrange numbers 0 -1
1) "7"
2) "6"
3) "4"
4) "3"
5) "2"
6) "-1"
7) "1"

5.删除列表中指定的值
LREM KEY COUNT VALUE
  # 删除列表中前COUNT个值为VALUE的元素,返回值是实际删除的元素个数
# count>0 : 从左边开始删除前COUNT个值为VALUE的元素
# count<0 : 从右边开始删除前COUNT个值为VALUE的元素
# count=0 : 删除所有值为VALUE的元素
172.16.12.124:13145> rpush numbers 2
(integer) 8
172.16.12.124:13145> lrange numbers 0 -1
1) "7"
2) "6"
3) "4"
4) "3"
5) "2"
6) "-1"
7) "1"
8) "2"
172.16.12.124:13145> lrem numbers -1 2
(integer) 1
172.16.12.124:13145> lrange numbers 0 -1
1) "7"
2) "6"
3) "4"
4) "3"
5) "2"
6) "-1"
7) "1"

四、集合
集合中的元素是唯一且无序的,列表中的元素是有序的但是不唯一。
集合类型在Redis内部是用值为空的散列表来是实现的。
1.增加和删除元素
# 当向集合中添加元素时如果元素不存在会直接添加,如果存在就会忽略这个元素
# 删除的时候如果元素不存在时是不执行任何操作的
# 增加和删除的返回值是实际操作元素的个数
172.16.12.124:13145> sadd num 1
(integer) 1
172.16.12.124:13145> sadd num 1 2 3
(integer) 2
172.16.12.124:13145> srem num 3 4
(integer) 1
172.16.12.124:13145> 

2.获取集合中的所有元素
172.16.12.124:13145> smembers num
1) "1"
2) "2"

3.判断元素是否在集合中
# 存在返回1,不存在返回0
172.16.12.124:13145> sismember num 1
(integer) 1
172.16.12.124:13145> sismember num 6
(integer) 0
172.16.12.124:13145>
 
4.集合间的运算(交集,并集,差集)
(1)差集运算(SDIFF)
172.16.12.124:13145> sadd num1 1 2 3
(integer) 3
172.16.12.124:13145> sadd num2 2 3 43
integer) 3
172.16.12.124:13145> sdiff num1 num2
1) "1"
172.16.12.124:13145> sdiff num2 num1
1) "43"
172.16.12.124:13145> sadd num3  2 3
(integer) 2
172.16.12.124:13145> sdiff num1 num2 num3
1) "1"

(2)交集运算(SINTER)
172.16.12.124:13145> sinter num1 num2
1) "2"
2) "3"
172.16.12.124:13145> sinter num1 num2 num3
1) "2"
2) "3"

(3)并集运算(SUNION)
172.16.12.124:13145> sunion num1 num2
1) "1"
2) "2"
3) "3"
4) "43"
172.16.12.124:13145> sunion num1 num2 num3
1) "1"
2) "2"
3) "3"
4) "43"

五、有序集合
在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数
集合中的每个元素都是不同的,但是它们的分数却可以相同。
有序集合和列表之间的区别:(1)列表是通过链表实现的,获取两端的数据速度较快,
当元素较多时访问中间的元素就会变慢。有序集合是使用散列表和跳跃表来实现的,
所以即使读取位于中间部分的数据速度也很快;(2)列表不能调整某个元素的位置,
但是有序集合却可以通过改变分数来改变位置;(3)有序集合要比列表类型更耗内存
,有序集合是Redis的5种数据类型中最高级的类型了。
1.增加元素
# ZADD的返回值是新加入到集合中的元素个数(不包含以前已经存在的)
# 如果集合中已经存在则会将分数替换
172.16.12.124:13145> zadd student 99 li 80 zhao 56 qian 67 sun
(integer) 4
172.16.12.124:13145> zadd student 77 sun
(integer) 0
172.16.12.124:13145> 
2.获取某个元素的分数
172.16.12.124:13145> zscore student sun
"77"

3.获取排名在某个范围内的元素列表
# ZRANGE和LRANGE的用法大致是一样的
# ZRANGE命令的尾部加上WITHSCORES参数,这时候返回的数据是带有分数的
# 如果两个元素的分数相同,Redis会按照字典顺序来进行排序
172.16.12.124:13145> zrange student 0 2
1) "qian"
2) "sun"
3) "zhao"
172.16.12.124:13145> zrange student 0 2 withscores
1) "qian"
2) "56"
3) "sun"
4) "77"
5) "zhao"

4.获取指定分数范围内的元素
# "("表示不包含,ZRANGEBYSCORE默认是包含的
# -inf和+inf分别表示正无穷和负无穷
# 第三个例子的含义:获取高于60分的从第二个开始的3个人
172.16.12.124:13145> zrangebyscore student 80 100
1) "zhao"
2) "li"
172.16.12.124:13145> zrangebyscore student 80 9(9
(error) ERR min or max is not a float
172.16.12.124:13145> zrangebyscore student 80 (99
1) "zhao"
172.16.12.124:13145> zrangebyscore student 80 +inf
1) "zhao"
2) "li"
172.16.12.124:13145> zrangebyscore student 60 +inf limit 1 3
1) "zhao"
2) "li"

5.增加某个元素的分数
# 元素不存在会创建,默认的分数是0
172.16.12.124:13145> zincrby student 4 sun
"81"
172.16.12.124:13145> zincrby student -44 sun
"37"
172.16.12.124:13145> zincrby student -44 he
"-44"


注意:

 

(1)Redis中的每个键都属于一个明确的数据类型,使用一种数据类型的命令操作另一种数据类型的键会提示错误

 

                                                                  本篇博客参考了李子骅所著的Redis入门指南

                                                                  各位博友发现文章中的问题欢迎批评指正!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值