@@ -776,3 +776,196 @@ def touch(
776
776
# Convert to milliseconds
777
777
timeout = int (timeout * 1000 )
778
778
return bool (client .pexpire (key , timeout ))
779
+
780
+ def sadd (
781
+ self ,
782
+ key : Any ,
783
+ * values : Any ,
784
+ version : Optional [int ] = None ,
785
+ client : Optional [Redis ] = None ,
786
+ ) -> int :
787
+ if client is None :
788
+ client = self .get_client (write = True )
789
+
790
+ key = self .make_key (key , version = version )
791
+ values = [self .encode (value ) for value in values ]
792
+ return int (client .sadd (key , * values ))
793
+
794
+ def scard (
795
+ self ,
796
+ key : Any ,
797
+ version : Optional [int ] = None ,
798
+ client : Optional [Redis ] = None ,
799
+ ) -> int :
800
+ if client is None :
801
+ client = self .get_client (write = False )
802
+
803
+ key = self .make_key (key , version = version )
804
+ return int (client .scard (key ))
805
+
806
+ def sdiff (
807
+ self ,
808
+ * keys ,
809
+ version : Optional [int ] = None ,
810
+ client : Optional [Redis ] = None ,
811
+ ) -> set :
812
+ if client is None :
813
+ client = self .get_client (write = False )
814
+
815
+ keys = [self .make_key (key , version = version ) for key in keys ]
816
+ return {self .decode (value ) for value in client .sdiff (* keys )}
817
+
818
+ def sdiffstore (
819
+ self ,
820
+ dest : Any ,
821
+ * keys ,
822
+ version : Optional [int ] = None ,
823
+ client : Optional [Redis ] = None ,
824
+ ) -> int :
825
+ if client is None :
826
+ client = self .get_client (write = True )
827
+
828
+ dest = self .make_key (dest , version = version )
829
+ keys = [self .make_key (key , version = version ) for key in keys ]
830
+ return int (client .sdiffstore (dest , * keys ))
831
+
832
+
833
+ def sinter (
834
+ self ,
835
+ * keys ,
836
+ version : Optional [int ] = None ,
837
+ client : Optional [Redis ] = None ,
838
+ ) -> set :
839
+ if client is None :
840
+ client = self .get_client (write = False )
841
+
842
+ keys = [self .make_key (key , version = version ) for key in keys ]
843
+ return {self .decode (value ) for value in client .sinter (* keys )}
844
+
845
+ def sinterstore (
846
+ self ,
847
+ dest : Any ,
848
+ * keys ,
849
+ version : Optional [int ] = None ,
850
+ client : Optional [Redis ] = None ,
851
+ ) -> int :
852
+ if client is None :
853
+ client = self .get_client (write = True )
854
+
855
+ dest = self .make_key (dest , version = version )
856
+ keys = [self .make_key (key , version = version ) for key in keys ]
857
+ return int (client .sinterstore (dest , * keys ))
858
+
859
+ def sismember (
860
+ self ,
861
+ key : Any ,
862
+ member : Any ,
863
+ version : Optional [int ] = None ,
864
+ client : Optional [Redis ] = None ,
865
+ ) -> bool :
866
+ if client is None :
867
+ client = self .get_client (write = False )
868
+
869
+ key = self .make_key (key , version = version )
870
+ member = self .encode (member )
871
+ return bool (client .sismember (key , member ))
872
+
873
+ def smembers (
874
+ self ,
875
+ key : Any ,
876
+ version : Optional [int ] = None ,
877
+ client : Optional [Redis ] = None ,
878
+ ) -> set :
879
+ if client is None :
880
+ client = self .get_client (write = False )
881
+
882
+ key = self .make_key (key , version = version )
883
+ return {self .decode (value ) for value in client .smembers (key )}
884
+
885
+ def smove (
886
+ self ,
887
+ source : Any ,
888
+ destination : Any ,
889
+ member : Any ,
890
+ version : Optional [int ] = None ,
891
+ client : Optional [Redis ] = None ,
892
+ ) -> bool :
893
+ if client is None :
894
+ client = self .get_client (write = True )
895
+
896
+ source = self .make_key (source , version = version )
897
+ destination = self .make_key (destination )
898
+ member = self .encode (member )
899
+ return bool (client .smove (source , destination , member ))
900
+
901
+ def spop (
902
+ self ,
903
+ key : Any ,
904
+ count : Optional [int ] = None ,
905
+ version : Optional [int ] = None ,
906
+ client : Optional [Redis ] = None ,
907
+ ) -> Union [set , Any ]:
908
+ if client is None :
909
+ client = self .get_client (write = True )
910
+
911
+ key = self .make_key (key , version = version )
912
+ result = client .spop (key , count )
913
+ if type (result ) == list :
914
+ return {self .decode (value ) for value in result }
915
+ return self .decode (result )
916
+
917
+ def srandmember (
918
+ self ,
919
+ key : Any ,
920
+ count : Optional [int ] = None ,
921
+ version : Optional [int ] = None ,
922
+ client : Optional [Redis ] = None ,
923
+ ) -> Union [set , Any ]:
924
+ if client is None :
925
+ client = self .get_client (write = False )
926
+
927
+ key = self .make_key (key , version = version )
928
+ result = client .srandmember (key , count )
929
+ if type (result ) == list :
930
+ return {self .decode (value ) for value in result }
931
+ return self .decode (result )
932
+
933
+ def srem (
934
+ self ,
935
+ key : Any ,
936
+ * members ,
937
+ version : Optional [int ] = None ,
938
+ client : Optional [Redis ] = None ,
939
+ ) -> int :
940
+ if client is None :
941
+ client = self .get_client (write = True )
942
+
943
+ key = self .make_key (key , version = version )
944
+ members = [self .decode (member ) for member in members ]
945
+ return int (client .srem (key , * members ))
946
+
947
+ def sunion (
948
+ self ,
949
+ * keys ,
950
+ version : Optional [int ] = None ,
951
+ client : Optional [Redis ] = None ,
952
+ ) -> set :
953
+ if client is None :
954
+ client = self .get_client (write = False )
955
+
956
+ keys = [self .make_key (key , version = version ) for key in keys ]
957
+ return {self .decode (value ) for value in client .sunion (* keys )}
958
+
959
+ def sunionstore (
960
+ self ,
961
+ destination : Any ,
962
+ * keys ,
963
+ version : Optional [int ] = None ,
964
+ client : Optional [Redis ] = None ,
965
+ ) -> int :
966
+ if client is None :
967
+ client = self .get_client (write = True )
968
+
969
+ destination = self .make_key (destination , version = version )
970
+ keys = [self .make_key (key , version = version ) for key in keys ]
971
+ return int (client .sunionstore (destination , * keys ))
0 commit comments