密码

使用config set requirepass 命令设置密码
设置之后可以通过 auth 密码验证,不然·没权限查看东西
查看密码
config get requirepass

String(字符串)

90% java程序员使用redis只会使用一个String类型
创建
set key1 v1
查询
get key1
查询所有
keys *
判断是否存在
exists key1
追加
append key1 hello
获取字符串长度
strlen key1
创建 初始浏览量为0
127.0.0.1:6379> set views 0
OK
查询
127.0.0.1:6379> get views
“0”
自增1
incr views
自减1
decr views
增10
incrby views 10
减5
decrby views 5
查看字符串 0到3
127.0.0.1:6379> getrange key1 0 3
查看所有长度
getrange key1 0 -1
替换指定位置开始的字符串!
setrange key2 1 xx
设置过期时间30秒 setex:set with expire
setex key3 30 hello
不存在设置 在分布式锁中会常常使用!存在就会创建失败 setnx:set if not exist
setnx mykey mongodb
一次性存入多个元素
mset k1 v1 k2 v2 k3 v3
一次性获取多个元素
mget k1 k2
都失败了,因为k1存在k4虽然不存在也会全失败
msetnx k1 v1 k4 v4
对象
set user:1 {name:yaoquan, age:3} 设置一个user:1 对象 值为json字符来保存一个对象
这里的key是一个巧妙的设计,user:{id}:{filed},如此设计在Redis中是完全ok的
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 12
OK
127.0.0.1:6379> mget user:1:name user:1:age
1) “zhangsan”
2) “12”
getset组合命令
127.0.0.1:6379> getset db redis
(nil)
127.0.0.1:6379> get db
“redis”
127.0.0.1:6379> getset db mongodb
“redis”
127.0.0.1:6379> get db
“mongodb”
数据结构是相同的。
String类型的使用场景
value除了我们的字符串还可以是我们的数字
计数器
统计多单位的数量:uid:123123:follow 0 incr
粉丝数
对象缓存存储!

  1. stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS);//向redis里存入数据和设置缓存时间
  2. stringRedisTemplate.boundValueOps("test").increment(-1);//val做-1操作
  3. stringRedisTemplate.opsForValue().get("test")//根据key获取缓存中的val
  4. stringRedisTemplate.boundValueOps("test").increment(1);//val +1
  5. stringRedisTemplate.getExpire("test")//根据key获取过期时间
  6. stringRedisTemplate.getExpire("test",TimeUnit.SECONDS)//根据key获取过期时间并换算成指定单位
  7. stringRedisTemplate.delete("test");//根据key删除缓存
  8. stringRedisTemplate.hasKey("546545");//检查key是否存在,返回boolean值
  9. stringRedisTemplate.opsForSet().add("red_123", "1","2","3");//向指定key中存放set集合
  10. stringRedisTemplate.expire("red_123",1000 , TimeUnit.MILLISECONDS);//设置过期时间
  11. stringRedisTemplate.opsForSet().isMember("red_123", "1")//根据key查看集合中是否存在指定数据
  12. stringRedisTemplate.opsForSet().members("red_123");//根据key获取set集合
  13. SetParams params = SetParams.setParams().ex(300).xx() //秒,强制覆盖
  14. jedisCluster.set(key, value, params)

List

添加一个list
元素
LPUSH list one
查看list所有元素
lrange list 0 -1
最先添加的在最后面
向最右边加一个
rpush list righr
移除左边的
lpop list
右边
rpop list
通过下标获取某一个
lindex list 1
长度
llen list
移除指定的值移除one
lrem list 1 one
移除两个three
lrem list 2 three
通过下标截取指定长度 留下下标从一到二的
itrim list 1 2
将列表最后一个元素移动到其他列表中
rpoplpush mylist myotherlist
更新具体下标的数据
lset list 0 item
插入该列表某个元素的前面
linsert list before item other
插入该列表某个元素的后面
linsert list after item after
它实际上是一个链表,before Node after, left right 都可以插入值
如果key不存在,创建新的链表
如果key存在,新增内容
如果移除了所有的值,空链表,也代表不存在!
在两边插入或者改动值,效率最高,中间元素,相对来说效率会低一点
消息排队!消息队列!(Lpush Rpop), 栈(Lpush, Lpop)

set()

set中的值是不能重复的
添加元素
sadd myset hello
查询元素
smembers myset
判断是否存在该元素
sismember myset hello
查询元素个数
scard myset
移除某元素
srem myset hello
随机抽出一个元素
srandmember myset
随机抽出指定个数的元素
srandmember myset 2
随机删除一个元素
spop myset
将该元素移到其他set中
smove myset myset2 yaoquan
第一个为基准,不同的元素
sdiff key1 key2
交集
sinter key1 key2
并集
sunion key1 key2

Hash()

Map集合,key-map! 这时候这个值是一个map集合 本质和String类型没有太大区别,还是一个简单的key-value!
set一个具体的key-value
hset myhash field1 yaoquan
set多个key-value
hmset myhash field1 hello field2 world
获取字段值
hget myhash field1
获取多个字段值
hmget myhash field1 field2
获取全部数据
hgetall myhash
删除hash指定key字段,对应的value值也就消失了
hdel myhash field1
获取hash表的字段数量
hlen myhash
判断指定字段是否存在
hexists myhash field2
获取所有key
hkeys myhash
获取所有value
hvals myhash
指定增量
hset myhash field3 5
原来的value+1
hincrby myhash field3 1
原来的value-1
hincrby myhash field3 -1
不存在就创建
hsetnx myhash field4 hello
存在就不生效 结果还是hello world没有效果
hsetnx myhash field4 world
hash变更的数据user name age,尤其是用户信息之类的,经常变动的信息!hash更适合于对象的存储,String更加适合字符串存储!

Zset()

在set的基础上,增加了一个值,setk1 v1 zset k1 score1 v1
添加一个值
zadd myset 1 one
添加多个值
zadd myset 2 two 3 three
查询所有元素
zrange myset 0 -1
添加三个用户
127.0.0.1:6379> zadd salary 2500 xiaohong
(integer) 1
127.0.0.1:6379> zadd salary 5000 zhangsan
(integer) 1
127.0.0.1:6379> zadd salary 500 yaoquan
(integer) 1
通过salary排序展示 inf表示无穷
127.0.0.1:6379> zrangebyscore salary -inf +inf
1) “yaoquan”
2) “xiaohong”
3) “zhangsan”
从大到小
zrevrange salary 0 -1
可以带上自己的数值
zrangebyscore salary -inf +inf withscores
可以自己规定区间
127.0.0.1:6379> zrangebyscore salary -inf 2500 withscores
1) “yaoquan”
2) “500”
3) “xiaohong”
4) “2500”
移除rem中的元素
zrem salary xiaohong
获取有序集合中的个数
zcard salary
获取指定区间的成员数量
zcount myset 1 3
其余的一些api,通过我们的学习,剩下的如果工作中有需要,可以去查查官方文档
案例思路:set排序存储班级成绩表,工资表排序!
普通消息,1,重要消息2,带权重进行判断!
排行榜应用实现,取topN测试