Redis从入门到放弃 之 常用命令和基本数据类型操作
一、Redis通用命令
redis-cli -h 127.0.0.1 -p 6379 redis客户端登录 -h host -p 端口 -a 密码exit 退出当前客户端info 返回redis的一些相关信息(包括端口、配置文件等)flushdb 清空当前库中的所有数据flushall 清空所有库中的所有数据save 将当前内存中的数据持久化到dump.rdb中(只管保存、其他全部阻塞)bgsave 将当前内存中的数据持久化到dump.rdb中(后台异步进行快照操作)set k1 v1 设置K / V 键值对 (重复设置、覆盖原来的value)get k1 获取 K1对应的值keys a* 获取当前库中所有以a开头的key键dbsize 查看当前所在库的key的数量select 2 选择第3个库del k1 删除dump k1 序列化给定的key,并返回被序列化的值exists k1 k1是否存在,存在返回1、不存在返回0expire k1 10 设定k1的过期时间为10秒(只存在10秒,过期后自动删除)(返回1 设置成功、返回0设置失败)ttl k1 查看k1的生命周期还有多长时间persist k1 移除k1的过期时间,k1将持久保持expireat k1 1293840000 设置过期时间为 1293840000(时间戳)randomkey 随机返回一个当前库的keyrename k1 kk1 修改k1的名称为kk1(kk1存在时,原k1的值将覆盖原kk1的值)renamenx k1 kk1 仅当kk1不存在时,将k1改为kk1type k1 返回k1的所存储值的类型move k1 2 将k1移动到第3个库(原库中的k1删除,第三个库中增加k1)
二、基本数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)
1、string字符串
string是redis最基本的类型,一个key对应一个value。是二进制安全的,比如jpg图片或者序列化的对象 。string类型是Redis最基本的数据类型,一个键最大能存储512MB。常用字符串命令:set k1 'helloWorld' 为k1赋字符串值get k1 获取k1对应的值getset k1 'worldHello' 将k1的值重新设为worldHello并返回k1原来的值he'llWorld (如果k1不存在,则新建k1)mget k1 k2 k3获取k1 k2 k3的值setex k1 10 'helloWorld'设置k1的值位helloWorld,并将其过期时间设置为10秒setnx k1 'testsetnx'k1不存在时,设置k1的值位testsetnx。(成功返回1,不成功返回0)setrange k1 1 'bbbb'从偏移量1位置开始 复写k1的原来的值 (原helloWorld,现hbbbbWorld)getrange k1 0 2 获取(截取)k1从第0位到第2位的值strlen k1 获取k1 的值的字符串长度mset k1 v1 k2 v2 k3 v3同时设置k1 k2 k3 的值分别为v1 v2 v3msetnx k1 v1 k2 v2 k3 v3当且仅当 “所有”k1 k2 k3 都 不存在时,设置k1 k2 k3的值位v1 v2 v3incr k1 如果k1的值为 数字(整数),则将其值加1. 若k1 不存在 则设置k1的值为1(默认值为0,incr之后为1)incrby k1 5如果k1的值为 数字(整数),则将其值加5.若k1 不存在 则设置k1的值为5(默认为0,incrby之后为5)incrbyfloat k1 1.22如果k1的值为 数字,则将其值加1.22若k1不存在则设置k1的值为1.22(默认为0,incrbyfloat之后为1.22)decr k1 如果k1的值为 数字(整数),则将其值减1,若k1不存在则设置k1的值为-1(默认为0, decr之后为-1)decrby k1 5如果k1的值为 数字(整数),则将其值减5,若k1不存在则设置k1的值为-5(默认为0,decrby之后为-5)
(我曹,那浮点数的减法 是什么命令??????: 只能用 incrbyfloat k1 负数 来代替喽)append k1 aaa如果k1的值是个字符串,则在其值末尾拼接aaa,若k1不存在,则新建一个k1,其值为aaa
2、hash(哈希)
Redis hash 是一个键值对集合。是一个string类型的field和value的映射表,hash特别适合用于存储对象。
hset person id 1 设置key为person 的hash,且其id 为1hget person id 获取key为person 的hash的id字段hmset person id 1 name lee 设置key为person的hash,且其id为1 name为leehmget person id name 获取key为person的id 和 name字段hsetnx person age 25 当key为person的hash中age不存在时,设置age字段为25hkeys person获取key为person的hash的所有字段hvals person获取key为person的hash的所有字段的值hgetall person获取key为person的hash的所有字段和字段值del person 删除key为person 的hash数据hdel person id name 删除key为person中 的 id和name字段(所有字段都删除后 person自动删除)exist person 判断key为person的数据是否存在hexists person id 判断key为person的hash中id字段是否存在(没有hmexists 泪目)hincryby person id 2 给person的id字段上增加2(如果id为数字 且是整数) (没有hdecrby 泪目)hincrbyfloat person id 1.2 给person的id字段增加1.2(如果id为数字)(没有hincrbyfloat 泪目)dbsize 获取库中所有key的数目hlen person 获取key为person的hash中 的 字段总数
(hscan命令 没看明白 以后在补上)
3、list(列表)
Redis列表是简单的字符串列表(双向链表结构),按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)
(列表允许 数值 重复)
lpush teacher lee xue dong 从左侧将lee xue dong插入teacher(key)中lpop teacher 从teacher左侧移除一个数据rpush teacher lee xue dong 从右侧将lee xue dong插入teacher(key)中rpop teacher 从teacher右侧侧移除一个数据lrange teacher 0 2 从左侧遍历第0个到第2个teacher数据 (0 -1是遍历全部数据)(没有rrange命令)lindex teacher 1 索引teacher从左侧数第2个元素。(第一个是dong 第二个是xue)linsert teacher before lee geng 从左侧数teacher在lee的前边插入geng (即在lee的左侧插入geng,左侧数 前边就是左边)(没有rinsert)linset teacher after lee geng 从左侧数teacher在lee的后边插入geng(即在Lee的右侧插入geng,左侧数 后边就是右侧)(没有rinsert)llen teacher 获取teacher列表的长度lpushx teacher aa 如果teacher存在,从左侧插入aa。(teacher不存在则插不进去 不会建立新的键)rpushx teacher aa 如果teacher存在,从右侧插入aa。(teacher不存在则插不进去 不会建立新的键)lrem teacher 2 tian 从左侧数 删除teacher列表中的2个tian(如果tian不够,则删除所有)lrem teacher -2 tian 从右侧数 删除teacher列表中的2个天(如果tian不够,则删除所有)lrem teacher 0 tian 删除teacher列表中所有的tianlset teacher 1 su 从左侧数teacher列表在第2个位置添加sultrim teacher 0 2 从左侧数将原teacher列表中从第0个值到第2个值得数据重新赋值给teacherrpoplpush teacher teacher2 将teacher列表中右侧第一个元素移除,并在teacher2列表中左侧添加进去
4、set(集合)
Redis的Set是string类型的无序集合,集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
(集合中 不允许 重复 、 且是无序的)
sadd test a b c d 向test集合中添加元素a b c dsmembers test 获取test集合的所有元素sismember test a 验证元素a是否是test集合的成员 (1是0不是)scard test 获取test集合中所有元素的个数srem test a b 从test集合中移除元素a和bspop test 从test集合中随机出栈(移除一个元素)srandmember test 从test集合中随机显示一个数smove test1 test2 a 将元素a从test1集合中移到test2集合中sdiff test1 test2集合test1和集合test2的 差集(即test1集合存在test2集合中不存在的元素)sdiffstore test3 test1 test2 将test1集合和test2集合 的差集 赋值给test3集合(如果test3集合中有值 则覆盖原
来的值)sinter test1 test2集合test1和集合test2的 交集(即test1集合和test2集合共同拥有的元素)sinterstore test3 test1 test2 将test1集合和test2集合 的交集 赋值给test3集合(如果test3集合中有值 则覆盖原来的值)sunion test1 test2集合test1和集合test2 的 并集 (即test1集合 和 test2 集合 所有的元素组合 且会去重)sunionstore test3 test1 test2将集合test1和集合test2的 并集 赋值给集合test3
(sscan命令没看明白 以后补上)
5、sorted set(有序集合)
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。
(集合中 不允许 重复,有序的 分数是可以重复的)
zadd subject 1 chinese 2 english 3 math 设置subject集合 元素 分别为 1分 chinese 2分english 3分 math
zrange subject 0 -1 显示全部的subject集合的元素(分数默认是由低到高的)
zrange subject 0 -1 withscores 显示全部的subject集合的元素 和 对应的分数(分数默认是由低到高的)
zcard subject显示subject集合的元素个数
zcount subject 1 2计算subject集合 分数在1和2之间的元素个数(包括1和2)
zincrby subject 10 chinese
给集合subject的chinese元素的分数加10
zinterstore subject
zlexcount subject