Redis 命令用于在Redis服务上执行操作,Redis支持五种数据类型;分别是 string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)等
keys * : 返回满足的所有键 ,可以模糊匹配 比如 keys abc* 代表 abc 开头的 key exists key :是否存在指定的key,存在返回1,不存在返回0 expire key second:设置某个key的过期时间 时间为秒 del key: 删除某个key ttl key:查看剩余时间,当key不存在时,返回 -2;存在但没有设置剩余生存时间时,返回 -1,否则,以秒为单 位,返回 key 的剩余生存时间。 persist key:取消过去时间 PEXPIRE key milliseconds: 修改key 的过期时间为毫秒 select : 选择数据库 数据库为0-15(默认一共16个数据库) 设计成多个数据库实际上是为了数据库安全和备份 move key dbindex : 将当前数据中的key转移到其他数据库 randomkey: 随机返回一个key rename key key2 : 重命名key echo: 打印命令 dbsize: 查看数据库的key数量 info: 查看数据库信息 config get * : 实时传储收到的请求,返回相关的配置 flushdb: 清空当前数据库 flushall: 清空所有数据库
该命令用于在 key 存在时删除 key。
检查给定 key 是否存在。
为给定 key 设置过期时间(以秒计)。
设置 key 的过期时间以毫秒计。
以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)
以毫秒为单位返回 key 的剩余的过期时间。
查找所有符合给定模式( pattern)的 key。
keys 通配符 获取所有与pattern匹配的key,返回所有与该匹配
通配符:
* 代表所有
? 表示代表一个字符
修改Key的名称
将当前数据库的 key 移动到给定的数据库 db 当中
返回 key 所储存的值的类型
EXPIRE key seconds应用场景
Key的命名建议,redis单个key允许存入512M大小
string类型是Redis最基本的数据类型。 string 数据结构是简单的key-value类型,value其不仅是string,也可以是数字,是包含很多种类型的特殊类型, string类型是二进制安全的。意思是redis的string可以包含任何数据。 比如序列化的对象进行存储,比如一张图片进行二进制存储,比如一个简单的字符串,数值等等。
赋值语法: SET KEY_NAME VALUE: (说明:多次设置name会覆盖) (Redis SET 命令用于设置给定 key 的值。如果key已经存储值,SET就覆写旧值,且无视类型)
命令: SETNX key1 value: (not exist) 如果key1不存在,则设值 并返回1。如果key1存在,则不设值并返回0; (解决分布式锁 方案之一,只有在 key 不存在时设置 key 的值。Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值) SETEX key1 10 lx: (expired) 设置key1的值为lx,过期时间为10秒,10秒后key1清除(key也清除) SETRANGE string range value: 替换字符串
取值语法: GET KEY_NAME: Redis GET命令用于获取指定 key 的值。如果 key 不存在,返回 nil 。如果key 储存的值不是字符串类型,返回一个错误。 GETRANGE key start end: 用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和end 两个偏移量决定(包括 start 和 end 在内) GETBIT key offset: 对 key 所储存的字符串值,获取指定偏移量上的位(bit) GETSET语法: GETSET KEY_NAME VALUE;Getset 命令用于设置指定 key 的值,并返回 key 的旧值,当 key 不存在时,返回 nil STRLEN key: 返回 key 所储存的字符串值的长度\
删值语法: DEL KEY_Name: 删除指定的KEY,如果存在,返回值数字类型。 批量写: MSET k1 v1 k2 v2 ... 一次性写入多个值 批量读: MGET k1 k2 k3 GETSET name value: 一次性设值和读取(返回旧值,写上新值)\
自增/自减: INCR KEY_Name: Incr 命令将 key 中储存的数字值增1。如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行 INCR 操作
应用场景
INCR等指令本身就具有原子操作的特性,所以我们完全可以利用redis的INCR、INCRBY、DECR、 DECRBY等指令来实现原子计数的效果。假如,在某种场景下有3个客户端同时读取了mynum的值 (值为2),然后对其同时进行了加1的操作,那么,最后mynum的值一定是5。 不少网站都利用 redis的这个特性来实现业务上的统计计数需求。
Hash类型是String类型的field和value的映射表,或者说是一个String集合。hash特别适合用于存储对象,相比较而言,将一个对象类型存储在Hash类型要存储在String类型里占用更少的内存空间,并对整个对象的存取。 可以看成具有KEY和VALUE的MAP容器,该类型非常适合于存储值对象的信息, 如:uname,upass,age等。该类型的数据仅占用很少的磁盘空间(相比于JSON)。 Redis 中每个 hash 可以存储 2的32次方 - 1 键值对(40多亿)
赋值语法: HSET KEY FIELD VALUE :为指定的KEY,设定FILD/VALUE HMSET KEY FIELD VALUE [FIELD1,VALUE1]......: 同时将多个 field-value (域-值)对设置到哈希表key中。
取值语法: HGET KEY FIELD: 获取存储在HASH中的值,根据FIELD得到VALUE HMGET KEY field[field1]: 获取key所有给定字段的值 HGETALL KEY: 返回HASH表中所有的字段和值 HKEYS KEY: 获取所有哈希表中的字段 HLEN KEY: 获取哈希表中字段的数量
删除语法: HDEL KEY field1[field2] :删除一个或多个HASH表字段\
其他语法: HSETNX key field value :只有在字段 field 不存在时,设置哈希表字段的值 HINCRBY key field increment :为哈希表 key 中的指定字段的整数值加上增量increment HINCRBYFLOAT key field increment :为哈希表 key 中的指定字段的浮点数值加上增量increment HEXISTS key field :查看哈希表key中,指定的字段是否存在
应用场景 hash的应用场景:(存储一个用户信息对象数据)
hash是最接近关系数据库结构的数据类型,可以将数据库一条记录或程序中一个对象转换成hashmap存放在 redis中。
用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储, 主要有以下2种存储方式:
第一种方式将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,这种方式的缺点是,增加了 序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保 护,引入CAS等复杂问题。
第二种方法是这个用户信息对象有多少成员就存成多少个key-value对儿,用用户ID+对应属性的名称作为唯一 标识来取得对应属性的值,虽然省去了序列化开销和并发问题,但是用户ID为重复存储,如果存在大量这样的数据, 内存浪费还是非常可观的。
总结: Redis提供的Hash很好的解决了这个问题,Redis的Hash实际是内部存储的Value为一个HashMap, 并提供了直接存取这个Map成员的接口