一、String(字符串)
90%的java程序员,只会String
# 设置值
set key1 v1
# 获得值
get key1
# 获得所有的key
keys *
#判断某一个key是否存在
exists key1
# 追加字符串,如果此时key不存在,就相当于set了key
append key1 "hello"
# 获取字符串的长度
strlen key1
浏览量怎么来的
set views 0
get views
# 当有用户来看的时候,就让views + 1
incr views # 自增1
# 让浏览量 -1
decr key # 自减1
# 直接涨10个
incrby views 10 # 设置步长,指定增长量
# 直接降10个
decrby views 10
截取字符串
# 将key1所代表的value字符串,从第0个截取到第3个
getrange key1 0 3
# 全部输出
getrange key1 0 -1
替换字符串
# 把key2字符串从第1个数开始,替换为xx(替换2个)
SETRANG key2 1 xx
判空
# setex (set with exist) # 设置过期时间
# 设置key3的值为"hello",存在30秒
setex key3 30 "hello"
# setnx (set if not exist) # 如果不存在再设置
setnx mykey "redis"
1 # 成功为1
setnx mykey "MongoDB"
0 # 失败为0
get mykey # redis
批量获取值和批量设置值
# mset 一下子创建多个键和值
mset k1 v1 k2 v2 k3 v3
# mget 一下子获取多个键和值
mget k1 k2 k3
"v1"
"v2"
"v3"
# msetnx 不存在就创建(如果原来已经存在,那就失败了)
# msetnx是一个原子性操作,一块成功或一块失败
msetnx k1 v1 k4 v4
# 0
# 对象
# 设置一个user:1对象,只为json字符来保存对象
# user:1的name设为zhangsan,age设为3
set user:1 {name:zhangsan, age:3}
组合命令 : get-set
# getset 先get再set
# 用于设置指定 key 的值,并返回 key 的旧值。
getset db redis # 如果不存在值,则返回nil(设置key为db,value为redis)
nil
get db
"redis"
# 获取原来的值,并设置新的值,直接设置新值不就行了吗???
getset db mongodb # 如果存在值,获取原来的值,并设置新的值
"redis"
get db
"mongodb"
使用场景:
- 计数器
- 统计多单位的数量
- 粉丝数
- 对象缓存存储
二、List
列表
在Redis里面,可以把list玩成栈、队列、阻塞队列
所有的list命令都是 l 开头的=
# 放值(先进后出) 插入到列表头部 --- 从左边放进去
lpush
lpush list one
lpush list two
lpush list three
# 放值 插入到列表尾部(后进先出) --- 从右边放进去
rpush
rpush list right
# 获取一下全部的值
lrange list 0 -1
# 输出
“three”
“two”
“one”
“right”
“three” “two” “one” “right”
那我要是想移除一个元素呢?pop想都不用想
# 想把左边的移出去
lpop list
# 现有的 “three” “two” “one” “right”
"three"
# 想把右边的移出去
rpop list
我想得到指定位置的值(通过下标获取list中的某一个值)
# 左边第二个
lindex list 1
# 左边第一个
lindex list 0
我想移除指定位置的值(通过下标获取list中的某一个值)
# 想取关某个博主
# 取关uid
# 移除1个值,这个值叫“one”
lrem list 1 one
我想得到list的长度
llen list
修剪list
# 只留下指定值,即通过下标截取指定的长度,会发现这个list已经被截断了
ltrim mylist(key) 1 2
t中的某一个值)
```bash
# 想取关某个博主
# 取关uid
# 移除1个值,这个值叫“one”
lrem list 1 one
我想得到list的长度
llen list
修剪list
# 只留下指定值,即通过下标截取指定的长度,会发现这个list已经被截断了
ltrim mylist(key) 1 2