Redis教程

redis基础复习,五大基本数据类型,redis中的事物,redis乐观锁

本文主要是介绍redis基础复习,五大基本数据类型,redis中的事物,redis乐观锁,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

redis概述

redisAPI查询网站

登录退出redis

redis-server redis.conf  #打开redis服务
redis-cli    #进入redis的命令
shutdown	#关闭redis
exit		#退出redis

快捷清屏的方式
CTRL+L

redis默认一共有16个数据库

redis是不区分大小写的

基本数据类型string

切换数据库(数据库的编号从0开始的)
select 3
清空数据库
flushdb #清空当前数据库
flushall #清空所有数据库
设置键值(存在会覆盖掉原来的值)
set key value
根据键值获取值
get key
返回所有键
keys *
keys key   #存在key则会返回1 不存在返回0
判断一个字符串是否存在
exiists key  #存在key则会返回1 不存在返回0
移除key
move key db  #从哪个数据库移除key
设置key的过期时间
expire key seconds   #设置key的过期时间,单位是秒
查看key的剩余时间
ttl key
追加字符串
append key value #在key的末尾追加字符串value。返回字符串的长度
获取字符串的长度
strlen key #获取key的长度
数字的自增自减,设置步长
incr key  #将key自增1
decr key #将key自减1
incrby key inrement  #将key自加increment
decrby key decrement #j将key自减decrement
截取字符串(前后都包括)原字符串不改变
getrange key  a  b  #截取key的[a,b]
getrange key 0  -1   #获取字符串key
替换字符串(字符串的角标从0开始)key的offset开始的value长度个字符被替换成value,
setrange key  offset value  #从key的offset处替换value
设置字符串(如果不存在再设置)(如果存在key,则设置key失败)
setnx key  value
设置字符串和过期时间
setex key seconds value #设置字符串key的value和过期时间seconds
同时设置多个值
mset  key1 value1  key2 value2  .....
设置多个key(不存在再设置)
msetnx key1 value1 key2 value 2   #原子性操作!!!!
同时获取多个值
mget key1 key2 .....
先get再set(先获取key的值再重新设置key的值)
getset  key  value

基本数据类型List列表

所有list命令都是l开头的

按顺序向list中头部添加元素
lpush key element .... 
获取list中的值
lrange key start stop
lrange list 0 -1 #获取list集合中全部的元素,从头到尾输出
按顺序向list的尾部添加元素
rpush key element ......
从list的头部开始按顺序删除count个元素并返回元素
lpop key coount
从list的尾部开始桉顺序删除count个元素并返回元素
rpop key count 
通过下标获取list中指定位置的值(下标从0开始)
lindex key index
返回list的长度
llen key
移除指定元素
lrem key count element #从集合key中移除count个元素element,若集合中element的数量小于count也不会报错
截取list(原来的集合会改变)
ltrim key start stop (start和stop为边界下标[start,stop]) 
将list中最后一个元素移除,并放入新的列表中
rpoplpush source destination #source是被删除的集合,destination 是加入元素的集合
判断列表是否存在
exists key
将列表中指定下标的值替换为另外一个值
lset key index element
插入操作
linsert key before|after pivot element # pivot 表述元素的值

基本数据类型set集合

set中的值是不能重复的,是无序的(存入和取出的孙祖不是一致的)

所有set的命令都是s开头的

集合中添加元素
sadd key member ....
查看set集合中所有的值
smembers key
判断某一个集合是否在集合中
sismember key member
获取set集合中元素的个数
scard key
移除set集合中指定的元素
srem key member .......
随机抽取count个元素
srandmember key [count]  # []表示可以可无
随机删除set集合中的元素
spop key [count]
将set集合中指定的值移动到另一个set集合中
smove source destination member
两个set集合的差集
sdiff key [key1.....]   # key中和[key1]中都不同的元素
两个set集合的交集
sinter key [key1.....]    # key中和[key1]中都相同的元素
两个set集合的并集
suion key [key1......]     # key和[key1]的并集

基本数据类型hash

hash的命令都是h开头的

可以理解是数据结构中的hashMap,

添加元素
hset key filed value [filed value]
获取hash集合中某一个具体的值
hget key filed
获取多个字段的值
hmget key filed  .....
获取hash集合中全部的数据
hgetall key
删除hash集合中指定的key字段,对应的value会自动被删除
hdel key filed .......
获取hash集合的长度
hlen
判断hash中指定字段是否存在
hexists key filed
只获取所有key
hkeys key
只获取所有value
hvals key
对hash集合中的元素进行自增运算
hincrby key filed increment  # 将集合key中的 filed 进行自增运算,increment可以是负数
如果不存在filed则设置filed
hsetnx key filed value

基本数据类型有序集合zset

在set的基础上,增加了一个值,用来进行排序

所有的zset命令都是z开头

添加元素
zadd score member [score member]
显示集合的全部数据 从小到大
zrangebyscore key-inf +inf
显示集合的全部数据 从大到进行排序
zrevrange key 0 -1
显示全部的用户并且附带score
zrangebyscire key -inf +inf withscores  # [-inf ,+inf ]  查找的范围
移除有序集合中的指定元素
zrem key member
获取zset集合中元素的个数
zcard key
获取指定区间的成员数量
zcount key min max  # [min ,max] 表示区间

还有三种特殊数据类型自己去查API吧

  1. Geospatial地理位置

  2. Hyperloglog(可以找不重复的元素)

  3. Bitmap(位图)

    redis官方网站

redis中的事物

  1. redis中的事物没有隔离的概念
  2. redis中的事物不保证原子性(每一条命令是保证原子性的)
  3. redis中事物的本质就是一组命令的集合

redis中事物执行的流程

  1. 开启事务 (multi)
  2. 命令入队
  3. 执行事物 / 取消事物(exec)
开启事务
multi
命令....
执行事物
exec
取消事物
discard

在这里插入图片描述
取消事物,事物内的命令都不会被执行

异常

  1. 编译型异常(语法错误)事物内的语句都不会被执行
  2. 运行时异常(逻辑错误)事物内的正常语句会执行成功

redis的监视器(乐观锁)

watch key #获取key的监视器
unwatch key  #释放锁

  1. 当key被获取了监视器后,只有事物执行结束后或者执行了unwatch是key的监视器才会被释放(这个事物中必须要使用到被获取了监视器的key)
  2. 获取监视器相当于对key的value进行了快照(记录),如果在事务执行中发现key的值被改变了==(不会产生ABA问题)==,那么事物就不会执行成功
  3. 如果事物没有执行成功会释放key的监视器
  4. redis的监视器可以理解为并发编程中CAS原子操作
这篇关于redis基础复习,五大基本数据类型,redis中的事物,redis乐观锁的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!