本地安装好redis服务和客户端之后,使用如下命令连接redis服务器:
redis-cli -h 127.0.0.1 -p 6379
一、value值为字符串的相关操作:
#设置key:value,如果key值不存在则创建,否则覆盖
set key value
#如果键key的键值对存在,则覆盖新值为value,如果不存在,不操作,原子操作 等价于 setex key value
set key value XX
#如果key不存在,则创建一个key:value的键值对,如果存在不操作 等价于 setnx key value
set key value NX
#设置key:value键值对,且过期时间是10(ex:秒,px:毫秒),原子操作
set key value ex|px 10
#如果key不存在则设置,否则返回0,成功返回1
setnx key value
#如果key存在则覆盖新值,否则返回0,成功返回1
setex key value
#获取key值的value 如果有返回值,如果没有返回空(nil)
get key
#获取key的旧值并设置新值 如果数据库没有key值,则返回的旧值为空(nil)
getset key new_value
#redis还可以缓存二进制数据,所以可以缓存任何类型的文件
#删除多个key对应的键值对,返回删除成功的个数
del key1 key2
#获取字符串值索引从0到6的子串
getrange key 0 6
#设置key对应的value中索引为5后面的子串为substring
setrange key 5 substring
#追加substring到键值为key的值后面 返回新值的总长度,如果没有key值,则新建一个,value为空字符串,并追加substring
append key substring
二、value为数字的相关操作
#当设置value时的字符串值符合redis中对数字的定义,且在redis定义的数字大小范围内时,redis自动转为数值类型
redis对数字的定义参照c语言的long ,double,int类型,包含无符号和有符号的整型或浮点型
值,如下表格:
10086 解释为整数。
+894 解释为整数。
-123 解释为整数。
3.14 解释为浮点数。
+2.56 解释为浮点数。
-5.12 解释为浮点数。
12345678901234567890 这个值虽然是整数,但是因为它的大小超出了 long long int 类型能够容纳的范围,所以只能被解释为字符串。
3.14e5 因为 Redis 不能解释使用科学记数法表示的浮点数,所以这个值只能被解释为字符串。
"one" 解释为字符串。
"123abc" 解释为字符串。
操作整型:
#将key值对应的value值加(或减)1,并返回新值,如果value值不是整数类型 返回错误信息
incr key
decr key
#将key值对应的value值加(或减)10 并返回新值,果value值不是整数类型 返回错误信息
incrby key 10
decrby key 10
#在执行加或减时,如果没有对应的key存在,则会新建一个,并进行增减
浮点型:
#对key值的value进行加1.2,浮点型最大保留17位小数 并四舍五入
incrbyfloat key 1.2
#注意浮点型只有加 没有减关键字,可以使用加一个负数实现减法
incrbyfloat key -2.9
#注意:incrbyfloat可以作用在浮点型 也可以作用在整型,而incr incrby decr decrby只能作用在整型值上
三、value为散列的相关操作:
散列可以理解为一组键值对的集合,其中的键不能重复,值可以为数字或字符串或者一个散列,散列可以理解为java中的一个对象,包含了字段名和字段值。
#设置一个key为animal::01的散列值,散列值的key为name,value为dog 如果已存在则覆盖
hset animal::01 name dog
#获取key为animal::01的散列值中key为name的value,
hget animal::01 name
#设置key为animal::01的散列中key为name的值,如果已存在不设置,不存在就设置
hsetnx animal::01 name newvalue
#将key为animal::01对应的散列设置多个键值对
hmset animal::01 key1 value1 key2 value2
#获取key为animal::01对应散列的多个key值:key1和key2
hmget animal::01 key1 key2
#将key为animal::01对应散列中key为age的加10 hincrby只能处理整型数字
hincrby animal::01 age 10
#将key为animal::01对应散列中key为age的加10.2 hincrby能处理整型数字和浮点型数字
hincrbyfloat animal::01 age 10.2
#获取key为animal::01对应散列中所有的键值对
hgetall animal::01
#获取散列中所有key值
hkeys animal::01
#获取散列中所有value值
hvals animal::01
四、value为列表的操作(元素重复有序):
#往list中推入多个值item1 item2 从左边依次推入 如果list不存在新建 存在则从左追加
lpush list item1 item2 ...
#如果list存在则往list中从右依次推入item1 item2 ,如果不存在,不操作
lpushx list item1 item2 ...
#往list中推入多个值item1 item2 从右边依次推入 如果list不存在新建 存在则从左追加
rpush list item1 item2 ...
如果list存在则往list中从右依次推入item1 item2 ,如果不存在,不操作
rpushx list item1 item2 ...
#从左边弹出一个元素 如果没有元素或list 则返回nil
lpop list
#从右边弹出一个元素 如果没有元素或list 则返回nil
rpop list
#从list1的右边弹出一个元素到list2的最左边
rpoplpush list1 list2
#获取lis中第0个索引元素,即第一个元素
lindex list 0
#获取list中从0索引到最后一个索引范围内的元素,-1表示最后一个索引,所以可以获取到整个list元素
lrange list 0 -1
#获取列表长度
llen list
#将list中索引为0的设置为new_value ,如果给定的索引值大于列表长度则 提示out of range .
lset list 0 new_value
#在list中元素2的前面或后面插入1 如果list中没有1元素 则返回-1,不会插入成功
linsert list before|after 2 1
#将list裁剪,只保留索引2到6的,含头索引含尾索引,索引从0开始计算
ltrim list 2 6
#从左向右开始移除list中等于hello的两个元素
lrem list 2 hello
#从右向左移除list中2个hello元素
lrem list -2 hello
#移除list中所有等于hello的元素
lrem list -2 hello
#依次从list1和list2中弹出最左侧元素,如果列表中没有元素,阻塞,直到有元素被推入,超时时间10秒
blpop list1 list2 10
#依次从list1和list2中弹出最右侧元素,没有元素会阻塞,超时20秒,返回源list和弹出元素
brpop list1 list2 20
#阻塞从list1右侧弹出一个元素到list2元素的左侧 超时时间30秒
brpoplpush list1 list2 30
五:value是集合的操作(元素是无序不重复):
#向key为set的集合中加入多个元素:item1 item2 item3,存入顺序是无序的
sadd set item1 item2 item3
#查看key为set的集合中所有元素
smembers set
#从set1集合中将hello元素移动set2集合中,如果set1或set2不是集合会提示错误信息,如果移动成功返回1,如果集合中没有hello这个元素,返回0,如果set2中包含hello,则覆盖
smove set1 set2 hello
#判断set1集合中是否存在hello元素,如果存在返回1,不存在返回0
sismember set1 hello
#从set集合中移除hello元素,如果成功返回1 失败或元素不存在或集合不存在返回0
srem set hello
#返回set集合中元素个数 ,没有元素或集合不存在返回0
scard set
#随机从set集合中返回10个不重复的元素,如果没有10个,返回所有元素,10可以不写,默认1个
srandmember set 10
#随机返回set集合中10个元素,可以重复,所以返回的个数可以大于集合的个数
srandmember set -10
#随机中set集合删除2个元素,返回移除的元素列表,2也可以不写,默认1个
spop set 2
#求set1集合和set2几个的交集,返回交集列表,如果其中一个集合不存在,返回空列表
sinter set1 set2
#将set1和set2集合的交集列表存入key为newset的集合中,如果newset不存在会自动创建,如果存在则删除之后再创建
sinterstore newset set1 set2
#求set1集合和set2集合的并集,返回交集列表,如果其中一个集合不存在,返回空列表
sunion set1 set2
#将set1和set2集合的并集列表存入key为newset的集合中,如果newset不存在会自动创建,如果存在则删除之后再创建
sunionstore newset set1 set2
#求set1集合和set2集合的不同元素,返回不同元素列表,如果其中一个集合不存在,返回空列表
sdiff set1 set2
#将set1和set2集合的不同元素列表存入key为newset的集合中,如果newset不存在会自动创建,如果存在则删除之后再创建
sdiffstore newset set1 set2
六、value值是有序集合的操作(zset):
#将分值为0.1,元素为item1,分值为0.2,元素是为item2加入到zset集合中
zadd zset 0.1 item1 0.2 item2
#查看zset集合的元素个数
zcard zset
#查看zset中分值在0到10分的元素个数
zcount zset 0 10
#将zset集合中item1元素数值加10
zincrby zset 10 item1
#返回zset集合中item1元素的索引 没有该元素时返回nil
zrank zset item1
#删除zset集合中多个元素:item1 item2 ..
zrem zset item1 item2 ..
#查询zset中0到-1索引之间的元素 -1表示最后一个元素的索引 并包含分数信息
zrange zset 0 -1 withscores
#查询分数在1到10之间的元素 包含分数信息
zrangebyscore zset 1 10 withscores
七、redis基本操作:
#选择1号数据库,redis默认16个数据库 序号是:0-15
select 1
#查看当前数据库匹配a*的所有键值 keys命令慎用,会引起redis阻塞,数据量大很影响性能 用scan 命令 ,使用游标查询
keys a*
#查看key_name键值是否存在
exists key_name
#在当前数据库随机返回一个key值
randomkey
#查看键值存放的类型 有set list string
type key_name
#删除当前数据库中指定的键值对 同步阻塞删除
del key_name ...
#异步删除key 效率比del高
unlink key_name ...
#当前数据库总共多少对键值对
dbsize
#对set1集合中元素进行升序或降序排列
sort set1 asc|desc
#将key1的键值名修改为key2,如果key2已经存在,则覆盖之
rename key1 key2
#如果key2不存在则将key1修改为key2,否则不修改
renamenx key1 key2
#清空当前数据库
flushdb
#情况所有数据库
flushall
#交换0号数据库和4号数据库的所有键值对
swapdb 0 4