linux下操作
查看redis是否启动会
ps -ef | grep redis
启动
redis-server redis.conf
关闭
redis-cli shutdown
进入客户端
redis-cli
redis语法
redis操作
设置密码
config set requirepass xxx
验证密码
auth xxx
查询密码
config get requirepass
数据库操作
选择数据库
select index(0~16)
查看当前数据库所有key
keys *
清空当前数据库
flushdb
清空所有数据库
flushall
数据操作
判读key是否存在(存在返回1,不存在返回0)
exists key
给key设置过期时间(key 10s 从内存清除)
expire key 10
移除key-value
move key value
查看当前key的类型
type key
查看key的剩余时间(-1是永久)
ttl key
String
String类型
设置key-value
set key value
获取key的value
get key
拼接key的value(value需要加 双引号,如果key不存在,相当于set key value)
append key newString
获取value的长度
strlen key
value +1
incr key
value -1
decr key
value +n
incrby key n
value -n
decrby key n
截取字符串
getrange key 0 3
替换字符串(将第2个字符串改成 xx)
setrange key 1 xx
设置有过期时间的key-value(30s过期)
setex key 30 value
设置key-value,如果存在,不操作(常用于分布式锁)
setnx key value
设置多个key-value
mset k1 v1 k2 v2 k3 v3
获取多个value
mget k1 k2 k3
设置多个key-value,如果存在,不操作(具有原子性,一起成功or一起失败)
msetnx k1 v1 k4 v4
设置对象,值为json字符串(无法获取属性)
set user:1 {name:zhangsan,age:14}
设置对象,可以获取属性(等于是设置了两个key user:1:name 和 user:1:age)
mset user:1:name lisi user:1:age 12
先获取,再设置(如果不存在key 返回 nil)
getset key value
list
定义
list类型从左向右,是个链表结构
value可以重复
场景
消息队列
向列表左边插入数据
lpush key value
向列表右边插入数据
rpush key value
获取list指定区间的数据
lrange key 0 1 (从左开始获取第一,第二个数据)
获取list所有的值
lrange key 0 -1
移除list最左边的值(值从list 消失)
lpop key
移除list最右边的值(值从list 消失)
rpop key
通过下标获取值(值还在list)
lindex key 1 (获取list第二个元素)
获取列表的长度
llen key
从左开始移除列表指定数量的value
lrem key 2 a (从左开始移除 2个a)
截取列表指定区间的value 构成新的列表
ltrim key 0 1 (将当前列表第一,第二个value 构成一个新的 list)
移除最右边一个值到另一个列表的最左边
rpoplpush key newKey
更新列表指定下标的值(不存在报错)
lset key 0 a (跟新当前列表的第一个value 为 a)
从左开始向列表中的某个value 左边 插入指定的 value
linsert key before a x(在第一个a 前面插入一个 x ,如果有多个a 只执行一次)
从左开始向列表中的某个value 右边 插入指定的 value
linsert key after a x(在第一个a 前面插入一个 x ,如果有多个a 只执行一次)
set
定义
无序不重复集合
场景
B站共同关注 用set取交集
数据类型
交集
差集
并集
向set中添加元素
sadd set value
查看set 中所有元素
smembers key
判断set是否存在某个value
sismember key value
获取set中元素的个数
scard key
移除set中的元素
srem key value
随机抽出指定个数的元素
srandmember key number
随机删除set中的元素
spop key
移除当前Set中元素到指定的set
smove key newKey value
获取两个set的差集(只获取key1的差集)
sdiff key1 key2
获取两个set的交集
sinter key1 key2
获取两个set的并集
sunion key1 key2
hash
定义
是个map集合
场景
用户信息保存
适合存储对象
设置具体的key-value
hset key field value
设置多个key-value
hmset key field1 value1 fielld2 value2
获取hash的value
hger key field
获取hash多个value
hmget key field1 field2
获取hash全部key-value
hgetall key
删除hash指定key-value
hdel key field
获取hash 名值对 数量
hlen key
判断hash中是否存在key
hexists key field
获取hash 所有 key
hkeys key
获取hash 所有 value
hvals key
value 自增 n
hincrby key field n
设置具体的key-value,如果存在则不设置
hsetnx key field value
zset
定义
在set基础上增加量一个值(score)
场景
存储成绩表
需要排序的
热点排行榜
设置一个zset 值
zadd key number value
zset 进行排序
zrangebyscore key -inf +inf
移除 zset 中指定 元素
zrem key value
获取集合中个数
zcard key
获取指定score区间成员数量
zcount key 1 2
geospatial
定义
本质是用zset存储的,官方给出的适合做地图的数据类型(提供api)
可用用zst命令 操作
场景
地理位置(下载城市数据,java一次性导入)
添加地理位置
geoadd china:city 30.0 100.0 shanghai (经度30 纬度100 上海)
获取城市经纬度
geopos china:city shanghai
返回两个地点之间的距离
geodist china:city beijing chongqing km
以某一点为中心 找出半径 你以内的所有元素
georadius china:city 30 100 1000 km (取经纬30/100为中心 半径1000km内的所有元素)
以某一点为中心 找出半径 你以内的所有元素(显示直线距离)
georadius china:city 30 100 1000 km withdist
以某一点为中心 找出半径 你以内的所有元素(带经纬度)
georadius china:city 30 100 1000 km withcoord
找出指定元素周围的元素
georadiusbymember china:city beijing 1000km (找出背景周围1000km的城市)
hyperloglog
计数
有1%错误概率
事务
开启事务
multi
执行一系列命令
提交事务
exec
取消事务
discard
乐观锁
watch key
取消乐观锁
unwatch key
redis乐观锁实现
开启乐观锁的方法,监视要操作的对象
使用乐观锁
watch key
multi
操作 key
exec
在exec之前如果key 被别的线程修改了 ,就会导致事务提交失败
1