一、Redis概述
1、Redis是一个开源的,使用ANSI C 编写,高性能的Key-Value的NoSQL数据库。
2、 Redis特点
(1)基于内存
(2)可持久化数据
(3)具有丰富的数据结构类型,适应非关系型数据的存储需求
(4)支持绝大多数主流开发语言,如C、C++、Java、Python、R、JavaScript等。
(5)支持集群模式,高效、稳定。
3、Redis数据模型
(1)键值对形式。
(2)Redis的数据结构类型,指的就是Redis值的结构类型。
4、Redis作用
(1)本质是数据库,能存储数据。
Redis能灵活处理非关系型数据的读、写问题,是对MySQL等关系型数据库的 补充。
(2)缓存数据。
所谓缓存,就是将数据加载到内存中后直接使用,而不是每次都通过IO流从磁 盘上读取。好处:读写效率高。
而Redis则是将数据直接存储在内存中,只有当内存空间不足时,将部分数据持久化到磁盘上。
二、Redis安装
1、下载,上传到Linux服务器,并解压
2、预编译(实际上是检查编译环境的过程)
进入目录: cd /opt/soft/redis-3.2.9/deps/jemalloc
执行预编译 ./configure
在预编译的过程中,会检测安装redis所需的相关依赖,依次安装即可。
(a)缺少c编译环境 yum -y install gcc-c++
预编译不是必须的步骤,它只是在检查编译过程中需要的环境是否满足。
通常源码包中,都有一个可执行的configure脚本,这个脚本执行预编译的脚本。但是有一些源码包中,没有该文件,可以省略预编译步骤。
3、编译 进入/opt/soft/redis-3.2.9/src
Make
4、安装 进入/opt/soft/redis-3.2.9/src
Make install
5、启动redis服务端(指定配置文件)
拷贝redis.conf文件到/etc 目录下,方便管理。
cp /opt/soft/redis-3.2.9/redis.conf /etc/
/usr/local/bin/redis-server /etc/redis.conf
6、启动redis客户端,登陆 /usr/local/bin/redis-cli
7、安装成功
三、Redis数据结构类型
(一)Redis的键key
1、key的类型
redis的key 值是二进制安全的,这意味着可以用任何二进制序列作为key值,从形如”foo”的简单字符串到一个JPEG文件的内容都可以。
空字符串也是有效key值。
redis建议使用字符串做为key的类型
2、key取值规范
(1)键值不需要太长,消耗内存,在数据中查找这类键值的计算成本较高
(2)键值不宜过短,可读性较差,通常建议见名知意。
(二)Redis的值value
(1)Redis的数据结构类型,指的就是redis的值value的类型;
(2)Redis常用的数据结构类型:string、list、set、sortedSet、hash
(3)string类型
string类型是redis最常用的数据结构类型,存储的值为字符串。
string相关命令
set key value
设置一个key,值为value,类型为String类型;如果这个key已经存在,则更新这个key的值。
返回值:1 表示成功;0 表示失败
setnx key value
如果这个key不存在,则设置一个key,值为value;如果key存在,则不做更新。
返回值:1 表示成功;0 表示失败
get key
获取key对应的value值;如果key不存在,则返回nil
mget key1 key2 key3
一次获取多个key的值,如果对应key不存在,则对应返回nil。
incr key
将 key 中储存的数字值增一,然后返回。
如果这个key不存在,那么key的值会先被初始化为0,然后再执行INCR
操作。
如果这个key对应的value值,不能表示数字,则会返回一个错误。
incrby key increment
将key增加指定的步长值。
decr key
将 key 中储存的数字值减一,然后返回。
如果这个key不存在,那么key的值会先被初始化为0,然后再执行INCR操作。
如果这个key对应的value值,不能表示数字,则会返回一个错误。
Redis的key是单线程模式,这就意味一瞬间只有一个线程能够持有这个key,所以可以使用redis解决部分涉及线程安全的业务。比如,在初级时候通过多线程模拟卖票,使用加锁的方式,保证只有一个线程能够持有锁,进行买票业务。
decrby key decrement
将key减少对应的步长值。
append key value
如果key已经存在,则将value追加到这个key原先的value值的末尾。
如果这个key不存在,则执行set操作。
127.0.0.1:6379> help @string 查看string类型的帮助文档()
127.0.0.1:6379> help set 查看set命令的帮助文档
(四)List类型
特点
(1)、基于Linked List实现
(2)、元素是字符串类型**
(3)、列表头尾增删快,中间增删慢,增删元素是常态
(4)、元素可以重复出现
(5)、最多包含2^32-1元素
List类型相关命令
lpush key value [value ...]
将一个或多个值value插入到列表key的表头(即从左边插入);
如果有多个value值,那么各个value值按从左到右的顺序依次插入到表头:比如说,对空列表mylist执行命令LPUSH mylist a b c,列表的值将是 c b a 这等同于原子性地执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令;
如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。
当 key 存在但不是列表类型时,返回一个错误。
rpush key value [value ...]
尾部添加(从右向左),操作同上。
llen key
返回key对应list的长度,key不存在返回0,如果key对应类型不是list返回错误
lindex key index
index元素在list列表中的下角标,从0开始;
lindex 是从左到右取元素
lrange key start stop
获取指定区间的所有元素;
下角标从0开始,0表示第一个元素,1表示第二个,依次类推;
-1表示最后一个元素,-2表示倒数第二个元素,依次类推;
lpop key
移除并返回列表中的第一个元素
rpop key
移除并返回列表中的最后一个元素。
(五)Set类型(集合)
特点
(1)无序的、去重的;
(2)元素是字符串类型;
(3)最多包含2^32-1元素。
Set相关命令
sadd key member [member ...](无序不重复)
将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
假如 key 不存在,则创建一个只包含 member 元素作成员的集合。
当 key 不是集合类型时,返回一个错误。
smembers key
返回集合 key 中的所有成员。
不存在的 key 被视为空集合。
spop key
移除并返回集合中的一个随机元素。
被移除的随机元素。
当key不存在或key是空集时,返回nil。
scard key
返回集合key的基数(集合中元素的数量)。
集合的基数。
当key不存在时,返回0。
交集、并集、差集sinter sunion sdiff
sinter key [key ...]
返回一个集合的全部成员,该集合是所有给定集合的交集。
不存在的 key 被视为空集。
sunion key [key ...]
返回一个集合的全部成员,该集合是所有给定集合的并集。
不存在的 key 被视为空集。
sdiff key [key ...]
返回一个集合的全部成员,该集合是所有给定集合之间的差集。
不存在的 key 被视为空集。
(六)SortedSet类型
特点
(1)类似Set集合;
(2)有序的、去重的;
(3)元素是字符串类型;
(4)每一个元素都关联着一个浮点数分值(Score),并按照分值从小到大的顺序排列集合中的元素。分值可以相同
(5)最多包含2^32-1元素
网友评论