Redis入门使用 -- 个人总结
目录
什么是Redis?
* Redis是一种高级key-value数据库。 * Redis:REmote DIctionary Server(远程字典服务?) * Redis 是完全开源免费的,用C语言编写的,遵守BSD协议 * 是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库 * 是当前最热门的NoSql数据库之一,也被人们称为数据结构服务?
Redis 与其他 key - value?数据库的对比
* **Redis支持数据的持久化**,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用 * **Redis数据结构类型丰富**:不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储 * **Redis支持数据的备份**,即master-slave模式的数据备份 * 下图展示了一些数据库和缓存服务?的特性与功能 ![](https://img2020.cnblogs.com/blog/1756476/202004/1756476-20200414175716515-1116925459.png)
Redis 能干什么
* 根据Redis的特性,简单列举几个应用场景: + 内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务Redis可以用作主数据库 (primary database) 或者其他存储系统的辅助数据库 (auxiliary database) + 取最新N个数据的操作,如:可以将最新的10条评论的ID放在Redis的List集合里面 + 模拟类似于HttpSession这种需要设定过期时间的功能 + 发布、订阅消息系统 + 定时?、计数?
Redis的安装配置
* Linux虚拟机安装 + 本教程使用的是 VMWare虚拟机,Linux系统使用的RedHat系列的 CentOS6.5 版本。 * Linux 版安装 + 下载地址 :https://redis.io/download?下载最新版本的Redis。 * Redis安装 + 下载获得 redis-5.0.4.tar.gz 后,拷贝到我们的/usr/soft目录 + 使用 tar 命令解压文件 - > tar -zxvf redis-5.0.4.tar.gz + 进入 redis-5.0.4 目录,执行 make ,编译源代码 - 如果采用linux最小安装,make命令会出现 command not found 错误,解决方式 - > 先执行: yum?-y?install?gcc?automake?autoconf?libtool?make - > 安装g++: yum?install?gcc?gcc-c++ - 如果出现: error:?jemalloc/jemalloc.h:?No?such?file?or?directory - > 原因是jemalloc重载了Linux下的ANSI?C的malloc和free函数。解决办法:make时添加参数。make?MALLOC=libc + 编译后继续执行 make install , 进行安装,默认安装到了 /usr/local/bin 目录下 - > make install PREFIX=/usr/local/redis + 安装成功 - > 总用量 12948 - > -rw-r--r--. 1 root root 92 4月 18 19:40 dump.rdb(配置文件) - > -rwxr-xr-x. 1 root root 353808 4月 18 19:30 redis-benchmark(性能测试工具,可以在自己本子运行,看性能) - > -rwxr-xr-x. 1 root root 4030624 4月 18 19:30 redis-check-aof(修复有问题的AOF文件) - > -rwxr-xr-x. 1 root root 4030624 4月 18 19:30 redis-check-rdb(同上) - > -rwxr-xr-x. 1 root root 794352 4月 18 19:30 redis-cli(客户端,操作入口) - > lrwxrwxrwx. 1 root root 12 4月 18 19:30 redis-sentinel -> redis-server(redis集群使用) - > -rwxr-xr-x. 1 root root 4030624 4月 18 19:30 redis-server(Redis服务?启动命令)
Redis启动和连接
* 使用 redis-server 命令可以启动Redis服务?。 * Redis默认的端口号是6379,下图展示的是在非守护线程下启动,并且使用的是redis默认的配置文件 /usr/soft/redis-5.0.4/redis.conf + 注意在当前目录不能启动 - > cd /usr/local/redis - > ./bin/redis-server ![](https://img2020.cnblogs.com/blog/1756476/202004/1756476-20200414175750751-1818460156.png)
上面开启的是非守护线程下启动(独占模式),下面我们来做成后台运行模式
* 如果需要修改 redis 的默认配置,建议将配置文件复制一份 + > cp /usr/soft/redis-5.0.4/redis.conf /usr/local/redis/ * 配置说明 + 编辑刚复制过来的配置文件 - > vim redis.conf - > 如果没有vim,可以执行yml install vim下载 - > 由于配置文件中配置众多,我们可以采用:/port 这样搜索 + Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 - > daemonize?yes + 指定Redis监听端口,默认端口为6379. - > port 6479 + 绑定的主机地址 - > bind 127.0.0.1 * 然后使用启动Redis并且使用自己刚复制过来的配置文件 + > bin/redis-server /usr/local/redis/redis.conf * 查看Redis是否启动 + > ps -ef | grep redis
连接Redis服务?:永远的Helloworld
* 连接(如果配置文件修改了端口,后面加上 -p) + > bin/redis-cli -p 6479 * 进入Redis指定密码 + > auth 123456 * 关闭Redis服务 + > bin/redis-cli -a 123456 shutdown
Redis启动后的基础知识讲解
* 默认16个数据库,可以通过 select 命令切换数据库 * Dbsize查看当前数据库的key的数量 * keys * 列出所有的键值 * Flushdb:清空当前库 * Flushall;通杀全部库(慎用) * 统一密码管理,16个库都是同样密码,要么都OK要么一个也连接不上 * Redis索引都是从零开始 * 为什么默认端口是6379 :因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字
Redis的五大数据类型
* Redis 可以存储键与5种不同的数据结构类型之间的映射 * 最简单的 String * 存储多个 List * 唯一的无序 Set * 有序 Zset * 保持键值对 Hash ![](https://img2020.cnblogs.com/blog/1756476/202004/1756476-20200414175806760-1353799787.png)
Redis 键 key
* Redis 的键命令用于管理 redis 的键,该命令是通用的 key 命令,适用于所有的数据类型。 * 常用案例: + keys * : 列出当前数据库中所有的键 + exists key : 判断某个key是否存在 + move key db : 移动key到另外一个库,当前库就没有了 + expire key time(秒数): 设置键的过期时间 + ttl key: 查看key的过期时间: -1: 永不过期, -2: 已经过期 + type key: 查看 key 的类型 * Redis字符串(string) + Redis 字符串类型是使用 Redis的key时最简单的一种类型 + 这也是 memcached 中唯一支持的数据类型 + 当我们使用 string 数据类型时,值也是 string 类型的 + 下面我们来看下string 类型的用法 - set/get: 设置和设置给定的key的值 - append: 为指定的key 追加值。如果key 已经存在,将值追加到末尾,如果不存在,则执行 set - strlen: 获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。 - Incr(+1)/decr(-1)/incrby(指定长几 incrby 2)/decrby(指定降几): 一定要是数字才能进行加减 - getrange/setrange: 获取或者设置指定区间范围的值 - (从0开始) - mget/mset: 同时获取后者设置多个 key-value 对 - > mset IOS Apple price 9999 color Silver - getset: 先get再set,返回原先的value值 - > mget IOS Apple * Redis 列表(list) + 类似于Java中的数组 + Redis 对链表(linked-list) 的支持使得它在键值存储的世界中独树一帜。 + Redis列表是简单的字符串列表,按照插入顺序排序。 + 下面列举一些常用的list命令: - rpush: 将一个或多个值插入到列表的尾部(最右边) - lpush: 命令将一个或多个值插入到列表头部。 - lrange: 返回列表中指定区间内的元素,区间以偏移量?START?和?END?指定。?其中?0?表示列表的第一个元素,1?表示列表的第二个元素,以此类推.你也可以使用负数下标,以?-1?表示列表的最后一个元素,2?表示列表的倒数第二个元素,以此类推。 - lpop?/?rpop: 移除并返回列表的第一个/最后一个元素 - lindex: 通过索引获取列表中的元素.你也可以使用负数下标,以?-1?表示列表的最后一个元素,以此类推 - ltrim: 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在区域内将会被删除 - lset: 通过索引来设置元素的值。 当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。 - > lset fruits 0 juzi 把第一个改成juzi,重新赋值 linsert: 用于在列表的元素前或者后插入元素 * Redis 集合(set,不能重复) + Redis的集合和列表都可以存储多个字符串 + 下面猎取一些常用的 Set 命令: - sadd: 把爱好放入到Set集合中 - > sadd hobbies eat eat sleep - smembers: 查看集合中的值 - > SMEMBERS hobbies - sismember: 查看爱好集合中是否存在某个爱好 - scard?:?命令返回集合中元素的数量 - srem?:?用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。 - srandmember?:?用于返回集合中的一个或者多个随机元素 - spop?:?用于移除并返回集合中的一个随机元素 - sdiff?/?sinter?/?sunion?:??返回集合的差集?、交集、并集 * Redis 有序集合 Zset (sorted set) + 有序集合和散列一样,都用于存储键值对:有序集合的键被称为成员(member) + Zset中常用的命令 - zadd :用于将一个或多个成员元素及其分数值加入到有序集当中. - zrange : 返回有序集中,指定区间内的成员。其中成员的位置按分数值递增(从小到大)来排序 - Zrangebyscore :返回有序集合中指定分数区间的成员列表 - zrem?:?用于移除有序集中的一个或多个成员,不存在的成员将被忽略。 - zcard?:?用于计算集合中元素的数量 - zcount?:?用于计算有序集合中指定分数区间的成员数量 - zrevrank?:?返回有序集中成员的排名 * Redis 哈希(hash) + Redis Hashes 可以存储多个键值对之间的映射,是字符串字段和字符串值之间的映射 + 所以它们是完美的表示对象(eg:一个有名,姓,年龄等属性的用户)的数据类型 - hmset?computer?brand?Lenovo?price?5699?color?black 储存 - hgetall?computer 输出 + Redis hash 常用的命令有 - hset / hget :用于为哈希表中的字段赋值 。如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,旧值将被覆盖 - hmset / hmget / hgetall :? 用于同时将多个?field-value?(字段-值)对设置到哈希表中。或者同时获取多个?field-value值。 - hdel?:?用于删除哈希表?key?中的一个或多个指定字段,不存在的字段将被忽略 - hlen?:?用于获取哈希表中字段的数量. - hexists?:?用于查看哈希表的指定字段是否存在。 - hkeys?/?hvals?:?获取所有的字段?、?字段值 - hincrby?/?Hincrbyfloat:为哈希表?key?中的指定字段的整数值(浮点数值)加上增量?increment