1、redis的简介
①、Redis是一个开源的key-value形式存储的内存数据库,俗称缓存中间件。
②、和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
③、这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
④、 在此基础上,Redis支持各种不同方式的排序。
⑤、与memcached一样,为了保证效率,数据都是缓存在内存中。
⑥、区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。即rdis支持持久化功能,并且有两种持久化策略;
⑦、redis架构上有主从模式,哨兵模式,集群模式。
2、redis的数据类型
1、rdies的数据类型有常用五大种数据类型和新的三种数据类型;
2、redis常用五大数据类型:
普通的键值对类型:key-value 形式;
列表类型:List;
集合类型:set;
哈希类型:HashMap;
有序集合类型:ZSet;
-
键值对类型的底层数据结构:
String的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS)。是可以修改的字符串,内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配.
如图中所示,内部为当前字符串实际分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M。
-
列表类型的底层数据结构:。
①、List的数据结构为快速链表quickList。首先在列表元素较少的情况下会使用 一块连续的内存存储,这个结构是ziplist,也即是压缩列表。它将所有的元素紧挨着一起存储,分配的是一块连续的内存。当数据量比较多的时候才会改成quicklist。
②、因为普通的链表需要的附加指针空间太大,会比较浪费空间。比如这个列表里存的只是int类型的数据,结构上还需要两个额外的指针prev和next:
-
集合类型的底层数据结构:
1、Set数据结构是dict字典,字典是用哈希表实现的。
2、Java中HashSet的内部实现使用的是HashMap,只不过所有的value都指向同一个对象。Redis的set结构也是一样,它的内部也使用hash结构,所有的value都
指向同一个内部值。 -
哈希类型的底层数据结构:
Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable。 -
有序集合类型的底层数据结构:
1、SortedSet(zset)是Redis提供的一个非常特别的数据结构,一方面它等价于Java的数据结构Map<String, Double>,可以给每一个元素value赋予一个权重score,另一方面它又类似于TreeSet,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。
2、zset底层使用了两个数据结构:
①、hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。
③、跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表;
3、redis新数据类型:
BitMap类型:一种存储二进制的map;
HypeLogLog类型:一种基于只存储基数的集合类型;适合做统计相关业务
Gesospatial类型:一种专门用来存储经纬度等地理信息的类型;
2、redis的安装:
- 安装版本
6.2.1 for Linux(redis-6.2.1.tar.gz)
不用考虑在windows环境下对Redis的支持
2、安装步骤
1、准备工作:下载安装最新版的gcc编译器;
2、安装C 语言的编译环境:
yum install centos-release-scl scl-utils-build
yum install -y devtoolset-8-toolchain
scl enable devtoolset-8 bash
3、测试 gcc版本 :gcc --version
4、下载redis-6.2.1.tar.gz放/opt目录;
5、解压命令:tar -zxvf redis-6.2.1.tar.gz;
6、解压完成后进入目录:cd redis-6.2.1;
7、在redis-6.2.1目录下再次执行make命令(只是编译好);
8、如果没有准备好C语言编译环境,
make 会报错—Jemalloc/jemalloc.h:没有那个文件
9、解决方案:运行make distclean
10、在redis-6.2.1目录下再次执行make命令(只是编译好)
11、跳过make test 继续执行: make install
- 安装目录:/usr/local/bin
查看默认安装目录有如下命令:
redis-benchmark:性能测试工具
redis-check-aof:修复有问题的AOF文件
redis-check-dump:修复有问题的dump.rdb文件
redis-sentinel:Redis集群使用
redis-server:Redis服务器启动命令 redis-cli:客户端,操作入口
- 前台启动(不推荐)
直接执行redis-server命令即是前台启动,命令行窗口不能关闭,否则服务器停止 - 后台启动(推荐)
执行redis-server 配置文件路径 ,即为后台启动模式,如下:
redis-server /usr/local/bin/redis.config
- 备份redis.conf
拷贝一份redis.conf到其他目录
cp /opt/redis-3.2.5/redis.conf /myredis
- 后台启动设置daemonize no改成yes
修改redis.conf(128行)文件将里面的daemonize no 改成 yes,让服务在后台启动 - Redis启动
redis-server/myredis/redis.conf
- 用客户端访问:
redis-cli
- 多个端口访问可以:
redis-cli -p6379
测试验证: ping
- Redis关闭
#单实例关闭:
redis-cli shutdown
#也可以进入终端后再关闭
#多实例关闭,指定端口关闭:
redis-cli -p 6379 shutdown