一.字符串
字符串简单设置与获取
// 设置字符串,如果name重名会覆盖内容
set name "N"
//获取字符串
get name
//设置数字
set age 23
//显示该数据库的所有key
keys *
//设置一个字符串并指定他的过期时间,setex相当于set expire
//设置age的值为23,他的过期时间是30秒。30秒后值就会删除
setex age 30 23
//setne相当于set not exist,如果name不存在则创建,存在则不进行操作
setne name "Wangwu"
字符串的简单操作
set name "zhangsan"
//获取字符串的某一部分,输出结果为zhang,
//跟java有点区别,java是[0,4},redis是[0,4]
getrange name 0 4
//输出结果是zhangsan
getrange name 0 -1
//输出结果是zhangsa
getrange name 0 -2
//获取字符串长度
strlen name
//在字符串后面增加内容
append name "HeWangwu"
//替换字符串,从某个起始位置开始替换
//从0开始替换,name会变成huangsan。
setrange name 0 "hu"
//对已存在的字符串设置过期时间,这里设置了 name 30秒后过期
expire name 30
//字符串的自增或者自减,incr自增,decr为自减,步数为1,如果age
//不是integer则报错
set age 23
incr age
decr age
//设置自增步数,设置age的自增部署为5,自减同理
incrby age 5
批量操作
//批量设置值
mset k1 "key1" k2 "key2" k3 "key3"
//批量设置
mget k1 k2 k3
//批量setne操作,只要一个key已经存在,整行代码都会设置失败
msetne k4 "key1" k5 "key2" k6 "key3"
设置对象
//设置了一个person:1的对象
set person:1 {name:"张三",age:23}
get person:1
//设置一个persion:2的对象
set persion:2 {name:{firstName:Wang,secondName:Wu},age:24}
get persion:3
//还可以这样设置
mset person:3:name zhangsan person:3:age 23
//输入keys *就可以看到了新增了 person:3:name 和 person:3:age两个key
keys *
//使用mget批量获取属性
mget person:3:name person:3:age
二.List
redis的List初步理解
redis的List实际上是一个双向链表,可使用List的链表去完成push和pop操作,redis的一些操作方式实际上可以对比一下堆,队列和链表。
redis的相关操作
// 向list里面push元素one,two和three
lpush list "one"
lpush list "two"
lpush list "three"
// 查看list,注意redis中的-1是最后一个元素,-2是倒数第二个元素
lrange list 0 -1
/**
显示顺序为
three
two
one
*/
// 以栈的方式获取list中的元素,获取到的元素为three,list的three被移除
lpop list
// 以队列的方式获取list中的元素,获取到的元素为one,list的one被移除
rpop list
// 在list的尾部添加元素
rpush list "one"
// 在list的头部添加元素
lpush list "three"
//根据下标获取元素,获取到的元素为three
lindex list 0
//获取list的长度,长度为3
llen list
//根据元素value移除元素,rem就是remove,移除list中一个one,如果list有两个one,可以输入lrem list 2 one移除2个one元素,如果n大于one的元素数量,则把所有one都删除
lrem list 1 one
//先以栈的元素pop元素,push到list2,如果list2不存在则新建一个list2
rpoplpush list list2
//根据下标设置元素值,把第一个元素设置成zero,如果元素不存在,报错数组下标越界
lset list 0 zero
//插入元素,链表操作,在two元素前插入2.5,after同理
linsert list before two 2.5
三.Set
redis中的set简单理解
set是无序的,不能重复的,redis中的set也是符合这两个特性的
set的简单操作命令
// 新增set,并向里面添加Huo元素
sadd set Huo
sadd set wei
sadd set zhen
//查看set中的所有元素
smembers set
//判断某个成员在set中是否存在
sismember set Huo
//查看set的元素个数
scard set
sadd set needleHuo
//移除set中的某个元素,如果元素不存在返回0
srem set needleHuo
//随机获取set中的元素
srandmember set
//随机获取set中2个元素
srandmember set 2
//随机提取一个值
spop set
//获取两个值
spop set 2
//把set中的元素移动到set2中
smove set set2 "Huo"
//集合的相关操作,注意,集合运算结果不会对原集合的内容产生影响
//交集
sinter set set1
//差集
sdiff set set1
//并集
sunion set set1
四.ZSet
zset的简单理解
zset实际上跟java中的treeset很像,放进去的元素都会根据权重去排序。zset的操作相交于set的操作,其实也就多了个权重的操作,命令都很类似的,zset的操作相比于set,命令开头都有个s
zset的基本命令
//新建一个zset,并添加一个权重为1的元素one
zadd set 1 one
//向set中添加2个元素,权重分别为2,3
zadd set 2 two 3 three
//查看set中的所有元素,可以看到这些元素都是正序排序的
zrange set 0 -1
//倒序查看set中的所有元素
zrevrange set 0 -1
//显示所有值并显示权重,-inf是负无穷,+inf是正无穷,如果不加withscores就是显示所有
zrangebyscore set -inf +inf withscores
//显示权重在0-5的键,如果不加withscore就不显示权重
zrangebyscore set 0 5 withscores
//移除元素
zrem set one
//查看元素个数
zcard set
//获取在某个区间的权重的键的数量
zcount set 0 5
//差集,2表示两个集合间作差集,3的话表示3个,他们计算是按照顺序的,比如set set1 set2就是先计算set与set1差集,结果再跟set2计算差集,所以他们顺序不一样结果也不一样
zdiff 2 set set1
//交集,同理
zinter 2 set set1
//并集,同理
zunion 2 set set1
五.Hash
hash的简单理解
redis的哈希其实操作跟String很类似,你可以把hash比作java的map<key,value>,redis的hash可以理解成key-Map<K,V>,比字符串的key-String再增加一层,hash很适合用来存对象
hash的简单操作
//新建一个hash,并给他定义一个field1的元素,field1的值为Huo
hset myhash field1 "H"
//设置多个元素
hset myhash field2 "i" field3 "en"
//获取一个元素
hget myhash field1
//获取多个元素
hmget myhash field1 field2
//获取全部数据
hgetall myhash
//删除指定元素
hdel myhash field1
//获取hash长度
hlen myhash
//判断key是否存在
hexists myhash field
//获取所有key
hkeys myhash
//自增自减
hset myhash field3 2
//设置自增步数为2
hincrby myhash field3
//设置自减不是为2
hincrby myhash field3 -2
//判断字段是否存在,不存在则增加,存在则不做任何操作,如果是批量操作,一个失败则全部失败
hsetnx myhash field1 H field2 w
//新建对象
hset user:1 name zhangsan age 23
//层叠新建对象
hset user:2 name:firstname:zhang
name:secondname:san age 23