redis的那些事
MemCache、Redis、MongoDB被称为NoSQL三剑客
##NoSQL数据库(Redis)
数据存储位置 内存 数据结构 没有预定义的模式 数据操作方式 所有数据都是键值对,没有声明性查询语言 事务控制 基于乐观锁的松散事务控制 NoSQL数据库的最大优势体现为:高性能、高可用性和可伸缩性。
1)官网地址 https://redis.io 2)下载地址 https://redis.io/download 3)命令参考地址 http://redisdoc.com
## 应用场景
###1)缓存 使用Redis可以建立性能非常出色的缓存服务器,查询请求先在Redis中查找所需要的数据,如果能够查询到(命中)则直接返回,大大减轻关系型数据库的压力。 ###2)数据临时存储位置 使用token(令牌)作为用户登录系统时的身份标识,这个token就可以在Redis中临时存储。 ###3)分布式环境下解决Session不一致问题时的Session库 Spring提供了一种技术解决分布式环境下Session不一致问题,叫SpringSession。而Redis就可以为SpringSession提供一个数据存储空间。 ###4)流式数据去重 在Redis中有一种数据类型是Set,和Java中的Set集合很像,不允许存储重复数据。借助这个特性我们可以在Redis中使用Set类型存储流式数据达到去重的目的。
## 五种常用数据类型 string 它是key对应的一个单一值 可以包含任何数据,比如jpg图片或者序列化的对象,Redis中一个字符串值的最大容量是512M list 字符串列表,按照插入顺序排序,底层是基于链表实现,头尾效率高,中间效率低 set String类型的无序集合,基于哈希表实现的 hash 本身就是一个键值对集合。可以当做Java中的Map<String,String> zset 和set一样,但每个元素都会关联一个double类型的分数,通过分数来为集合中的成员进行从小到大的排序实现有序不重复,分数(score)可以重复
默认有16个数据库 select + 数据库编号 切换数据库 dbsize 查看数据库长度(存储了多少个key) keys ? 查看只有一位的key keys * 查看所有key type key名 查看key对应的值的类型 move key名 db库名 把一组键值对移动到指定库 del key名 [可以填写多个key名] 删除key exists key名 [可以填写多个key名] 查看key是否存在,可以查看多个,存在返回的是存在的数量,不存在返回0 randomkey 在现有的key中随机返回一个 rename key名 新key名 改变key名,新key名可以是已有的 renamenx 改变key名新key名不能是已有的 ttl key名 查看key可以存在多久,-1表示永久 expire key名 时间(秒) 设置key在多少秒后过期被删除 persist key名 移除过期时间改为永久
## sting类型操作 set key名 value值 [存活秒数] [存活毫秒数] [nx,key不存在时执行/xx,key存在时执行] 给key设置一个sting类型的值,可以创建不存在的key,[]的内容可以不要 get key名 得到string类型的key对应的值,无法操作其他类型的key strlen key名 返回key的值的字符串长度 append key名 value值 将value值追加进key的值后,返回追加后的字符串长度 incr key名 自增1,只能对数字类型的key操作,可以创建value为1的key decr key名 自减1,只能对数字类型的key操作,可以创建value为-1的key incrby key名 数字 增加指定数字值,只能对数字类型的key使用,可以创建value为指定数字的key decrby key名 数字 减少指定数字值,只能对数字类型的key使用,可以创建value为-指定数字的key getrange key名 起始下标 结束下标 查看key中指定范围的值 setrange key名 下标位置 value值 在指定下标位置使用指定值进行替换 setex key名 秒数 value值 设置key,value存活的指定秒数 时间结束会删除整个key setnx key名 value值 设置还未存在的key,value key不可以存在,value不影响 mset key value key value … 一次设置多个key-value,已存在的会被覆盖 mget key key key … 可以一次返回多个key对应的value值,不存在的key返回nil msetnx key value key value … 一次设置多个key-value,只能设置不存在的,有一个已存在的key都不会成功 getset key value 更改key对应的value值,返回原来的value值
## list类型操作 lpush key value value … 从左到右向key中放入多个value,可以创建/改变key lrange key 0 -1 查看key的value llen key 查看key的长度即value的个数 lpop key 从左弹出第一个value 弹出指查看并删除 rpoplpush key key 从第一个key中弹出左边第一个value并从左到右写入第二个key中,第二个key可以是不存在的key lindex key 下标 根据key的索引值查看value linsert key before/after value1 value 在key中value1值左/右插入value lpushx key value value … 在已存在的key中从左到右添加value lrem key 数量 value 删除key中指定数量的value lset key 下表 value 使用value替换key中指定下标的值 ltrim key 下标1 下标2 保留两个下标之间的数据,删除其他的
## set类型操作 sadd key value value … 向key中放入value,可以创建key,会自动去除重复的value smembers key 查看key的值 scard key 返回key的长度 sismember key value 查看key中是否有指定的value值,有返回1,没有返回0 srem key value value … 删除key中value值,返回删除成功的数量 sinter key key … 查看多个key的交集 sinterstore key1 key key … 将多个key的交集放入key1 sdiff key key … 查看多个key的差集 sdiffstore key1 key key … 将多个key的差集放入key1 sunion key key key … 查看多个key的并集 sunionstore key1 key key … 将多个key的并集放入key1 smove key1 key value 将key1 的value值放入key srandmember key [数量] 随机返回key中指定数量的value 不填默认1个 spop key [数量] 随机弹出key中指定数量的value 不填默认1个
##hash类型操作 一个hash有多个key,一个key有多个field场地,一个场地有一个value hset key field value field value … 向key中的指定场地放入value,可以用来创建hash,可以一次创建多个,会替换已存在的 hgetall key 查看key中全部的场地值和value值 hget key field 查看key中指定场地对应的value值 hlen key 查看key的长度即key中的field数量 hkeys key 查看key中的所有field场地 hvals key 查看key中的所有value值 hexists key field 判断key中是否存在指定的field值,存在返回1,不存在返回0 hdel key field 删除key中指定的field值,成功返回1,不成功返回0 hincrby key field 数值 使指定field中的数值类型的value增加指定数值,做加法运算 hmget key field field … 查看指定key中多个场地对应的value值 hmset key field value field value … 和hset暂未发现有不一样的,都能操作多个,都会覆盖已存在的 hsetnx key field value 在场地不存在时添加
|